mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 20:29:14 +02:00
* mark produced object files as "does not require executable stack" by
default for Linux (overridable using -WX switch) (mantis #11563) git-svn-id: trunk@12356 -
This commit is contained in:
parent
5c1d4b130b
commit
3216e8c7bc
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -8595,6 +8595,7 @@ tests/webtbs/tw11435c.pp svneol=native#text/plain
|
|||||||
tests/webtbs/tw11436.pp svneol=native#text/plain
|
tests/webtbs/tw11436.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw1152.pp svneol=native#text/plain
|
tests/webtbs/tw1152.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw11543.pp svneol=native#text/plain
|
tests/webtbs/tw11543.pp svneol=native#text/plain
|
||||||
|
tests/webtbs/tw11563.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw11568.pp svneol=native#text/plain
|
tests/webtbs/tw11568.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw1157.pp svneol=native#text/plain
|
tests/webtbs/tw1157.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw1157b.pp svneol=native#text/plain
|
tests/webtbs/tw1157b.pp svneol=native#text/plain
|
||||||
|
@ -1138,6 +1138,13 @@ implementation
|
|||||||
(target_info.system in systems_darwin) then
|
(target_info.system in systems_darwin) then
|
||||||
AsmWriteLn(#9'.subsections_via_symbols');
|
AsmWriteLn(#9'.subsections_via_symbols');
|
||||||
|
|
||||||
|
{ "no executable stack" marker for Linux }
|
||||||
|
if (target_info.system in system_linux) and
|
||||||
|
not(cs_executable_stack in current_settings.moduleswitches) then
|
||||||
|
begin
|
||||||
|
AsmWriteLn('.section .note.GNU-stack,"",%progbits');
|
||||||
|
end;
|
||||||
|
|
||||||
AsmLn;
|
AsmLn;
|
||||||
{$ifdef EXTDEBUG}
|
{$ifdef EXTDEBUG}
|
||||||
if assigned(current_module.mainsource) then
|
if assigned(current_module.mainsource) then
|
||||||
|
@ -128,7 +128,9 @@ interface
|
|||||||
{ linking }
|
{ linking }
|
||||||
cs_create_smart,cs_create_dynamic,cs_create_pic,
|
cs_create_smart,cs_create_dynamic,cs_create_pic,
|
||||||
{ browser switches are back }
|
{ browser switches are back }
|
||||||
cs_browser,cs_local_browser
|
cs_browser,cs_local_browser,
|
||||||
|
{ target specific }
|
||||||
|
cs_executable_stack
|
||||||
);
|
);
|
||||||
tmoduleswitches = set of tmoduleswitch;
|
tmoduleswitches = set of tmoduleswitch;
|
||||||
|
|
||||||
|
@ -2859,6 +2859,7 @@ S*2Tlinux_Linux
|
|||||||
3*1W<x>_Target-specific options (targets)
|
3*1W<x>_Target-specific options (targets)
|
||||||
A*1W<x>_Target-specific options (targets)
|
A*1W<x>_Target-specific options (targets)
|
||||||
P*1W<x>_Target-specific options (targets)
|
P*1W<x>_Target-specific options (targets)
|
||||||
|
p*1W<x>_Target-specific options (targets)
|
||||||
3*2Wb_Create a bundle instead of a library (Darwin)
|
3*2Wb_Create a bundle instead of a library (Darwin)
|
||||||
P*2Wb_Create a bundle instead of a library (Darwin)
|
P*2Wb_Create a bundle instead of a library (Darwin)
|
||||||
p*2Wb_Create a bundle instead of a library (Darwin)
|
p*2Wb_Create a bundle instead of a library (Darwin)
|
||||||
@ -2884,6 +2885,10 @@ A*2WN_Do not generate relocation code, needed for debugging (Windows)
|
|||||||
3*2WR_Generate relocation code (Windows)
|
3*2WR_Generate relocation code (Windows)
|
||||||
A*2WR_Generate relocation code (Windows)
|
A*2WR_Generate relocation code (Windows)
|
||||||
P*2WT_Specify MPW tool type application (Classic Mac OS)
|
P*2WT_Specify MPW tool type application (Classic Mac OS)
|
||||||
|
3*2WX_Enable executable stack (Linux)
|
||||||
|
A*2WX_Enable executable stack (Linux)
|
||||||
|
p*2WX_Enable executable stack (Linux)
|
||||||
|
P*2WX_Enable executable stack (Linux)
|
||||||
**1X_Executable options:
|
**1X_Executable options:
|
||||||
**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Linux)
|
**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Linux)
|
||||||
**2Xd_Do not use standard library search path (needed for cross compile)
|
**2Xd_Do not use standard library search path (needed for cross compile)
|
||||||
|
@ -779,7 +779,7 @@ const
|
|||||||
option_info=11024;
|
option_info=11024;
|
||||||
option_help_pages=11025;
|
option_help_pages=11025;
|
||||||
|
|
||||||
MsgTxtSize = 50203;
|
MsgTxtSize = 50397;
|
||||||
|
|
||||||
MsgIdxMax : array[1..20] of longint=(
|
MsgIdxMax : array[1..20] of longint=(
|
||||||
24,87,251,84,65,50,108,22,201,62,
|
24,87,251,84,65,50,108,22,201,62,
|
||||||
|
@ -1141,55 +1141,60 @@ const msgtxt : array[0..000209,1..240] of char=(
|
|||||||
'3*1W<x>_Target-specific options (targets)'#010+
|
'3*1W<x>_Target-specific options (targets)'#010+
|
||||||
'A*1W<x>_Target-specific options (targets)'#010+
|
'A*1W<x>_Target-specific options (targets)'#010+
|
||||||
'P*1W<x>_Target-specific options (targets)'#010+
|
'P*1W<x>_Target-specific options (targets)'#010+
|
||||||
'3*2Wb_Create a bundle instead of a library (Darwin)'#010+
|
'p*1W<x>_Target-specific options (targets)'#010+
|
||||||
'P*2Wb_Create a bun','dle instead of a library (Darwin)'#010+
|
'3*2Wb_Create a bundle instea','d of a library (Darwin)'#010+
|
||||||
|
'P*2Wb_Create a bundle instead of a library (Darwin)'#010+
|
||||||
'p*2Wb_Create a bundle instead of a library (Darwin)'#010+
|
'p*2Wb_Create a bundle instead of a library (Darwin)'#010+
|
||||||
'3*2WB_Create a relocatable image (Windows)'#010+
|
'3*2WB_Create a relocatable image (Windows)'#010+
|
||||||
'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
|
'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
|
||||||
'3*2WC_Specify console type application (EMX, OS/2, Windows)',#010+
|
'3*2WC_Specify con','sole type application (EMX, OS/2, Windows)'#010+
|
||||||
'A*2WC_Specify console type application (Windows)'#010+
|
'A*2WC_Specify console type application (Windows)'#010+
|
||||||
'P*2WC_Specify console type application (Classic Mac OS)'#010+
|
'P*2WC_Specify console type application (Classic Mac OS)'#010+
|
||||||
'3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
|
'3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
|
||||||
'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
|
'A*2WD_Use DEFFILE to export fu','nctions of DLL or EXE (Windows)'#010+
|
||||||
'3*2We_Use ','external resources (Darwin)'#010+
|
'3*2We_Use external resources (Darwin)'#010+
|
||||||
'P*2We_Use external resources (Darwin)'#010+
|
'P*2We_Use external resources (Darwin)'#010+
|
||||||
'p*2We_Use external resources (Darwin)'#010+
|
'p*2We_Use external resources (Darwin)'#010+
|
||||||
'3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
|
'3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
|
||||||
'3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
|
'3*2WG_Specify graphic type application ','(EMX, OS/2, Windows)'#010+
|
||||||
'A*2WG_Specify graphic',' type application (Windows)'#010+
|
'A*2WG_Specify graphic type application (Windows)'#010+
|
||||||
'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
|
'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
|
||||||
'3*2Wi_Use internal resources (Darwin)'#010+
|
'3*2Wi_Use internal resources (Darwin)'#010+
|
||||||
'P*2Wi_Use internal resources (Darwin)'#010+
|
'P*2Wi_Use internal resources (Darwin)'#010+
|
||||||
'p*2Wi_Use internal resources (Darwin)'#010+
|
'p*2Wi_Use internal resources (Darwin)'#010,
|
||||||
'3*2WN_Do not generate relocation code, nee','ded for debugging (Windows'+
|
'3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
|
||||||
')'#010+
|
|
||||||
'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
|
'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
|
||||||
'3*2WR_Generate relocation code (Windows)'#010+
|
'3*2WR_Generate relocation code (Windows)'#010+
|
||||||
'A*2WR_Generate relocation code (Windows)'#010+
|
'A*2WR_Generate relocation code (Windows)'#010+
|
||||||
'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
|
'P*2WT_Specify MPW ','tool type application (Classic Mac OS)'#010+
|
||||||
'**1','X_Executable options:'#010+
|
'3*2WX_Enable executable stack (Linux)'#010+
|
||||||
'**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
|
'A*2WX_Enable executable stack (Linux)'#010+
|
||||||
'ux)'#010+
|
'p*2WX_Enable executable stack (Linux)'#010+
|
||||||
|
'P*2WX_Enable executable stack (Linux)'#010+
|
||||||
|
'**1X_Executable options:'#010+
|
||||||
|
'**2Xc_Pass --shared/-dyn','amic to the linker (BeOS, Darwin, FreeBSD, L'+
|
||||||
|
'inux)'#010+
|
||||||
'**2Xd_Do not use standard library search path (needed for cross compil'+
|
'**2Xd_Do not use standard library search path (needed for cross compil'+
|
||||||
'e)'#010+
|
'e)'#010+
|
||||||
'**2Xe_Use external linker'#010+
|
'**2Xe_Use external linker'#010+
|
||||||
'**2Xg_Create debuginfo in a separate file and',' add a debuglink sectio'+
|
'**2Xg_Create debuginfo in a separate file and add a debuglink section '+
|
||||||
'n to executable'#010+
|
'to executable'#010+
|
||||||
'**2XD_Try to link units dynamically (defines FPC_LINK_DYNAMIC)'#010+
|
'**2XD_T','ry to link units dynamically (defines FPC_LINK_DYNAMIC)'#010+
|
||||||
'**2Xi_Use internal linker'#010+
|
'**2Xi_Use internal linker'#010+
|
||||||
'**2Xm_Generate link map'#010+
|
'**2Xm_Generate link map'#010+
|
||||||
'**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
|
'**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
|
||||||
's '#039'main'#039')'#010+
|
's '#039'main'#039')'#010+
|
||||||
'**2XP<x>_Pr','epend the binutils names with the prefix <x>'#010+
|
'**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
|
||||||
'**2Xr<x>_Set library search path to <x> (needed for cross compile) (Be'+
|
'*','*2Xr<x>_Set library search path to <x> (needed for cross compile) ('+
|
||||||
'OS, Linux)'#010+
|
'BeOS, Linux)'#010+
|
||||||
'**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+
|
'**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+
|
||||||
', Linux, Mac OS, Solaris)'#010+
|
', Linux, Mac OS, Solaris)'#010+
|
||||||
'**2Xs_Strip all sy','mbols from executable'#010+
|
'**2Xs_Strip all symbols from executable'#010+
|
||||||
'**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+
|
'**2XS_Try to link units ','statically (default, defines FPC_LINK_STATIC'+
|
||||||
|
')'#010+
|
||||||
'**2Xt_Link with static libraries (-static is passed to linker)'#010+
|
'**2Xt_Link with static libraries (-static is passed to linker)'#010+
|
||||||
'**2XX_Try to smartlink units (defines FPC_LINK_SMART)'#010+
|
'**2XX_Try to smartlink units (defines FPC_LINK_SMART)'#010+
|
||||||
'**1*_'#010+
|
'**1*_'#010+
|
||||||
'**1?_Show thi','s help'#010+
|
'**1?_Show this help'#010+
|
||||||
'**1h_Shows this help without waiting'
|
'**1h_Shows this help without waiting'
|
||||||
);
|
);
|
||||||
|
@ -1021,6 +1021,10 @@ implementation
|
|||||||
symtabsect:=TElfObjSection.create_ext(ObjSectionList,'.symtab',SHT_SYMTAB,0,0,0,4,sizeof(telfsymbol));
|
symtabsect:=TElfObjSection.create_ext(ObjSectionList,'.symtab',SHT_SYMTAB,0,0,0,4,sizeof(telfsymbol));
|
||||||
strtabsect:=TElfObjSection.create_ext(ObjSectionList,'.strtab',SHT_STRTAB,0,0,0,1,0);
|
strtabsect:=TElfObjSection.create_ext(ObjSectionList,'.strtab',SHT_STRTAB,0,0,0,1,0);
|
||||||
shstrtabsect:=TElfObjSection.create_ext(ObjSectionList,'.shstrtab',SHT_STRTAB,0,0,0,1,0);
|
shstrtabsect:=TElfObjSection.create_ext(ObjSectionList,'.shstrtab',SHT_STRTAB,0,0,0,1,0);
|
||||||
|
{ "no executable stack" marker for Linux }
|
||||||
|
if (target_info.system in system_linux) and
|
||||||
|
not(cs_executable_stack in current_settings.moduleswitches) then
|
||||||
|
TElfObjSection.create_ext(ObjSectionList,'.note.GNU-stack',SHT_PROGBITS,0,0,0,1,0);
|
||||||
{ insert the empty and filename as first in strtab }
|
{ insert the empty and filename as first in strtab }
|
||||||
strtabsect.writestr(#0);
|
strtabsect.writestr(#0);
|
||||||
strtabsect.writestr(ExtractFileName(current_module.mainsource^)+#0);
|
strtabsect.writestr(ExtractFileName(current_module.mainsource^)+#0);
|
||||||
|
@ -1461,6 +1461,18 @@ begin
|
|||||||
else
|
else
|
||||||
apptype:=app_tool;
|
apptype:=app_tool;
|
||||||
end;
|
end;
|
||||||
|
'X':
|
||||||
|
begin
|
||||||
|
if (target_info.system in system_linux) then
|
||||||
|
begin
|
||||||
|
if UnsetBool(More, j) then
|
||||||
|
exclude(init_settings.moduleswitches,cs_executable_stack)
|
||||||
|
else
|
||||||
|
include(init_settings.moduleswitches,cs_executable_stack)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
IllegalPara(opt);
|
||||||
|
end
|
||||||
else
|
else
|
||||||
IllegalPara(opt);
|
IllegalPara(opt);
|
||||||
end;
|
end;
|
||||||
|
@ -135,3 +135,5 @@ __data_start:
|
|||||||
2: .long 0
|
2: .long 0
|
||||||
.long 2,0,0
|
.long 2,0,0
|
||||||
3: .align 4
|
3: .align 4
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -92,3 +92,4 @@ __data_start:
|
|||||||
.long 2,0,0
|
.long 2,0,0
|
||||||
3: .align 4
|
3: .align 4
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -110,3 +110,5 @@ __data_start:
|
|||||||
2: .long 0
|
2: .long 0
|
||||||
.long 2,0,0
|
.long 2,0,0
|
||||||
3: .align 4
|
3: .align 4
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -181,3 +181,5 @@ __data_start:
|
|||||||
2: .long 0
|
2: .long 0
|
||||||
.long 2,0,0
|
.long 2,0,0
|
||||||
3: .align 4
|
3: .align 4
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -105,3 +105,5 @@ operatingsystem_parameters:
|
|||||||
.set operatingsystem_parameter_envp,operatingsystem_parameters+0
|
.set operatingsystem_parameter_envp,operatingsystem_parameters+0
|
||||||
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
||||||
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -122,3 +122,5 @@ operatingsystem_parameters:
|
|||||||
.set operatingsystem_parameter_envp,operatingsystem_parameters+0
|
.set operatingsystem_parameter_envp,operatingsystem_parameters+0
|
||||||
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
||||||
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -72,3 +72,4 @@ operatingsystem_parameters:
|
|||||||
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
||||||
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -87,3 +87,5 @@ operatingsystem_parameters:
|
|||||||
.set operatingsystem_parameter_envp,operatingsystem_parameters+0
|
.set operatingsystem_parameter_envp,operatingsystem_parameters+0
|
||||||
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
||||||
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -136,3 +136,4 @@ operatingsystem_parameters:
|
|||||||
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
||||||
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -109,3 +109,4 @@ operatingsystem_parameters:
|
|||||||
|
|
||||||
//.section .threadvar,"aw",@nobits
|
//.section .threadvar,"aw",@nobits
|
||||||
.comm ___fpc_threadvar_offset,4
|
.comm ___fpc_threadvar_offset,4
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -117,3 +117,4 @@ ___fpc_ret: /* return address to libc */
|
|||||||
.comm operatingsystem_parameter_argc, 4
|
.comm operatingsystem_parameter_argc, 4
|
||||||
.comm operatingsystem_parameter_argv, 4
|
.comm operatingsystem_parameter_argv, 4
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -67,3 +67,5 @@ data_start:
|
|||||||
.comm operatingsystem_parameter_envp,4
|
.comm operatingsystem_parameter_envp,4
|
||||||
.comm operatingsystem_parameter_argc,4
|
.comm operatingsystem_parameter_argc,4
|
||||||
.comm operatingsystem_parameter_argv,4
|
.comm operatingsystem_parameter_argv,4
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -433,3 +433,5 @@ ___fpc_ret: /* return address to libc */
|
|||||||
.comm operatingsystem_parameter_argc, 4
|
.comm operatingsystem_parameter_argc, 4
|
||||||
.comm operatingsystem_parameter_argv, 8
|
.comm operatingsystem_parameter_argv, 8
|
||||||
.comm operatingsystem_parameter_envp, 8
|
.comm operatingsystem_parameter_envp, 8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -439,3 +439,5 @@ ___fpc_ret: /* return address to libc */
|
|||||||
.comm operatingsystem_parameter_argc, 4
|
.comm operatingsystem_parameter_argc, 4
|
||||||
.comm operatingsystem_parameter_argv, 8
|
.comm operatingsystem_parameter_argv, 8
|
||||||
.comm operatingsystem_parameter_envp, 8
|
.comm operatingsystem_parameter_envp, 8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
@ -376,3 +376,4 @@ data_start:
|
|||||||
.comm operatingsystem_parameter_argv, 8
|
.comm operatingsystem_parameter_argv, 8
|
||||||
.comm operatingsystem_parameter_envp, 8
|
.comm operatingsystem_parameter_envp, 8
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
40
tests/webtbs/tw11563.pp
Normal file
40
tests/webtbs/tw11563.pp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{ %target=linux}
|
||||||
|
{ %result=216 }
|
||||||
|
|
||||||
|
program ExecStack;
|
||||||
|
procedure DoIt;
|
||||||
|
type
|
||||||
|
proc = procedure;
|
||||||
|
var
|
||||||
|
{$if defined(cpupowerpc) or defined(cpupowerpc64)}
|
||||||
|
ret: longint;
|
||||||
|
{$endif}
|
||||||
|
{$if defined(cpui386) or defined(cpux86_64)}
|
||||||
|
ret: Byte;
|
||||||
|
{$endif}
|
||||||
|
{$ifdef cpuarm}
|
||||||
|
'add arm code to test stack execution'
|
||||||
|
{$endif}
|
||||||
|
DoNothing: proc;
|
||||||
|
|
||||||
|
begin
|
||||||
|
{$if defined(cpupowerpc) or defined(cpupowerpc64)}
|
||||||
|
{ can't use proc(@ret) because linux/ppc64 always expects some kind of
|
||||||
|
trampoline
|
||||||
|
}
|
||||||
|
ret := ($4e shl 24) or ($80 shl 16) or ($00 shl 8) or $20;
|
||||||
|
asm
|
||||||
|
la r0, ret
|
||||||
|
mtctr r0
|
||||||
|
bctrl
|
||||||
|
end;
|
||||||
|
{$endif}
|
||||||
|
{$if defined(cpui386) or defined(cpux86_64)}
|
||||||
|
ret := $C3;
|
||||||
|
DoNothing := proc(@ret);
|
||||||
|
DoNothing;
|
||||||
|
{$endif}
|
||||||
|
end;
|
||||||
|
begin
|
||||||
|
DoIt;
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user