aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1997-06-26 05:27:56 +0000
committerIan Lance Taylor <ian@airs.com>1997-06-26 05:27:56 +0000
commit8211c929862c3a182eb99637ebf2117c4cbd5c23 (patch)
tree2ec11348e10a191533a8850f5dd07b8dcaedd9bd
parent662cc41eafa15f94499988b0e1c9a9ffc0afc39e (diff)
downloadgdb-8211c929862c3a182eb99637ebf2117c4cbd5c23.zip
gdb-8211c929862c3a182eb99637ebf2117c4cbd5c23.tar.gz
gdb-8211c929862c3a182eb99637ebf2117c4cbd5c23.tar.bz2
* 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.
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf32-mips.c16
-rw-r--r--bfd/elflink.h2
3 files changed, 20 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4dc6767..bc69827 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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>
* elflink.h (elf_merge_symbols): Resolve indirect and warning
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index c094b76..af80f5f 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 d0fccf3..82e10d2 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;