mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 18:23:41 +08:00
[ARM][BZ #17711] Fix extern protected data handling
Fixes elf/tst-protected1a and elf/tst-protected1b tests. Depends on a gcc patch that makes protected visibility data non-local: https://gcc.gnu.org/ml/gcc-patches/2015-07/msg01871.html and on a binutils patch so R_*_GLOB_DAT relocs are used for it: https://sourceware.org/ml/binutils/2015-07/msg00247.html
This commit is contained in:
parent
0910702c4d
commit
3bcea719dd
@ -4,6 +4,9 @@
|
||||
* sysdeps/aarch64/dl-sysdep.h (DL_EXTERN_PROTECTED_DATA): Define.
|
||||
* sysdeps/aarch64/dl-machine.h (elf_machine_type_class): Handle
|
||||
ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA.
|
||||
* sysdeps/arm/dl-sysdep.h (DL_EXTERN_PROTECTED_DATA): Define.
|
||||
* sysdeps/arm/dl-machine.h (elf_machine_type_class): Handle
|
||||
ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA.
|
||||
|
||||
2015-07-24 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||
|
||||
|
@ -224,18 +224,22 @@ _dl_start_user:\n\
|
||||
TLS variable, so undefined references should not be allowed to
|
||||
define the value.
|
||||
ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one
|
||||
of the main executable's symbols, as for a COPY reloc. */
|
||||
of the main executable's symbols, as for a COPY reloc.
|
||||
ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA iff TYPE describes relocation against
|
||||
protected data whose address may be external due to copy relocation. */
|
||||
#ifndef RTLD_BOOTSTRAP
|
||||
# define elf_machine_type_class(type) \
|
||||
((((type) == R_ARM_JUMP_SLOT || (type) == R_ARM_TLS_DTPMOD32 \
|
||||
|| (type) == R_ARM_TLS_DTPOFF32 || (type) == R_ARM_TLS_TPOFF32 \
|
||||
|| (type) == R_ARM_TLS_DESC) \
|
||||
* ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
| (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY) \
|
||||
| (((type) == R_ARM_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA))
|
||||
#else
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == R_ARM_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
| (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY) \
|
||||
| (((type) == R_ARM_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA))
|
||||
#endif
|
||||
|
||||
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||
|
@ -21,3 +21,5 @@
|
||||
/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
||||
might write into it after _dl_start returns. */
|
||||
#define DL_ARGV_NOT_RELRO 1
|
||||
|
||||
#define DL_EXTERN_PROTECTED_DATA
|
||||
|
Loading…
Reference in New Issue
Block a user