mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-29 16:21:07 +00:00
(RTLD_START): Adjust _dl_argv by _dl_skip_args. (ELF_MACHINE_FIXED_STACK): Removed.
This commit is contained in:
parent
623b05a4ee
commit
18ee9e6745
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user