From: Ian Lance Taylor Date: Thu, 26 Jun 1997 05:27:56 +0000 (+0000) Subject: * elflink.h (elf_link_output_extsym): Use the right section for a X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=8211c929862c3a182eb99637ebf2117c4cbd5c23;p=deliverable%2Fbinutils-gdb.git * elflink.h (elf_link_output_extsym): Use the right section for a common symbol. * elf32-mips.c (mips_elf_link_output_symbol_hook): If a common symbol was in .scommon, mark it as SHN_MIPS_SCOMMON. PR 12697. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4dc6767c5a..bc698276ca 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +Thu Jun 26 01:26:31 1997 Ian Lance Taylor + + * elflink.h (elf_link_output_extsym): Use the right section for a + common symbol. + * elf32-mips.c (mips_elf_link_output_symbol_hook): If a common + symbol was in .scommon, mark it as SHN_MIPS_SCOMMON. + Wed Jun 25 12:43:10 1997 H.J. Lu * elflink.h (elf_merge_symbols): Resolve indirect and warning diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index c094b76345..af80f5f291 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -2414,7 +2414,7 @@ _bfd_mips_elf_set_section_contents (abfd, section, location, offset, count) size = section->_cooked_size; else size = section->_raw_size; - c = (PTR) bfd_zalloc (abfd, size); + c = (bfd_byte *) bfd_zalloc (abfd, size); if (c == NULL) return false; elf_section_data (section)->tdata = (PTR) c; @@ -3711,7 +3711,7 @@ mips_elf_create_procedure_table (handle, abfd, info, s, debug) /* Set the size and contents of .rtproc section. */ s->_raw_size = size; - s->contents = rtproc; + s->contents = (bfd_byte *) rtproc; /* Skip this section later on (I don't think this currently matters, but someday it might). */ @@ -5412,8 +5412,8 @@ mips_elf_relocate_section (output_bfd, info, input_bfd, input_section, } /* This hook function is called before the linker writes out a global - symbol. This is where we undo the increment of the value for a - mips16 symbol. */ + symbol. We mark symbols as small common if appropriate. This is + also where we undo the increment of the value for a mips16 symbol. */ /*ARGSIGNORED*/ static boolean @@ -5424,9 +5424,17 @@ mips_elf_link_output_symbol_hook (abfd, info, name, sym, input_sec) Elf_Internal_Sym *sym; asection *input_sec; { + /* If we see a common symbol, which implies a relocatable link, then + if a symbol was small common in an input file, mark it as small + common in the output file. */ + if (sym->st_shndx == SHN_COMMON + && strcmp (input_sec->name, ".scommon") == 0) + sym->st_shndx = SHN_MIPS_SCOMMON; + if (sym->st_other == STO_MIPS16 && (sym->st_value & 1) != 0) --sym->st_value; + return true; } diff --git a/bfd/elflink.h b/bfd/elflink.h index d0fccf30a8..82e10d214f 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -4277,7 +4277,7 @@ elf_link_output_extsym (h, data) break; case bfd_link_hash_common: - input_sec = bfd_com_section_ptr; + input_sec = h->root.u.c.p->section; sym.st_shndx = SHN_COMMON; sym.st_value = 1 << h->root.u.c.p->alignment_power; break;