mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-27 04:41:02 +08:00
(elf_machine_lazy_rel): Optimise a bit.
(RTLD_START): Keep in step with recent ld.so changes. (elf_machine_runtime_setup): Correct behaviour when profiling.
This commit is contained in:
parent
f3a306c88f
commit
344b4b4e23
@ -99,8 +99,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
|||||||
end in this function. */
|
end in this function. */
|
||||||
if (profile)
|
if (profile)
|
||||||
{
|
{
|
||||||
//got[2] = (Elf32_Addr) &_dl_runtime_profile;
|
got[2] = (Elf32_Addr) &_dl_runtime_profile;
|
||||||
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
|
||||||
/* Say that we really want profiling and the timers are started. */
|
/* Say that we really want profiling and the timers are started. */
|
||||||
_dl_profile_map = l;
|
_dl_profile_map = l;
|
||||||
}
|
}
|
||||||
@ -283,9 +282,8 @@ _dl_start_user:
|
|||||||
str r0, [sp]
|
str r0, [sp]
|
||||||
|
|
||||||
@ now we enter a _dl_init_next loop
|
@ now we enter a _dl_init_next loop
|
||||||
ldr r2, .L_DEF_SCOPE
|
ldr r4, .L_MAIN_SEARCHLIST
|
||||||
ldr r2, [sl, r2]
|
ldr r4, [sl, r4]
|
||||||
ldr r4, [r2, #8]
|
|
||||||
@ call _dl_init_next to get the address of an initalizer
|
@ call _dl_init_next to get the address of an initalizer
|
||||||
0: mov r0, r4
|
0: mov r0, r4
|
||||||
bl _dl_init_next(PLT)
|
bl _dl_init_next(PLT)
|
||||||
@ -311,14 +309,14 @@ _dl_start_user:
|
|||||||
.word _GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4 \n\
|
.word _GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4 \n\
|
||||||
.L_SKIP_ARGS: \n\
|
.L_SKIP_ARGS: \n\
|
||||||
.word _dl_skip_args(GOTOFF) \n\
|
.word _dl_skip_args(GOTOFF) \n\
|
||||||
.L_DEF_SCOPE: \n\
|
|
||||||
.word _dl_default_scope(GOT) \n\
|
|
||||||
.L_STARTUP_FLAG:
|
.L_STARTUP_FLAG:
|
||||||
.word _dl_starting_up(GOT)
|
.word _dl_starting_up(GOT)
|
||||||
.L_FINI_PROC:
|
.L_FINI_PROC:
|
||||||
.word _dl_fini(GOT)
|
.word _dl_fini(GOT)
|
||||||
.L_STACK_END:
|
.L_STACK_END:
|
||||||
.word __libc_stack_end(GOT)
|
.word __libc_stack_end(GOT)
|
||||||
|
.L_MAIN_SEARCHLIST
|
||||||
|
.word _dl_main_searchlist(GOT)
|
||||||
.previous\n\
|
.previous\n\
|
||||||
");
|
");
|
||||||
|
|
||||||
@ -452,15 +450,9 @@ static inline void
|
|||||||
elf_machine_lazy_rel (Elf32_Addr l_addr, const Elf32_Rel *reloc)
|
elf_machine_lazy_rel (Elf32_Addr l_addr, const Elf32_Rel *reloc)
|
||||||
{
|
{
|
||||||
Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
|
Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
|
||||||
switch (ELF32_R_TYPE (reloc->r_info))
|
/* Check for unexpected PLT reloc type. */
|
||||||
{
|
assert (ELF32_R_TYPE (reloc->r_info) == R_ARM_JUMP_SLOT);
|
||||||
case R_ARM_JUMP_SLOT:
|
|
||||||
*reloc_addr += l_addr;
|
*reloc_addr += l_addr;
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert (! "unexpected PLT reloc type");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* RESOLVE */
|
#endif /* RESOLVE */
|
||||||
|
Loading…
Reference in New Issue
Block a user