Accept and ignore @fptr() directives for 4-byte fixups.
authorNick Clifton <nickc@redhat.com>
Mon, 18 Oct 2004 08:02:25 +0000 (08:02 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 18 Oct 2004 08:02:25 +0000 (08:02 +0000)
gas/ChangeLog
gas/config/tc-xstormy16.c

index 97d67ec837e25896f86bd68fb1860f3ffc033a46..5df3b55063ebe4dd6bef92ad504647d1a7e9600f 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-18  Nick Clifton  <nickc@redhat.com>
+
+       * config/tc-xstormy16.c (xstormy16_cons_fix_new): Accept and
+       ignore @fptr() directives for 4-byte fixups.
+
 2004-10-15  Alan Modra  <amodra@bigpond.net.au>
 
        * Makefile.am: Run "make dep-am"
index 83ae94d382aa9b3f678fa444402f76fd96112098..f00a86613b577c12520ab404c81a5da4f1342348 100644 (file)
@@ -206,13 +206,29 @@ xstormy16_cons_fix_new (f, where, nbytes, exp)
 
   if (exp->X_op == O_fptr_symbol)
     {
-      if (nbytes != 2)
+      switch (nbytes)
        {
+       case 4:
+         /* This can happen when gcc is generating debug output.
+            For example it can create a stab with the address of
+            a function:
+            
+               .stabs  "foo:F(0,21)",36,0,0,@fptr(foo)
+            Since this does not involve switching code pages, we
+            just allow the reloc to be generated without any
+            @fptr behaviour.  */
+         exp->X_op = O_symbol;
+         code = BFD_RELOC_32;
+         break;
+       case 2:
+         exp->X_op = O_symbol;
+         code = BFD_RELOC_XSTORMY16_FPTR16;
+         break;
+       default:
          as_bad ("unsupported fptr fixup size %d", nbytes);
          return;
        }
-      exp->X_op = O_symbol;
-      code = BFD_RELOC_XSTORMY16_FPTR16;
     }
   else if (nbytes == 1)
     code = BFD_RELOC_8;