* tc-h8300.c (relocation mappings): Remove. Moved to tc-h8300.h.
authorJeff Law <law@redhat.com>
Fri, 31 Aug 2001 17:43:52 +0000 (17:43 +0000)
committerJeff Law <law@redhat.com>
Fri, 31 Aug 2001 17:43:52 +0000 (17:43 +0000)
        (build_bytes): Mark fixups for PCrel branches as signed.  For
        OBJ_ELF, make sure the reloc's offset points to the first byte
        to be modified.
        (md_convert_frag): Update definiton based on BFD_ASSEMBLER.
        * tc-h8300.h (relocation mappings): Add.

gas/ChangeLog
gas/config/tc-h8300.c
gas/config/tc-h8300.h

index 05b2b4f..5f7d54a 100644 (file)
@@ -1,3 +1,13 @@
+Fri Aug 31 12:05:13 2001  J"orn Rennecke <amylaar@redhat.com>
+                         Jeff Law <law@redhat.com>
+
+       * tc-h8300.c (relocation mappings): Remove.  Moved to tc-h8300.h.
+       (build_bytes): Mark fixups for PCrel branches as signed.  For
+       OBJ_ELF, make sure the reloc's offset points to the first byte
+       to be modified.
+       (md_convert_frag): Update definiton based on BFD_ASSEMBLER.
+       * tc-h8300.h (relocation mappings): Add.
+
 Thu Aug 30 12:05:13 2001  J"orn Rennecke <amylaar@redhat.com>
 
        * tc-h8300.c (tc_crawl_symbol_chain, tc_headers_hook): Don't
index 724aea1..19ec6df 100644 (file)
 
 #ifdef OBJ_ELF
 #include "elf/h8.h"
-
-#define R_MOV24B1 BFD_RELOC_H8_DIR24A8
-#define R_MOVL1 BFD_RELOC_H8_DIR32A16
-#define R_MOV24B1 BFD_RELOC_H8_DIR24A8
-#define R_MOVL1 BFD_RELOC_H8_DIR32A16
-#define R_RELLONG BFD_RELOC_32
-#define R_MOV16B1 BFD_RELOC_H8_DIR16A8
-#define R_RELWORD BFD_RELOC_16
-#define R_RELBYTE BFD_RELOC_8
-#define R_PCRWORD BFD_RELOC_16_PCREL
-#define R_PCRBYTE BFD_RELOC_8_PCREL
-#define R_JMPL1 BFD_RELOC_H8_DIR24R8
 #endif
 
 const char comment_chars[] = ";";
@@ -1110,6 +1098,7 @@ build_bytes (this_try, operand)
          int where = size16 ? 2 : 1;
          int size = size16 ? 2 : 1;
          int type = size16 ? R_PCRWORD : R_PCRBYTE;
+         fixS *fixP;
 
          check_operand (operand + i, size16 ? 0x7fff : 0x7f, "@");
 
@@ -1119,16 +1108,25 @@ build_bytes (this_try, operand)
                       (unsigned long) operand->exp.X_add_number);
            }
 
+#ifndef OBJ_ELF
+         /* The COFF port has always been off by one, changing it
+            now would be an incompatible change, so we leave it as-is.
+
+            We don't want to do this for ELF as we want to be
+            compatible with the proposed ELF format from Hitachi.  */
          operand[i].exp.X_add_number -= 1;
+#endif
+
          operand[i].exp.X_add_number =
            ((operand[i].exp.X_add_number & 0xff) ^ 0x80) - 0x80;
 
-         fix_new_exp (frag_now,
-                      output - frag_now->fr_literal + where,
-                      size,
-                      &operand[i].exp,
-                      1,
-                      type);
+         fixP = fix_new_exp (frag_now,
+                             output - frag_now->fr_literal + where,
+                             size,
+                             &operand[i].exp,
+                             1,
+                             type);
+         fixP->fx_signed = 1;
        }
       else if (x & MEMIND)
        {
@@ -1448,7 +1446,11 @@ tc_aout_fix_to_chars ()
 
 void
 md_convert_frag (headers, seg, fragP)
+#ifdef BFD_ASSEMBLER
+     bfd *headers ATTRIBUTE_UNUSED;
+#else
      object_headers *headers ATTRIBUTE_UNUSED;
+#endif
      segT seg ATTRIBUTE_UNUSED;
      fragS *fragP ATTRIBUTE_UNUSED;
 {
index a70792a..e3208f4 100644 (file)
@@ -49,12 +49,37 @@ struct internal_reloc;
 extern void tc_reloc_mangle
   PARAMS ((struct fix *, struct internal_reloc *, bfd_vma));
 
+#ifdef OBJ_ELF
+/* Provide mappings from the original H8 COFF relocation names to
+   their corresponding BFD relocation names.  This allows us to use
+   most of tc-h8300.c without modifications for both ELF and COFF
+   ports.  */
+#define R_MOV24B1 BFD_RELOC_H8_DIR24A8
+#define R_MOVL1 BFD_RELOC_H8_DIR32A16
+#define R_MOV24B1 BFD_RELOC_H8_DIR24A8
+#define R_MOVL1 BFD_RELOC_H8_DIR32A16
+#define R_RELLONG BFD_RELOC_32
+#define R_MOV16B1 BFD_RELOC_H8_DIR16A8
+#define R_RELWORD BFD_RELOC_16
+#define R_RELBYTE BFD_RELOC_8
+#define R_PCRWORD BFD_RELOC_16_PCREL
+#define R_PCRBYTE BFD_RELOC_8_PCREL
+#define R_JMPL1 BFD_RELOC_H8_DIR24R8
+#define R_MEM_INDIRECT BFD_RELOC_8
+
+/* We do not want to adjust any relocations to make implementation of
+   linker relaxations easier.  */
+#define tc_fix_adjustable(FIX) 0
+#endif
+
 #define TC_CONS_RELOC          (Hmode ? R_RELLONG: R_RELWORD)
 
 #define DO_NOT_STRIP 0
 #define LISTING_HEADER "Hitachi H8/300 GAS "
 #define NEED_FX_R_TYPE 1
+#ifndef OBJ_ELF
 #define RELOC_32 1234
+#endif
 
 extern int Hmode;
 extern int Smode;