bfd/elf32-arm.c: Improve comment in elf32_arm_finish_dynamic_symbol
authorWill Newton <will.newton@linaro.org>
Tue, 3 Feb 2015 12:51:14 +0000 (12:51 +0000)
committerWill Newton <will.newton@linaro.org>
Tue, 3 Feb 2015 14:05:06 +0000 (14:05 +0000)
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.

bfd/ChangeLog
bfd/elf32-arm.c

index 5942e1c..e6f0418 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 2015-02-02  Kuan-Lin Chen  <kuanlinchentw@gmail.com>
 
        * elf32-nds32.c (nds32_get_section_contents): Add one more argument.
index 3ebd1f3..5801fe9 100644 (file)
@@ -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;
        }