glibc/sysdeps/unix/sysv/linux/alpha/init-first.h

28 lines
745 B
C

/* The job of this fragment it to find argc and friends for INIT.
This is done in one of two ways: either in the stack context
of program start, or having dlopen pass them in. */
#define SYSDEP_CALL_INIT(NAME, INIT) asm("\
.weak _dl_starting_up
.globl " #NAME "
.ent " #NAME "
" #NAME ":
ldgp $29, 0($27)
.prologue 1
.set at
/* Are we a dynamic libc being loaded into a static program? */
lda $0, _dl_starting_up
beq $0, 1f
ldl $0, 0($0)
cmpeq $31, $0, $0
1: stl $0, __libc_multiple_libcs
/* If so, argc et al are in a0-a2 already. Otherwise, load them. */
bne $0, 2f
ldl $16, 0($30)
lda $17, 8($30)
s8addq $16, $17, $18
addq $18, 8, $18
2: br $31, " ASM_ALPHA_NG_SYMBOL_PREFIX #INIT "..ng
.set noat
.end " #NAME);