diff options
Diffstat (limited to 'libelf')
| -rw-r--r-- | libelf/ChangeLog | 9 | ||||
| -rw-r--r-- | libelf/elf.h | 2 | ||||
| -rw-r--r-- | libelf/elf32_updatenull.c | 12 |
3 files changed, 23 insertions, 0 deletions
diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 8f6d2d2d..a3f15883 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,12 @@ +2020-08-28 Mark Wielaard <mark@klomp.org> + + * elf.h: Update from glibc. + +2020-08-19 Mark Wielaard <mark@klomp.org> + + * elf32_updatenull.c (updatenull_wrlock): Fixup the sh_addralign + of an SHF_COMPRESSED section if necessary. + 2020-06-04 Mark Wielaard <mark@klomp.org> * elf.h: Update from glibc. diff --git a/libelf/elf.h b/libelf/elf.h index 197b557d..ff9f1dad 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -2875,6 +2875,8 @@ enum #define R_AARCH64_IRELATIVE 1032 /* STT_GNU_IFUNC relocation. */ /* AArch64 specific values for the Dyn d_tag field. */ +#define DT_AARCH64_BTI_PLT (DT_LOPROC + 1) +#define DT_AARCH64_PAC_PLT (DT_LOPROC + 3) #define DT_AARCH64_VARIANT_PCS (DT_LOPROC + 5) #define DT_AARCH64_NUM 6 diff --git a/libelf/elf32_updatenull.c b/libelf/elf32_updatenull.c index 5f3cdbf6..d0d4d1eb 100644 --- a/libelf/elf32_updatenull.c +++ b/libelf/elf32_updatenull.c @@ -267,6 +267,18 @@ __elfw2(LIBELFBITS,updatenull_wrlock) (Elf *elf, int *change_bop, size_t shnum) update_if_changed (shdr->sh_entsize, sh_entsize, scn->shdr_flags); + /* Likewise for the alignment of a compressed section. + For a SHF_COMPRESSED section set the correct + sh_addralign value, which must match the d_align of + the data (see __libelf_set_rawdata in elf_getdata.c). */ + if ((shdr->sh_flags & SHF_COMPRESSED) != 0) + { + sh_align = __libelf_type_align (ELFW(ELFCLASS,LIBELFBITS), + ELF_T_CHDR); + update_if_changed (shdr->sh_addralign, sh_align, + scn->shdr_flags); + } + if (scn->data_read == 0 && __libelf_set_rawdata_wrlock (scn) != 0) /* Something went wrong. The error value is already set. */ |
