aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2007-05-16 12:52:03 +0000
committerH.J. Lu <hjl.tools@gmail.com>2007-05-16 12:52:03 +0000
commit91ac591132f0891f30c9f6e6e7d4a3c56707ecdd (patch)
treeb94a4c8c9eb62fed1ead1707ab5a5b88bf627cf7 /bfd
parent8ee82aff445c6ba118ca1afcf89213cd25490b56 (diff)
downloadgdb-91ac591132f0891f30c9f6e6e7d4a3c56707ecdd.zip
gdb-91ac591132f0891f30c9f6e6e7d4a3c56707ecdd.tar.gz
gdb-91ac591132f0891f30c9f6e6e7d4a3c56707ecdd.tar.bz2
2007-05-16 H.J. Lu <hongjiu.lu@intel.com>
Alan Modra <amodra@bigpond.net.au> * elflink.c (_bfd_elf_adjust_dynamic_copy): Align dynamic bss section to the minimum alignment.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elflink.c32
2 files changed, 22 insertions, 16 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a46bc09..ab4a46f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2007-05-16 H.J. Lu <hongjiu.lu@intel.com>
+ Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (_bfd_elf_adjust_dynamic_copy): Align dynamic bss
+ section to the minimum alignment.
+
2007-05-15 H.J. Lu <hongjiu.lu@intel.com>
Alan Modra <amodra@bigpond.net.au>
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 6cf1ba9..dfdbade 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -2616,33 +2616,33 @@ bfd_boolean
_bfd_elf_adjust_dynamic_copy (struct elf_link_hash_entry *h,
asection *dynbss)
{
- unsigned int power_of_two, orig_power_of_two;
+ unsigned int power_of_two;
bfd_vma mask;
asection *sec = h->root.u.def.section;
/* The section aligment of definition is the maximum alignment
- requirement of symbols defined in the section. */
- power_of_two = bfd_get_section_alignment (dynbss->owner, dynbss);
- orig_power_of_two = bfd_get_section_alignment (sec->owner, sec);
+ requirement of symbols defined in the section. Since we don't
+ know the symbol alignment requirement, we start with the
+ maximum alignment and check low bits of the symbol address
+ for the minimum alignment. */
+ power_of_two = bfd_get_section_alignment (sec->owner, sec);
+ mask = ((bfd_vma) 1 << power_of_two) - 1;
+ while ((h->root.u.def.value & mask) != 0)
+ {
+ mask >>= 1;
+ --power_of_two;
+ }
- if (orig_power_of_two > power_of_two)
+ if (power_of_two > bfd_get_section_alignment (dynbss->owner,
+ dynbss))
{
/* Adjust the section alignment if needed. */
if (! bfd_set_section_alignment (dynbss->owner, dynbss,
- orig_power_of_two))
+ power_of_two))
return FALSE;
}
- /* We make sure that the symbol will be aligned properly. Since we
- don't know its alignment requirement, we start with the maximum
- alignment and check low bits of the symbol address for the
- minimum alignment. */
- mask = ((bfd_vma) 1 << orig_power_of_two) - 1;
- while ((h->root.u.def.value & mask) != 0)
- {
- mask >>= 1;
- --orig_power_of_two;
- }
+ /* We make sure that the symbol will be aligned properly. */
dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
/* Define the symbol as being at this point in DYNBSS. */