From 5459d7a0810702e172a7d51dae046285757d7d88 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Mon, 4 Feb 2002 04:03:15 +0000 Subject: [PATCH] * config/tc-mmix.c (tc_gen_reloc): Don't try and take the value of common and weak symbols. Handle common and weak symbols as undefined symbols with regards to GREG handling and merging. (mmix_frob_file): Ditto. --- gas/ChangeLog | 7 +++++++ gas/config/tc-mmix.c | 18 ++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 82b452125ce..968ce1727d6 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2002-02-04 Hans-Peter Nilsson + + * config/tc-mmix.c (tc_gen_reloc): Don't try and take the value of + common and weak symbols. Handle common and weak symbols as + undefined symbols with regards to GREG handling and merging. + (mmix_frob_file): Ditto. + 2002-02-02 Jason Thorpe * configure.in (hppa-*-netbsd*): New target. diff --git a/gas/config/tc-mmix.c b/gas/config/tc-mmix.c index e396027c703..a8c7e239c1c 100644 --- a/gas/config/tc-mmix.c +++ b/gas/config/tc-mmix.c @@ -2587,14 +2587,20 @@ tc_gen_reloc (section, fixP) fixS *fixP; { bfd_signed_vma val - = fixP->fx_offset + (fixP->fx_addsy ? S_GET_VALUE (fixP->fx_addsy) : 0); + = fixP->fx_offset + + (fixP->fx_addsy != NULL + && !S_IS_WEAK (fixP->fx_addsy) + && !S_IS_COMMON (fixP->fx_addsy) + ? S_GET_VALUE (fixP->fx_addsy) : 0); arelent *relP; bfd_reloc_code_real_type code = BFD_RELOC_NONE; char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; symbolS *addsy = fixP->fx_addsy; asection *addsec = addsy == NULL ? NULL : S_GET_SEGMENT (addsy); asymbol *baddsy = addsy != NULL ? symbol_get_bfdsym (addsy) : NULL; - bfd_vma addend = val - (baddsy == NULL ? 0 : bfd_asymbol_value (baddsy)); + bfd_vma addend + = val - (baddsy == NULL || S_IS_COMMON (addsy) || S_IS_WEAK (addsy) + ? 0 : bfd_asymbol_value (baddsy)); /* A single " LOCAL expression" in the wrong section will not work when linking to MMO; relocations for zero-content sections are then @@ -2720,7 +2726,9 @@ tc_gen_reloc (section, fixP) struct mmix_symbol_gregs *gregs; struct mmix_symbol_greg_fixes *fix; - if (S_IS_DEFINED (addsy)) + if (S_IS_DEFINED (addsy) + && !bfd_is_com_section (addsec) + && !S_IS_WEAK (addsy)) { if (! symbol_section_p (addsy) && ! bfd_is_abs_section (addsec)) as_fatal (_("internal: BFD_RELOC_MMIX_BASE_PLUS_OFFSET not resolved to section")); @@ -3592,7 +3600,9 @@ mmix_frob_file () /* If the symbol is defined, then it must be resolved to a section symbol at this time, or else we don't know how to handle it. */ - if (S_IS_DEFINED (sym)) + if (S_IS_DEFINED (sym) + && !bfd_is_com_section (S_GET_SEGMENT (sym)) + && !S_IS_WEAK (sym)) { if (! symbol_section_p (sym) && ! bfd_is_abs_section (S_GET_SEGMENT (sym))) -- 2.30.2