mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
ld.so: Initialize bootstrap_map.l_ld_readonly [BZ #28340]
1. Define DL_RO_DYN_SECTION to initalize bootstrap_map.l_ld_readonly
before calling elf_get_dynamic_info to get dynamic info in bootstrap_map,
2. Define a single
static inline bool
dl_relocate_ld (const struct link_map *l)
{
/* Don't relocate dynamic section if it is readonly */
return !(l->l_ld_readonly || DL_RO_DYN_SECTION);
}
This updates BZ #28340 fix.
(cherry picked from commit 2ec99d8c42
)
This commit is contained in:
parent
f42373f911
commit
5f36e5c701
@ -548,6 +548,7 @@ _dl_start (void *arg)
|
||||
|
||||
/* Read our own dynamic section and fill in the info array. */
|
||||
bootstrap_map.l_ld = (void *) bootstrap_map.l_addr + elf_machine_dynamic ();
|
||||
bootstrap_map.l_ld_readonly = DL_RO_DYN_SECTION;
|
||||
elf_get_dynamic_info (&bootstrap_map);
|
||||
|
||||
#if NO_TLS_OFFSET != 0
|
||||
|
@ -19,14 +19,7 @@
|
||||
#ifndef _DL_RELOCATE_LD_H
|
||||
#define _DL_RELOCATE_LD_H
|
||||
|
||||
/* Return true if dynamic section in the shared library L should be
|
||||
relocated. */
|
||||
|
||||
static inline bool
|
||||
dl_relocate_ld (const struct link_map *l)
|
||||
{
|
||||
/* Don't relocate dynamic section if it is readonly */
|
||||
return !l->l_ld_readonly;
|
||||
}
|
||||
/* The dynamic section is writable. */
|
||||
#define DL_RO_DYN_SECTION 0
|
||||
|
||||
#endif /* _DL_RELOCATE_LD_H */
|
||||
|
@ -69,6 +69,16 @@ __BEGIN_DECLS
|
||||
`ElfW(TYPE)' is used in place of `Elf32_TYPE' or `Elf64_TYPE'. */
|
||||
#define ELFW(type) _ElfW (ELF, __ELF_NATIVE_CLASS, type)
|
||||
|
||||
/* Return true if dynamic section in the shared library L should be
|
||||
relocated. */
|
||||
|
||||
static inline bool
|
||||
dl_relocate_ld (const struct link_map *l)
|
||||
{
|
||||
/* Don't relocate dynamic section if it is readonly */
|
||||
return !(l->l_ld_readonly || DL_RO_DYN_SECTION);
|
||||
}
|
||||
|
||||
/* All references to the value of l_info[DT_PLTGOT],
|
||||
l_info[DT_STRTAB], l_info[DT_SYMTAB], l_info[DT_RELA],
|
||||
l_info[DT_REL], l_info[DT_JMPREL], and l_info[VERSYMIDX (DT_VERSYM)]
|
||||
|
@ -19,14 +19,7 @@
|
||||
#ifndef _DL_RELOCATE_LD_H
|
||||
#define _DL_RELOCATE_LD_H
|
||||
|
||||
/* Return true if dynamic section in the shared library L should be
|
||||
relocated. */
|
||||
|
||||
static inline bool
|
||||
dl_relocate_ld (const struct link_map *l)
|
||||
{
|
||||
/* Never relocate dynamic section. */
|
||||
return false;
|
||||
}
|
||||
/* The dynamic section is readonly. */
|
||||
#define DL_RO_DYN_SECTION 1
|
||||
|
||||
#endif /* _DL_RELOCATE_LD_H */
|
||||
|
@ -19,14 +19,7 @@
|
||||
#ifndef _DL_RELOCATE_LD_H
|
||||
#define _DL_RELOCATE_LD_H
|
||||
|
||||
/* Return true if dynamic section in the shared library L should be
|
||||
relocated. */
|
||||
|
||||
static inline bool
|
||||
dl_relocate_ld (const struct link_map *l)
|
||||
{
|
||||
/* Never relocate dynamic section for ABI compatibility. */
|
||||
return false;
|
||||
}
|
||||
/* The dynamic section is readonly for ABI compatibility. */
|
||||
#define DL_RO_DYN_SECTION 1
|
||||
|
||||
#endif /* _DL_RELOCATE_LD_H */
|
||||
|
Loading…
Reference in New Issue
Block a user