* aoutx.h (aout_link_check_ar_symbols): When changing a symbol to

common, set the alignment.
	(aout_link_add_symbols): Restrict the alignment of a common symbol
	to the alignment power given by the architecture.
	* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize align.  Do
	initialize copy_offset.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Use copy_offset
	field rather than align field.  Get alignment using bfd_log2
	rather than switch.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Use copy_offset,
	not align.
	* elf32-sparc.c (elf32_sparc_finish_dynamic_symbol): Likewise.
This commit is contained in:
Ian Lance Taylor
1994-07-22 18:53:23 +00:00
parent 36c6e8c37f
commit 7c6da9cade
5 changed files with 55 additions and 100 deletions

View File

@ -4334,6 +4334,10 @@ elf_link_add_object_symbols (abfd, info)
weaks = *sym_hash;
}
if (sym.st_shndx == SHN_COMMON
&& h->root.type == bfd_link_hash_common)
h->root.u.c.alignment_power = bfd_log2 (sym.st_value);
if (info->hash->creator->flavour == bfd_target_elf_flavour)
{
int old_flags;
@ -4347,9 +4351,6 @@ elf_link_add_object_symbols (abfd, info)
the symbol size changes. */
h->size = sym.st_size;
}
if (sym.st_shndx == SHN_COMMON
&& sym.st_value > h->align)
h->align = sym.st_value;
if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE)
{
/* FIXME: We should probably somehow give a warning if
@ -5701,10 +5702,7 @@ elf_link_output_extsym (h, data)
case bfd_link_hash_common:
input_sec = bfd_com_section_ptr;
sym.st_shndx = SHN_COMMON;
if (h->align == 0)
sym.st_value = 1;
else
sym.st_value = h->align;
sym.st_value = 1 << h->root.u.c.alignment_power;
break;
case bfd_link_hash_indirect: