From 36ed2fff06b673cb994490fad661045c90819514 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 31 Aug 2001 17:43:52 +0000 Subject: [PATCH] * 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. --- gas/ChangeLog | 10 ++++++++++ gas/config/tc-h8300.c | 38 ++++++++++++++++++++------------------ gas/config/tc-h8300.h | 25 +++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 18 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 05b2b4f1dea..5f7d54a5692 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +Fri Aug 31 12:05:13 2001 J"orn Rennecke + Jeff Law + + * 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 * tc-h8300.c (tc_crawl_symbol_chain, tc_headers_hook): Don't diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c index 724aea19211..19ec6dff491 100644 --- a/gas/config/tc-h8300.c +++ b/gas/config/tc-h8300.c @@ -32,18 +32,6 @@ #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; { diff --git a/gas/config/tc-h8300.h b/gas/config/tc-h8300.h index a70792adfe9..e3208f4d9e0 100644 --- a/gas/config/tc-h8300.h +++ b/gas/config/tc-h8300.h @@ -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; -- 2.30.2