* 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.
This commit is contained in:
parent
662cc41eaf
commit
8211c92986
|
@ -1,3 +1,10 @@
|
||||||
|
Thu Jun 26 01:26:31 1997 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* 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 <hjl@gnu.ai.mit.edu>
|
Wed Jun 25 12:43:10 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
|
||||||
|
|
||||||
* elflink.h (elf_merge_symbols): Resolve indirect and warning
|
* elflink.h (elf_merge_symbols): Resolve indirect and warning
|
||||||
|
|
|
@ -2414,7 +2414,7 @@ _bfd_mips_elf_set_section_contents (abfd, section, location, offset, count)
|
||||||
size = section->_cooked_size;
|
size = section->_cooked_size;
|
||||||
else
|
else
|
||||||
size = section->_raw_size;
|
size = section->_raw_size;
|
||||||
c = (PTR) bfd_zalloc (abfd, size);
|
c = (bfd_byte *) bfd_zalloc (abfd, size);
|
||||||
if (c == NULL)
|
if (c == NULL)
|
||||||
return false;
|
return false;
|
||||||
elf_section_data (section)->tdata = (PTR) c;
|
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. */
|
/* Set the size and contents of .rtproc section. */
|
||||||
s->_raw_size = size;
|
s->_raw_size = size;
|
||||||
s->contents = rtproc;
|
s->contents = (bfd_byte *) rtproc;
|
||||||
|
|
||||||
/* Skip this section later on (I don't think this currently
|
/* Skip this section later on (I don't think this currently
|
||||||
matters, but someday it might). */
|
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
|
/* 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
|
symbol. We mark symbols as small common if appropriate. This is
|
||||||
mips16 symbol. */
|
also where we undo the increment of the value for a mips16 symbol. */
|
||||||
|
|
||||||
/*ARGSIGNORED*/
|
/*ARGSIGNORED*/
|
||||||
static boolean
|
static boolean
|
||||||
|
@ -5424,9 +5424,17 @@ mips_elf_link_output_symbol_hook (abfd, info, name, sym, input_sec)
|
||||||
Elf_Internal_Sym *sym;
|
Elf_Internal_Sym *sym;
|
||||||
asection *input_sec;
|
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
|
if (sym->st_other == STO_MIPS16
|
||||||
&& (sym->st_value & 1) != 0)
|
&& (sym->st_value & 1) != 0)
|
||||||
--sym->st_value;
|
--sym->st_value;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4277,7 +4277,7 @@ elf_link_output_extsym (h, data)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case bfd_link_hash_common:
|
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_shndx = SHN_COMMON;
|
||||||
sym.st_value = 1 << h->root.u.c.p->alignment_power;
|
sym.st_value = 1 << h->root.u.c.p->alignment_power;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue