diff options
Diffstat (limited to 'sysdeps')
58 files changed, 115 insertions, 182 deletions
diff --git a/sysdeps/aarch64/start.S b/sysdeps/aarch64/start.S index 3761cbd7ee..417da8802b 100644 --- a/sysdeps/aarch64/start.S +++ b/sysdeps/aarch64/start.S @@ -63,26 +63,16 @@ ENTRY(_start) # ifdef SHARED adrp x0, :got:main ldr PTR_REG (0), [x0, #:got_lo12:main] - - adrp x3, :got:__libc_csu_init - ldr PTR_REG (3), [x3, #:got_lo12:__libc_csu_init] - - adrp x4, :got:__libc_csu_fini - ldr PTR_REG (4), [x4, #:got_lo12:__libc_csu_fini] # else adrp x0, __wrap_main add x0, x0, :lo12:__wrap_main - adrp x3, __libc_csu_init - add x3, x3, :lo12:__libc_csu_init - adrp x4, __libc_csu_fini - add x4, x4, :lo12:__libc_csu_fini # endif #else /* Set up the other arguments in registers */ MOVL (0, main) - MOVL (3, __libc_csu_init) - MOVL (4, __libc_csu_fini) #endif + mov x3, #0 /* Used to be init. */ + mov x4, #0 /* Used to be fini. */ /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ diff --git a/sysdeps/alpha/start.S b/sysdeps/alpha/start.S index f3eb2029e1..65dcd4d392 100644 --- a/sysdeps/alpha/start.S +++ b/sysdeps/alpha/start.S @@ -55,9 +55,8 @@ _start: ldl a1, 16(sp) /* get argc */ lda a2, 24(sp) /* get argv */ - /* Load address of our own entry points to .fini and .init. */ - lda a3, __libc_csu_init - lda a4, __libc_csu_fini + mov $r31, a3 /* Used to be init. */ + mov $r31, a4 /* Used to be fini. */ /* Store address of the shared library termination function. */ mov v0, a5 diff --git a/sysdeps/arc/start.S b/sysdeps/arc/start.S index dbec87e6bb..5302a57cab 100644 --- a/sysdeps/arc/start.S +++ b/sysdeps/arc/start.S @@ -49,15 +49,14 @@ ENTRY (ENTRY_POINT) /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end). */ + mov_s r3, 0 /* Used to be init. */ + mov r4, 0 /* Used to be fini. */ + #ifdef SHARED ld r0, [pcl, @main@gotpc] - ld r3, [pcl, @__libc_csu_init@gotpc] - ld r4, [pcl, @__libc_csu_fini@gotpc] bl __libc_start_main@plt #else mov_s r0, main - mov_s r3, __libc_csu_init - mov r4, __libc_csu_fini bl __libc_start_main #endif diff --git a/sysdeps/arm/start.S b/sysdeps/arm/start.S index 30f69e1b07..9b56bc0cca 100644 --- a/sysdeps/arm/start.S +++ b/sysdeps/arm/start.S @@ -94,30 +94,20 @@ _start: adr a4, .L_GOT add sl, sl, a4 - ldr ip, .L_GOT+4 /* __libc_csu_fini */ - ldr ip, [sl, ip] + mov a4, #0 /* Used to be init. */ + push { a4 } /* Used to be fini. */ - push { ip } /* Push __libc_csu_fini */ - - ldr a4, .L_GOT+8 /* __libc_csu_init */ - ldr a4, [sl, a4] - - ldr a1, .L_GOT+12 /* main */ + ldr a1, .L_GOT+4 /* main */ ldr a1, [sl, a1] /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ /* Let the libc call main and exit with its return code. */ bl __libc_start_main(PLT) #else - /* Fetch address of __libc_csu_fini */ - ldr ip, =__libc_csu_fini - - /* Push __libc_csu_fini */ - push { ip } - /* Set up the other arguments in registers */ + mov a4, #0 /* Used to init. */ + push { a4 } /* Used to fini. */ ldr a1, =main - ldr a4, =__libc_csu_init /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ /* Let the libc call main and exit with its return code. */ @@ -131,8 +121,6 @@ _start: .align 2 .L_GOT: .word _GLOBAL_OFFSET_TABLE_ - .L_GOT - .word __libc_csu_fini(GOT) - .word __libc_csu_init(GOT) .word main(GOT) #endif diff --git a/sysdeps/csky/abiv2/start.S b/sysdeps/csky/abiv2/start.S index d65e37e61b..a565cfa87b 100644 --- a/sysdeps/csky/abiv2/start.S +++ b/sysdeps/csky/abiv2/start.S @@ -66,13 +66,9 @@ _start: .Lgetpc: lrw gb, .Lgetpc@GOTPC addu gb, t0 - lrw a3, __libc_csu_fini@GOT - ldr.w a3, (gb, a3 << 0) - stw a3, (sp, 0) - lrw a3, __libc_csu_init@GOT - addu a3, gb - ldw a3, (a3, 0) + movi a3, 0 /* Used to be init. */ + stw a3, (sp, 0) /* Used to be fini. */ lrw t0, main@GOT addu t0, gb @@ -85,14 +81,9 @@ _start: ldr.w t1, (gb, t1 << 0) jsr t1 #else - /* Fetch address of __libc_csu_fini. */ - lrw a0, __libc_csu_fini - /* Push __libc_csu_fini */ - stw a0, (sp, 0) - - /* Set up the other arguments in registers. */ + movi a3, 0 /* Used to be init. */ + stw a3, (sp, 0) /* Used to be fini. */ lrw a0, main - lrw a3, __libc_csu_init /* Let the libc call main and exit with its return code. */ jsri __libc_start_main diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 9720a4e446..ea3f7a69d0 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -93,6 +93,10 @@ typedef struct link_map *lookup_t; : (__glibc_unlikely ((ref)->st_shndx == SHN_ABS) ? 0 \ : LOOKUP_VALUE_ADDRESS (map, map_set)) + (ref)->st_value) +/* Type of a constructor function, in DT_INIT, DT_INIT_ARRAY, + DT_PREINIT_ARRAY. */ +typedef void (*dl_init_t) (int, char **, char **); + /* On some architectures a pointer to a function is not just a pointer to the actual code of the function but rather an architecture specific descriptor. */ @@ -101,7 +105,7 @@ typedef struct link_map *lookup_t; (void *) SYMBOL_ADDRESS (map, ref, false) # define DL_LOOKUP_ADDRESS(addr) ((ElfW(Addr)) (addr)) # define DL_CALL_DT_INIT(map, start, argc, argv, env) \ - ((init_t) (start)) (argc, argv, env) + ((dl_init_t) (start)) (argc, argv, env) # define DL_CALL_DT_FINI(map, start) ((fini_t) (start)) () #endif diff --git a/sysdeps/hppa/dl-lookupcfg.h b/sysdeps/hppa/dl-lookupcfg.h index 29d994bfc2..a9a927f26c 100644 --- a/sysdeps/hppa/dl-lookupcfg.h +++ b/sysdeps/hppa/dl-lookupcfg.h @@ -56,7 +56,7 @@ void attribute_hidden _dl_unmap (struct link_map *map); { \ ElfW(Addr) addr; \ DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - init_t init = (init_t) addr; \ + dl_init_t init = (dl_init_t) addr; \ init (argc, argv, env); \ } diff --git a/sysdeps/hppa/start.S b/sysdeps/hppa/start.S index 2fe73c9aae..4a1877f8e8 100644 --- a/sysdeps/hppa/start.S +++ b/sysdeps/hppa/start.S @@ -36,8 +36,6 @@ .import main, code .import $global$, data .import __libc_start_main, code - .import __libc_csu_fini, code - .import __libc_csu_init, code /* Have the linker create plabel words so we get PLABEL32 relocs and not 21/14. The use of 21/14 relocs is only @@ -52,10 +50,6 @@ .word P%main .Lp__libc_start_main: .word P%__libc_start_main -.Lp__libc_csu_fini: - .word P%__libc_csu_fini -.Lp__libc_csu_init: - .word P%__libc_csu_init .text .align 4 @@ -77,8 +71,8 @@ _start: 1. r26 - Application main 2. r25 - argc 3. r24 - argv - 4. r23 - __libc_csu_init - 5. sp-52 - __libc_csu_fini + 4. r23 - init (unused) + 5. sp-52 - fini (unused) 6. sp-56 - rtld_fini 7. sp-60 - stackend */ @@ -108,14 +102,6 @@ _start: addil LT'.Lpmain, %r19 ldw RT'.Lpmain(%r1), %r26 ldw 0(%r26),%r26 - /* void (*init) (void) (4th argument) */ - addil LT'.Lp__libc_csu_init, %r19 - ldw RT'.Lp__libc_csu_init(%r1), %r23 - ldw 0(%r23), %r23 - /* void (*fini) (void) (5th argument) */ - addil LT'.Lp__libc_csu_fini, %r19 - ldw RT'.Lp__libc_csu_fini(%r1), %r22 - ldw 0(%r22), %r22 #else /* Load $global$ address into %dp */ ldil L%$global$, %dp @@ -124,13 +110,9 @@ _start: /* load main (1st argument) */ ldil LR'.Lpmain, %r26 ldw RR'.Lpmain(%r26), %r26 - /* void (*init) (void) (4th argument) */ - ldil LR'.Lp__libc_csu_init, %r23 - ldw RR'.Lp__libc_csu_init(%r23), %r23 - /* void (*fini) (void) (5th argument) */ - ldil LR'.Lp__libc_csu_fini, %r22 - ldw RR'.Lp__libc_csu_fini(%r22), %r22 #endif + ldi 0,%r23 /* Used to be init. */ + ldi 0,%r22 /* Used to be fini. */ /* Store 5th argument */ stw %r22, -52(%sp) /* void *stack_end (7th argument) */ diff --git a/sysdeps/i386/start.S b/sysdeps/i386/start.S index 24c806cfec..5296b27e65 100644 --- a/sysdeps/i386/start.S +++ b/sysdeps/i386/start.S @@ -87,11 +87,9 @@ ENTRY (_start) call 1f addl $_GLOBAL_OFFSET_TABLE_, %ebx - /* Push address of our own entry points to .fini and .init. */ - leal __libc_csu_fini@GOTOFF(%ebx), %eax - pushl %eax - leal __libc_csu_init@GOTOFF(%ebx), %eax - pushl %eax + /* This used to be the addresses of .fini and .init. */ + pushl $0 + pushl $0 pushl %ecx /* Push second argument: argv. */ pushl %esi /* Push first argument: argc. */ @@ -112,9 +110,9 @@ ENTRY (_start) But let the libc call main. */ call __libc_start_main@PLT #else - /* Push address of our own entry points to .fini and .init. */ - pushl $__libc_csu_fini - pushl $__libc_csu_init + /* This used to be the addresses of .fini and .init. */ + pushl $0 + pushl $0 pushl %ecx /* Push second argument: argv. */ pushl %esi /* Push first argument: argc. */ diff --git a/sysdeps/ia64/dl-lookupcfg.h b/sysdeps/ia64/dl-lookupcfg.h index 209d926bad..58ca32424b 100644 --- a/sysdeps/ia64/dl-lookupcfg.h +++ b/sysdeps/ia64/dl-lookupcfg.h @@ -50,7 +50,7 @@ extern void attribute_hidden _dl_unmap (struct link_map *map); { \ ElfW(Addr) addr; \ DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - init_t init = (init_t) addr; \ + dl_init_t init = (dl_init_t) addr; \ init (argc, argv, env); \ } diff --git a/sysdeps/ia64/start.S b/sysdeps/ia64/start.S index 0018acc821..b28f8cb429 100644 --- a/sysdeps/ia64/start.S +++ b/sysdeps/ia64/start.S @@ -82,20 +82,15 @@ _start: { addl r11 = @ltoff(__libc_ia64_register_backing_store_base), gp addl out0 = @ltoff(@fptr(main)), gp - addl out3 = @ltoff(@fptr(__libc_csu_init)), gp + mov out3 = r0 /* Used to be init. */ ;; } { .mmi ld8 r3 = [r11] /* pointer to __libc_ia64_register_backing_store_base */ ld8 out0 = [out0] /* pointer to `main' function descriptor */ - addl out4 = @ltoff(@fptr(__libc_csu_fini)), gp + mov out4 = r0 /* Used to be fini. */ ;; } - { .mmi - ld8 out3 = [out3] /* pointer to `init' function descriptor */ - ld8 out4 = [out4] /* pointer to `fini' function descriptor */ - nop 0 - } .body { .mib st8 [r3] = r10 diff --git a/sysdeps/m68k/start.S b/sysdeps/m68k/start.S index c36b34f8d9..98da4db9f3 100644 --- a/sysdeps/m68k/start.S +++ b/sysdeps/m68k/start.S @@ -76,15 +76,14 @@ _start: pea (%a1) /* Push address of the shared library termination function. */ + /* These used to be addresses of the .fini and .init entry points. */ + clr.l -(%sp) + clr.l -(%sp) + #ifdef PIC /* Load PIC register. */ LOAD_GOT (%a5) - /* Push the address of our own entry points to `.fini' and - `.init'. */ - move.l __libc_csu_fini@GOT(%a5), -(%sp) - move.l __libc_csu_init@GOT(%a5), -(%sp) - pea (%a0) /* Push second argument: argv. */ move.l %d0, -(%sp) /* Push first argument: argc. */ @@ -94,10 +93,6 @@ _start: let the libc call main. */ jbsr __libc_start_main@PLTPC #else - /* Push the address of our own entry points to `.fini' and - `.init'. */ - pea __libc_csu_fini - pea __libc_csu_init pea (%a0) /* Push second argument: argv. */ move.l %d0, -(%sp) /* Push first argument: argc. */ diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index 509e9b7cb0..e10a286d2e 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -2203,6 +2203,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/microblaze/start.S b/sysdeps/microblaze/start.S index dcb202a63b..6589bd4dc7 100644 --- a/sysdeps/microblaze/start.S +++ b/sysdeps/microblaze/start.S @@ -63,14 +63,14 @@ _start: mfs r20,rpc addik r20,r20,_GLOBAL_OFFSET_TABLE_+8 lwi r5,r20,main@GOT - lwi r8,r20,__libc_csu_init@GOT - lwi r9,r20,__libc_csu_fini@GOT + addk r8,r0,r0 /* Used to be init. */ + addk r9,r0,r0 /* Used to be fini. */ brid __libc_start_main@PLT addk r10,r0,r0 #else addik r5,r0,main - addik r8,r0,__libc_csu_init - addik r9,r0,__libc_csu_fini + addk r8,r0,r0 /* Used to be init. */ + addk r9,r0,r0 /* Used to be fini. */ brid __libc_start_main addk r10,r0,r0 #endif diff --git a/sysdeps/mips/start.S b/sysdeps/mips/start.S index 28e2ed17ad..4ec42a2a7f 100644 --- a/sysdeps/mips/start.S +++ b/sysdeps/mips/start.S @@ -96,13 +96,13 @@ ENTRY_POINT: # if _MIPS_SIM == _ABIO32 PTR_SUBIU $29, 32 # endif - PTR_LA $7, __libc_csu_init /* init */ - PTR_LA $8, __libc_csu_fini + move $7, $0 /* Used to be init. */ # if _MIPS_SIM == _ABIO32 - PTR_S $8, 16($29) /* fini */ + PTR_S $0, 16($29) /* Used to be fini. */ PTR_S $2, 20($29) /* rtld_fini */ PTR_S $29, 24($29) /* stack_end */ # else + move $8, $0 /* Used to be fini. */ move $9, $2 /* rtld_fini */ move $10, $29 /* stack_end */ # endif @@ -143,19 +143,17 @@ ENTRY_POINT: /* Lay out last arguments, and call __libc_start_main(). */ # ifdef __PIC__ sw $7, 24($sp) /* stack_end */ - lw $4, %got(__libc_csu_fini)($3) - lw $7, %got(__libc_csu_init)($3) /* init */ - sw $4, 16($sp) /* fini */ + move $4, $0 /* Used to be ini. */ + sw $0, 16($sp) /* Used to be fini. */ lw $4, %got(main)($3) /* main */ lw $3, %call16(__libc_start_main)($3) sw $2, 20($sp) /* rtld_fini */ move $25, $3 jalr $3 # else - lw $4, 1f sw $7, 24($sp) /* stack_end */ - lw $7, 2f /* init */ - sw $4, 16($sp) /* fini */ + move $7, $0 /* Used to be init. */ + sw $0, 16($sp) /* Used to be fini. */ lw $4, 3f /* main */ sw $2, 20($sp) /* rtld_fini */ /* Load and call __libc_start_main(). */ @@ -165,8 +163,6 @@ ENTRY_POINT: hlt: b hlt /* Crash if somehow it does return. */ # ifndef __PIC__ .align 2 -1: .word __libc_csu_fini -2: .word __libc_csu_init 3: .word main 4: .word __libc_start_main # endif diff --git a/sysdeps/nios2/start.S b/sysdeps/nios2/start.S index 0a6c587de3..7c9696977f 100644 --- a/sysdeps/nios2/start.S +++ b/sysdeps/nios2/start.S @@ -92,18 +92,11 @@ _start: addi r2, r2, %lo(_gp_got - 1b) add r22, r22, r2 - /* Push fini */ - movhi r8, %call_hiadj(__libc_csu_fini) - addi r8, r8, %call_lo(__libc_csu_fini) - add r8, r8, r22 - ldw r8, 0(r8) - stw r8, 0(sp) - - /* r7 == init */ - movhi r7, %call_hiadj(__libc_csu_init) - addi r7, r7, %call_lo(__libc_csu_init) - add r7, r7, r22 - ldw r7, 0(r7) + /* Used to be fini. */ + stw zero, 0(sp) + + /* Used to be init. */ + mov r7, zero /* r6 == argv */ addi r6, sp, 16 diff --git a/sysdeps/powerpc/powerpc32/start.S b/sysdeps/powerpc/powerpc32/start.S index a721a18775..39ce1a18ff 100644 --- a/sysdeps/powerpc/powerpc32/start.S +++ b/sysdeps/powerpc/powerpc32/start.S @@ -52,8 +52,8 @@ L(start_addresses): .long _SDA_BASE_ .long main - .long __libc_csu_init - .long __libc_csu_fini + .long 0 /* Used to be init. */ + .long 0 /* Used to be fini. */ ASM_SIZE_DIRECTIVE(L(start_addresses)) .section ".text" diff --git a/sysdeps/powerpc/powerpc64/start.S b/sysdeps/powerpc/powerpc64/start.S index 612c846632..71c0c67926 100644 --- a/sysdeps/powerpc/powerpc64/start.S +++ b/sysdeps/powerpc/powerpc64/start.S @@ -53,8 +53,8 @@ L(start_addresses): .quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/ /* function descriptors so don't need JUMPTARGET */ .quad main - .quad __libc_csu_init - .quad __libc_csu_fini + .quad 0 /* Used to be init. */ + .quad 0 /* Used to be fini. */ ASM_SIZE_DIRECTIVE(L(start_addresses)) diff --git a/sysdeps/riscv/start.S b/sysdeps/riscv/start.S index 9c94035015..806f6aacd6 100644 --- a/sysdeps/riscv/start.S +++ b/sysdeps/riscv/start.S @@ -54,8 +54,8 @@ ENTRY (ENTRY_POINT) REG_L a1, 0(sp) /* argc. */ addi a2, sp, SZREG /* argv. */ andi sp, sp, ALMASK /* Align stack. */ - lla a3, __libc_csu_init - lla a4, __libc_csu_fini + li a3, 0 /* Used to be init. */ + li a4, 0 /* Used to be fini. */ mv a6, sp /* stack_end. */ call __libc_start_main@plt diff --git a/sysdeps/s390/s390-32/start.S b/sysdeps/s390/s390-32/start.S index aba90739c1..b6cfa4caf3 100644 --- a/sysdeps/s390/s390-32/start.S +++ b/sysdeps/s390/s390-32/start.S @@ -175,18 +175,16 @@ _start: */ stm %r14,%r15,96(%r15) # store rtld_fini/stack_end to parameter area la %r7,96(%r15) - l %r6,.L2-.Llit(%r13) # load pointer to __libc_csu_fini - l %r5,.L1-.Llit(%r13) # load pointer to __libc_csu_init l %r2,.L3-.Llit(%r13) # load pointer to main l %r1,.L4-.Llit(%r13) # load pointer to __libc_start_main #ifdef PIC l %r12,.L5-.Llit(%r13) # load .got pointer - la %r6,0(%r13,%r6) - la %r5,0(%r13,%r5) la %r12,0(%r13,%r12) l %r2,0(%r12,%r2) la %r1,0(%r13,%r1) #endif + lhi %r6, 0 # Used to fini. + lhi %r5, 0 # Used to init. /* ok, now branch to the libc main routine */ basr %r14,%r1 @@ -197,13 +195,9 @@ _start: cfi_endproc .Llit: #ifndef PIC -.L1: .long __libc_csu_init -.L2: .long __libc_csu_fini .L3: .long main .L4: .long __libc_start_main #else -.L1: .long __libc_csu_init-.Llit -.L2: .long __libc_csu_fini-.Llit .L3: .long main@GOT .L4: .long __libc_start_main@plt-.Llit .L5: .long _GLOBAL_OFFSET_TABLE_-.Llit diff --git a/sysdeps/s390/s390-64/start.S b/sysdeps/s390/s390-64/start.S index 0d9d30916d..4e6526308a 100644 --- a/sysdeps/s390/s390-64/start.S +++ b/sysdeps/s390/s390-64/start.S @@ -80,8 +80,8 @@ _start: */ stmg %r14,%r15,160(%r15) # store rtld_fini/stack_end to parameter area la %r7,160(%r15) - larl %r6,__libc_csu_fini # load pointer to __libc_csu_fini - larl %r5,__libc_csu_init # load pointer to __libc_csu_init + lghi %r6,0 # Used to be fini. + lghi %r5,0 # Used to be init. /* Ok, now branch to the libc main routine. */ #ifdef PIC diff --git a/sysdeps/sh/start.S b/sysdeps/sh/start.S index ab29f194f7..606ee59222 100644 --- a/sysdeps/sh/start.S +++ b/sysdeps/sh/start.S @@ -70,12 +70,11 @@ _start: /* Push the last arguments to main() onto the stack */ mov.l r4,@-r15 - mov.l L_fini,r0 - mov.l r0,@-r15 + mov.l r14,@-r15 /* Used to be fini. */ /* Set up the other arguments for main() that go in registers */ mov.l L_main,r4 - mov.l L_init,r7 + mov #0,r7 /* Used to be init. */ /* __libc_start_main (main, argc, argv, init, fini, rtld_fini) */ @@ -90,10 +89,6 @@ _start: .align 2 L_main: .long main -L_init: - .long __libc_csu_init -L_fini: - .long __libc_csu_fini L_libc_start_main: .long __libc_start_main L_abort: diff --git a/sysdeps/sparc/sparc32/start.S b/sysdeps/sparc/sparc32/start.S index 45ca77da3e..00bf898fb9 100644 --- a/sysdeps/sparc/sparc32/start.S +++ b/sysdeps/sparc/sparc32/start.S @@ -59,22 +59,14 @@ _start: /* Load the addresses of the user entry points. */ #ifndef PIC sethi %hi(main), %o0 - sethi %hi(__libc_csu_init), %o3 - sethi %hi(__libc_csu_fini), %o4 or %o0, %lo(main), %o0 - or %o3, %lo(__libc_csu_init), %o3 - or %o4, %lo(__libc_csu_fini), %o4 #else sethi %gdop_hix22(main), %o0 - sethi %gdop_hix22(__libc_csu_init), %o3 - sethi %gdop_hix22(__libc_csu_fini), %o4 xor %o0, %gdop_lox10(main), %o0 - xor %o3, %gdop_lox10(__libc_csu_init), %o3 - xor %o4, %gdop_lox10(__libc_csu_fini), %o4 ld [%l7 + %o0], %o0, %gdop(main) - ld [%l7 + %o3], %o3, %gdop(__libc_csu_init) - ld [%l7 + %o4], %o4, %gdop(__libc_csu_fini) #endif + mov 0, %o3 /* Used to be init. */ + mov 0, %o4 /* Used to be fini. */ /* When starting a binary via the dynamic linker, %g1 contains the address of the shared library termination function, which will be diff --git a/sysdeps/sparc/sparc64/start.S b/sysdeps/sparc/sparc64/start.S index 210fbaff90..8520717eba 100644 --- a/sysdeps/sparc/sparc64/start.S +++ b/sysdeps/sparc/sparc64/start.S @@ -60,22 +60,14 @@ _start: /* Load the addresses of the user entry points. */ #ifndef PIC sethi %hi(main), %o0 - sethi %hi(__libc_csu_init), %o3 - sethi %hi(__libc_csu_fini), %o4 or %o0, %lo(main), %o0 - or %o3, %lo(__libc_csu_init), %o3 - or %o4, %lo(__libc_csu_fini), %o4 #else sethi %gdop_hix22(main), %o0 - sethi %gdop_hix22(__libc_csu_init), %o3 - sethi %gdop_hix22(__libc_csu_fini), %o4 xor %o0, %gdop_lox10(main), %o0 - xor %o3, %gdop_lox10(__libc_csu_init), %o3 - xor %o4, %gdop_lox10(__libc_csu_fini), %o4 ldx [%l7 + %o0], %o0, %gdop(main) - ldx [%l7 + %o3], %o3, %gdop(__libc_csu_init) - ldx [%l7 + %o4], %o4, %gdop(__libc_csu_fini) #endif + mov 0, %o3 /* Used to be init. */ + mov 0, %o4 /* Used to be fini. */ /* When starting a binary via the dynamic linker, %g1 contains the address of the shared library termination function, which will be diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index 4cc1c6a591..bac795262d 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2171,3 +2171,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 26ad9845e4..897f70db22 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -2253,6 +2253,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist index bb9dfd4daf..604d259ad6 100644 --- a/sysdeps/unix/sysv/linux/arc/libc.abilist +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist @@ -1931,3 +1931,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index 3b0a47e967..094236f713 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -155,6 +155,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index 9ab3924888..2bb4d31e81 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -152,6 +152,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist index 14a84dac8f..d4291fecfb 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2115,3 +2115,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 5c8502f3d3..1fd2a862f6 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2074,6 +2074,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index ddc5837059..943331f01e 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2241,6 +2241,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist index e3b345b803..f530151bde 100644 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -2106,6 +2106,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index 25f2d1c08f..6e76b6dcaa 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -156,6 +156,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0x98 GLIBC_2.4 _IO_2_1_stdin_ D 0x98 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index c4891479d3..7541b8289f 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2186,6 +2186,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index 143b0163b4..6cf1936c42 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2166,3 +2166,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index 13d374a031..98730ebcda 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2163,3 +2163,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index b2295f1937..92fa6cbc73 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2157,6 +2157,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index 4c786070d0..265a49e74e 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2155,6 +2155,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index aa9c6a4dca..cfa5e1111b 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2163,6 +2163,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index 5939588ad5..8c03ac52cd 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -2157,6 +2157,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index 92556c4237..17f5609e06 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2204,3 +2204,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/powerpc/libc-start.c b/sysdeps/unix/sysv/linux/powerpc/libc-start.c index 66f5effe8a..4d681dad06 100644 --- a/sysdeps/unix/sysv/linux/powerpc/libc-start.c +++ b/sysdeps/unix/sysv/linux/powerpc/libc-start.c @@ -41,12 +41,12 @@ struct startup_info }; int -__libc_start_main (int argc, char **argv, - char **ev, - ElfW (auxv_t) * auxvec, - void (*rtld_fini) (void), - struct startup_info *stinfo, - char **stack_on_entry) +__libc_start_main_impl (int argc, char **argv, + char **ev, + ElfW (auxv_t) * auxvec, + void (*rtld_fini) (void), + struct startup_info *stinfo, + char **stack_on_entry) { /* the PPC SVR4 ABI says that the top thing on the stack will be a NULL pointer, so if not we assume that we're being called @@ -99,3 +99,4 @@ __libc_start_main (int argc, char **argv, stinfo->init, stinfo->fini, rtld_fini, stack_on_entry); } +DEFINE_LIBC_START_MAIN_VERSION diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index 26c93dff05..76a16e2a6d 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -2213,6 +2213,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index f04b167788..697f072fd4 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -2246,6 +2246,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index c2ca00709e..2647bb51f1 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@ -2076,6 +2076,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index 0ea50dc851..036b1c8345 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@ -2366,3 +2366,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist index 0263e284d4..ff3225e16f 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist @@ -1933,3 +1933,4 @@ GLIBC_2.33 wprintf F GLIBC_2.33 write F GLIBC_2.33 writev F GLIBC_2.33 wscanf F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index 1626c5351f..fb5ad9909f 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -2133,3 +2133,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index a66426eb4d..cead75acc5 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2211,6 +2211,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index ab351873ae..31366dd7e6 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -2112,6 +2112,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index 22ceaa3d87..a3a8be8910 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2081,6 +2081,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index d36f228192..8f505c5045 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2078,6 +2078,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index 59b4313280..53ef6304f1 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2202,6 +2202,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index 266dcdfa08..eba0cb156d 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -2129,6 +2129,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index 2744bba4af..17ce5dfd58 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -2088,6 +2088,7 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index ce2f4fb72b..17a1c83903 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2185,3 +2185,4 @@ GLIBC_2.33 mknod F GLIBC_2.33 mknodat F GLIBC_2.33 stat F GLIBC_2.33 stat64 F +GLIBC_2.34 __libc_start_main F diff --git a/sysdeps/x86_64/start.S b/sysdeps/x86_64/start.S index 30fc9007c9..1b3e36826b 100644 --- a/sysdeps/x86_64/start.S +++ b/sysdeps/x86_64/start.S @@ -96,17 +96,13 @@ ENTRY (_start) which grow downwards). */ pushq %rsp -#ifdef PIC - /* Pass address of our own entry points to .fini and .init. */ - mov __libc_csu_fini@GOTPCREL(%rip), %R8_LP - mov __libc_csu_init@GOTPCREL(%rip), %RCX_LP + /* These used to be the addresses of .fini and .init. */ + xorl %r8d, %r8d + xorl %ecx, %ecx +#ifdef PIC mov main@GOTPCREL(%rip), %RDI_LP #else - /* Pass address of our own entry points to .fini and .init. */ - mov $__libc_csu_fini, %R8_LP - mov $__libc_csu_init, %RCX_LP - mov $main, %RDI_LP #endif |