diff options
Diffstat (limited to 'elf/dynamic-link.h')
-rw-r--r-- | elf/dynamic-link.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/elf/dynamic-link.h b/elf/dynamic-link.h index d322c1231f..59a6001069 100644 --- a/elf/dynamic-link.h +++ b/elf/dynamic-link.h @@ -93,6 +93,19 @@ elf_get_dynamic_info (ElfW(Dyn) *dyn, ElfW(Addr) l_addr, info[DT_JMPREL]->d_un.d_ptr += l_addr; if (info[VERSYMIDX (DT_VERSYM)] != NULL) info[VERSYMIDX (DT_VERSYM)]->d_un.d_ptr += l_addr; + if (info[DT_FLAGS] != NULL) + { + /* Flags are used. Translate to the old form where available. + Since these l_info entries are only tested for NULL pointers it + is ok if they point to the DT_FLAGS entry. */ + ElfW(Word) flags = info[DT_FLAGS]->d_un.d_val; + if (flags & DF_SYMBOLIC) + info[DT_SYMBOLIC] = info[DT_FLAGS]; + if (flags & DF_TEXTREL) + info[DT_TEXTREL] = info[DT_FLAGS]; + if (flags & DF_BIND_NOW) + info[DT_BIND_NOW] = info[DT_FLAGS]; + } } #ifdef RESOLVE |