(RTLD_START): Adjust _dl_argv by _dl_skip_args. (ELF_MACHINE_FIXED_STACK): Removed.

This commit is contained in:
Ulrich Drepper 2000-09-29 15:07:13 +00:00
parent 623b05a4ee
commit 18ee9e6745

View File

@ -310,14 +310,24 @@ _dl_start_user:
The stack pointer has to be 16 byte aligned. We cannot simply The stack pointer has to be 16 byte aligned. We cannot simply
addjust the stack pointer. We have to move the whole argv and addjust the stack pointer. We have to move the whole argv and
envp. H.J. */ envp and adjust _dl_argv by _dl_skip_args. H.J. */
} }
{ .mmi { .mib
ld8 out1 = [r10] /* is argc actually stored as a long ld8 out1 = [r10] /* is argc actually stored as a long
or as an int? */ or as an int? */
addl r2 = @ltoff(_dl_argv), gp
;; ;;
}
{ .mmi
ld8 r2 = [r2] /* Get the address of _dl_argv. */
sub out1 = out1, r3 /* Get the new argc. */ sub out1 = out1, r3 /* Get the new argc. */
shladd r15 = r3, 3, r11 /* The address of the argv we move */ shladd r3 = r3, 3, r0
;;
}
{
.mib
ld8 r17 = [r2] /* Get _dl_argv. */
add r15 = r11, r3 /* The address of the argv we move */
;; ;;
} }
/* ??? Could probably merge these two loops into 3 bundles. /* ??? Could probably merge these two loops into 3 bundles.
@ -333,8 +343,9 @@ _dl_start_user:
(p6) br.cond.dptk.few 1b (p6) br.cond.dptk.few 1b
;; ;;
} }
{ .mib { .mmi
mov out3 = r11 mov out3 = r11
sub r17 = r17, r3 /* Substract _dl_skip_args. */
addl out0 = @ltoff(_dl_loaded), gp addl out0 = @ltoff(_dl_loaded), gp
} }
1: /* Copy env. */ 1: /* Copy env. */
@ -353,8 +364,9 @@ _dl_start_user:
ld8 out0 = [out0] ld8 out0 = [out0]
;; ;;
} }
{ .mfb { .mmb
ld8 out0 = [out0] /* get the linkmap */ ld8 out0 = [out0] /* get the linkmap */
st8 [r2] = r17 /* Load the new _dl_argv. */
br.call.sptk.many b0 = _dl_init# br.call.sptk.many b0 = _dl_init#
;; ;;
} }
@ -402,10 +414,6 @@ _dl_start_user:
/* According to the IA-64 specific documentation, Rela is always used. */ /* According to the IA-64 specific documentation, Rela is always used. */
#define ELF_MACHINE_NO_REL 1 #define ELF_MACHINE_NO_REL 1
/* Since ia64's stack has to be 16byte aligned, we cannot arbitrarily
move the stack pointer. */
#define ELF_MACHINE_FIXED_STACK 1
/* Return the address of the entry point. */ /* Return the address of the entry point. */
extern ElfW(Addr) _dl_start_address (const struct link_map *map, extern ElfW(Addr) _dl_start_address (const struct link_map *map,
ElfW(Addr) start); ElfW(Addr) start);