* 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.
This commit is contained in:
Jeff Law 2001-08-31 17:43:52 +00:00
parent 08bf74c587
commit 36ed2fff06
3 changed files with 55 additions and 18 deletions

View 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

View File

@ -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;
{

View 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;