aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf32-arm.c
diff options
context:
space:
mode:
authorWill Newton <will.newton@linaro.org>2015-02-03 12:51:14 +0000
committerWill Newton <will.newton@linaro.org>2015-02-03 14:05:06 +0000
commit3a63561744873b54e13c45923fba4aaca7a2fec7 (patch)
tree67e115be1d5e04e4402c8b0d4b3257d8deb5e491 /bfd/elf32-arm.c
parent8e02d7f52092fe95f29d006e1df45b110490adc1 (diff)
downloadgdb-3a63561744873b54e13c45923fba4aaca7a2fec7.zip
gdb-3a63561744873b54e13c45923fba4aaca7a2fec7.tar.gz
gdb-3a63561744873b54e13c45923fba4aaca7a2fec7.tar.bz2
bfd/elf32-arm.c: Improve comment in elf32_arm_finish_dynamic_symbol
Improve the comment discussing why we clear st_value for some symbols. bfd/ChangeLog: 2015-02-03 Will Newton <will.newton@linaro.org> * elf32-arm.c (elf32_arm_finish_dynamic_symbol): Improve comment discussing why we clear st_value for some symbols.
Diffstat (limited to 'bfd/elf32-arm.c')
-rw-r--r--bfd/elf32-arm.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 3ebd1f3..5801fe9 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -14238,12 +14238,16 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd,
if (!h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
- the .plt section. Leave the value alone. */
+ the .plt section. */
sym->st_shndx = SHN_UNDEF;
- /* If the symbol is weak, we do need to clear the value.
+ /* If the symbol is weak we need to clear the value.
Otherwise, the PLT entry would provide a definition for
the symbol even if the symbol wasn't defined anywhere,
- and so the symbol would never be NULL. */
+ and so the symbol would never be NULL. Leave the value if
+ there were any relocations where pointer equality matters
+ (this is a clue for the dynamic linker, to make function
+ pointer comparisons work between an application and shared
+ library). */
if (!h->ref_regular_nonweak || !h->pointer_equality_needed)
sym->st_value = 0;
}