1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
Description: Adjust startup code for glibc 2.34
Based on the corresponding changes made in glibc:
https://sourceware.org/git/?p=glibc.git;a=commit;h=035c012e32c11e84d64905efaf55e74f704d3668
Bug: https://gitlab.com/freepascal.org/fpc/source/-/issues/39295
Author: Graham Inggs <ginggs@debian.org>
Last-Update: 2022-08-12
--- a/fpcsrc/rtl/linux/powerpc64/cprt0.as
+++ b/fpcsrc/rtl/linux/powerpc64/cprt0.as
@@ -351,8 +351,8 @@
start_addresses:
.quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/
.quad main_stub
- .quad __libc_csu_init
- .quad __libc_csu_fini
+ .quad 0
+ .quad 0
.size start_adresses, .-start_addresses
/*
--- a/fpcsrc/rtl/linux/powerpc64/gprt0.as
+++ b/fpcsrc/rtl/linux/powerpc64/gprt0.as
@@ -351,8 +351,8 @@
start_addresses:
.quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/
.quad main_stub
- .quad __libc_csu_init
- .quad __libc_csu_fini
+ .quad 0
+ .quad 0
.size start_adresses, .-start_addresses
/*
--- a/fpcsrc/rtl/linux/aarch64/cprt0.as
+++ b/fpcsrc/rtl/linux/aarch64/cprt0.as
@@ -41,10 +41,8 @@
init, fini, rtld_fini, stack_end) */
adrp x0,:got:PASCALMAIN
ldr x0,[x0,#:got_lo12:PASCALMAIN]
- adrp x3,:got:__libc_csu_init
- ldr x3,[x3,#:got_lo12:__libc_csu_init]
- adrp x4,:got:__libc_csu_fini
- ldr x4,[x4,#:got_lo12:__libc_csu_fini]
+ mov x3, #0
+ mov x4, #0
bl __libc_start_main
/* This should never happen */
--- a/fpcsrc/rtl/linux/i386/si_c21.inc
+++ b/fpcsrc/rtl/linux/i386/si_c21.inc
@@ -35,8 +35,6 @@
{$asmmode att}
-procedure __libc_csu_init; cdecl; external;
-procedure __libc_csu_fini; cdecl; external;
procedure libc_start_main; external name '__libc_start_main';
procedure libc_exit(code: longint); cdecl; external name 'exit';
@@ -93,8 +91,8 @@
pushl %esp { stack_end }
pushl %edx { function to be registered with
atexit(), passed by loader }
- pushl $__libc_csu_fini
- pushl $__libc_csu_init
+ pushl $0
+ pushl $0
pushl %esi { Push second argument: argv. }
pushl %ecx { Push first argument: argc. }
--- a/fpcsrc/rtl/linux/x86_64/cprt0.as
+++ b/fpcsrc/rtl/linux/x86_64/cprt0.as
@@ -61,9 +61,8 @@
which grow downwards). */
pushq %rsp
- /* Pass address of our own entry points to .fini and .init. */
- movq __libc_csu_init@GOTPCREL(%rip), %rcx
- movq __libc_csu_fini@GOTPCREL(%rip), %r8
+ xorl %r8d, %r8d
+ xorl %ecx, %ecx
movq main_stub@GOTPCREL(%rip), %rdi
--- a/fpcsrc/rtl/linux/arm/cprt0.as
+++ b/fpcsrc/rtl/linux/arm/cprt0.as
@@ -82,10 +82,10 @@
/* Set up the other arguments in registers */
ldr a1, =PASCALMAIN
- ldr a4, =_init
+ ldr a4, = #0
/* Push fini */
- str ip, [sp, #-4]!
+ str a4, [sp, #-4]!
/* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */
--- a/fpcsrc/rtl/linux/powerpc64/si_g.inc
+++ b/fpcsrc/rtl/linux/powerpc64/si_g.inc
@@ -657,9 +657,6 @@
Process start/halt
******************************************************************************}
-procedure __libc_csu_init; cdecl; external;
-procedure __libc_csu_fini; cdecl; external;
-
procedure __libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl; external;
type
@@ -745,8 +742,8 @@
end
= (sda_base: nil; {* was _SDA_BASE_ but not in 64-bit ABI }
main: @main_stub;
- libc_csu_init: @__libc_csu_init;
- libc_csu_fini: @__libc_csu_fini
+ libc_csu_init: pointer(0);
+ libc_csu_fini: pointer(0)
);
procedure call_libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl;
--- a/fpcsrc/rtl/linux/powerpc64/si_c.inc
+++ b/fpcsrc/rtl/linux/powerpc64/si_c.inc
@@ -657,9 +657,6 @@
Process start/halt
******************************************************************************}
-procedure __libc_csu_init; cdecl; external;
-procedure __libc_csu_fini; cdecl; external;
-
procedure __libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl; external;
var
@@ -724,8 +721,8 @@
end
= (sda_base: nil; {* was _SDA_BASE_ but not in 64-bit ABI }
main: @main_stub;
- libc_csu_init: @__libc_csu_init;
- libc_csu_fini: @__libc_csu_fini
+ libc_csu_init: pointer(0);
+ libc_csu_fini: pointer(0)
);
--- a/fpcsrc/rtl/linux/powerpc/cprt0.as
+++ b/fpcsrc/rtl/linux/powerpc/cprt0.as
@@ -35,8 +35,8 @@
start_addresses:
.long _SDA_BASE_
.long main_stub
- .long __libc_csu_init
- .long __libc_csu_fini
+ .long 0
+ .long 0
.size start_adresses, .-start_addresses
.section ".text"
--- a/fpcsrc/rtl/linux/mips/cprt0.as
+++ b/fpcsrc/rtl/linux/mips/cprt0.as
@@ -113,10 +113,9 @@
and $29, -2 * 4
subu $29, 32
- lw $7,%got(__libc_csu_init)($gp) /* init */
- lw $8,%got(__libc_csu_fini)($gp) /* fini */
+ move $7, $0
- sw $8, 16($29) /* fini */
+ sw $0, 16($29)
sw $2, 20($29) /* rtld_fini */
sw $29, 24($29) /* stack_end */
--- a/fpcsrc/rtl/linux/m68k/cprt0.as
+++ b/fpcsrc/rtl/linux/m68k/cprt0.as
@@ -41,8 +41,10 @@
pea (%sp) /* highest available stack address */
pea (%a1) /* termination function provided by kernel */
- pea __libc_csu_fini
- pea __libc_csu_init
+
+ clr.l -(%sp)
+ clr.l -(%sp)
+
pea (%a0) /* argv */
move.l %d0,-(%sp) /* argc */
pea PASCALMAIN
|