* config/tc-frv.c (md_apply_fix): Use abs_section_sym for
authorAlan Modra <amodra@gmail.com>
Mon, 15 Sep 2008 05:22:32 +0000 (05:22 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 15 Sep 2008 05:22:32 +0000 (05:22 +0000)
relocs with no symbol.
* config/tc-mmix.c (md_assemble): Mark fake symbol on
BFD_RELOC_MMIX_BASE_PLUS_OFFSET as OK for use by relocs.
(mmix_md_end): Likewise mark mmix reg contents section symbol.

gas/ChangeLog
gas/config/tc-frv.c
gas/config/tc-mmix.c

index 82ffb6bf4af282f29d6e8ec0695cc75d293fc1cb..51e0c610b71bdfb4b6674adddb933544a6a2a5c1 100644 (file)
@@ -1,3 +1,11 @@
+2008-09-15  Alan Modra  <amodra@bigpond.net.au>
+
+       * config/tc-frv.c (md_apply_fix): Use abs_section_sym for
+       relocs with no symbol.
+       * config/tc-mmix.c (md_assemble): Mark fake symbol on
+       BFD_RELOC_MMIX_BASE_PLUS_OFFSET as OK for use by relocs.
+       (mmix_md_end): Likewise mark mmix reg contents section symbol.
+
 2008-09-14  Chris Smith <chris@zxdesign.info>
 
        * config/tc-z80.c: Opcode generation of ld a,(bc) and ld a,(de) was
index e58def9e562728906a8d57fd0f2f321760aaa005..4551d755418b47e4fa506b259ec9b3db43550313 100644 (file)
@@ -1475,7 +1475,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)
       case BFD_RELOC_FRV_TLSDESC_RELAX:
       case BFD_RELOC_FRV_GETTLSOFF_RELAX:
       case BFD_RELOC_FRV_TLSOFF_RELAX:
-       fixP->fx_addsy = expr_build_uconstant (0);
+       fixP->fx_addsy = abs_section_sym;
        break;
       }
   else
index c2b3789f74856f69ad2fe1bb507a743cd7bd2640..320ed2bbcce29ac10471ff9a87b73b76e102ea51 100644 (file)
@@ -1365,6 +1365,9 @@ md_assemble (char *str)
             pass expressions as symbols and use fix_new, not fix_new_exp.  */
          sym = make_expr_symbol (exp + 1);
 
+         /* Mark the symbol as being OK for a reloc.  */
+         symbol_get_bfdsym (sym)->flags |= BSF_KEEP;
+
          /* Now we know it can be a "base address plus offset".  Add
             proper fixup types so we can handle this later, when we've
             parsed everything.  */
@@ -3448,6 +3451,7 @@ mmix_md_end (void)
 {
   fragS *fragP;
   symbolS *mainsym;
+  asection *regsec;
   int i;
 
   /* The first frag of GREG:s going into the register contents section.  */
@@ -3512,9 +3516,9 @@ mmix_md_end (void)
         and the same allocation order (within a file) as mmixal.  */
       segT this_segment = now_seg;
       subsegT this_subsegment = now_subseg;
-      asection *regsec
-       = bfd_make_section_old_way (stdoutput,
-                                   MMIX_REG_CONTENTS_SECTION_NAME);
+
+      regsec = bfd_make_section_old_way (stdoutput,
+                                        MMIX_REG_CONTENTS_SECTION_NAME);
       subseg_set (regsec, 0);
 
       /* Finally emit the initialization-value.  Emit a variable frag, which
@@ -3541,6 +3545,11 @@ mmix_md_end (void)
       subseg_set (this_segment, this_subsegment);
     }
 
+  regsec = bfd_get_section_by_name (stdoutput, MMIX_REG_CONTENTS_SECTION_NAME);
+  /* Mark the section symbol as being OK for a reloc.  */
+  if (regsec != NULL)
+    regsec->symbol->flags |= BSF_KEEP;
+
   /* Iterate over frags resulting from GREGs and move those that evidently
      have the same value together and point one to another.