From 7542c0f275dbb7217ddec0beea4985ba4a2f24b3 Mon Sep 17 00:00:00 2001 From: Jason Thorpe Date: Sun, 9 Jun 2002 00:45:42 +0000 Subject: 2002-06-08 Matt Thomas * configure.in (vax-*-netbsdelf*, vax-*-netbsdaout*) (vax-*-netbsd*): New targets. * configure: Regenerate. * config/aout_gnu.h (enum machine_type): Add M_VAX4K_NETBSD. * config/tc-vax.c: Add support for ELF and PIC. (flag_want_pic): New flag. (float_cons): Fix prototype. (md_apply_fix3): Adjust for BFD_ASSEMBLER. (md_assemble): Introduce a new is_absolute local, and use it rather than repeating the test. Make fatal errors actually fatal by using as_fatal as appropriate. Adjust for BFD_ASSEMBLER. Add support for ELF. Add support for PIC. (md_convert_frag): Adjust for BFD_ASSEMBLER. (tc_aout_fix_to_chars): Only include if OBJ_AOUT and not BFD_ASSEMBLER. (vax_reg_parse): Make the % register prefix mandatory for ELF, optional for a.out, and not allowed for VMS. Adjust all callers. (md_create_short_jump): Add ATTRIBUTE_UNUSED to unused arguments. (md_create_long_jump): Likewise. (md_undefined_symbol): Likewise. (md_section_align): Likewise. (md_shortopts): Allow -k and -K for ELF. (md_parse_option): Set flag_want_pic if -k or -K. (tc_headers_hook): New function if OBJ_AOUT and not BFD_ASSEMBLER. (tc_gen_reloc): New function if BFD_ASSEMBLER. * config/tc-vax.h (tc_headers_hook): Remove. (TARGET_FORMAT): Set according to object format and target environment. (BFD_ARCH, TARGET_ARCH): Define. (NO_RELOC): Adjust for BFD_ASSEMBLER. (TC_RELOC_RTSYM_LOC_FIXUP, TC_FIX_ADJUSTABLE) (tc_fix_adjustable): Define if BFD_ASSEMBLER. * config/vax-inst.h (VAX_JSB, VAX_CALLS, VAX_CALLG): Define. --- gas/config/tc-vax.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) (limited to 'gas/config/tc-vax.h') diff --git a/gas/config/tc-vax.h b/gas/config/tc-vax.h index dbd8be1..4953ff4 100644 --- a/gas/config/tc-vax.h +++ b/gas/config/tc-vax.h @@ -23,12 +23,35 @@ #define TARGET_BYTES_BIG_ENDIAN 0 -#define NO_RELOC 0 -#define NOP_OPCODE 0x01 +#ifdef OBJ_AOUT +#ifdef TE_NetBSD +#define TARGET_FORMAT "a.out-vax-netbsd" +#endif +#ifndef TARGET_FORMAT +#define TARGET_FORMAT "a.out-vax-bsd" +#endif +#endif + +#ifdef OBJ_VMS +#define TARGET_FORMAT "vms-vax" +#endif + +#ifdef OBJ_ELF +#define TARGET_FORMAT "elf32-vax" +#endif + +#define BFD_ARCH bfd_arch_vax /* for non-BFD_ASSEMBLER */ +#define TARGET_ARCH bfd_arch_vax /* BFD_ASSEMBLER */ + +#ifdef BFD_ASSEMBLER +#define NO_RELOC BFD_RELOC_NONE +#else +#define NO_RELOC 0 +#endif +#define NOP_OPCODE 0x01 #define tc_aout_pre_write_hook(x) {;} /* not used */ #define tc_crawl_symbol_chain(a) {;} /* not used */ -#define tc_headers_hook(a) {;} /* not used */ #define md_operand(x) long md_chars_to_number PARAMS ((unsigned char *, int)); @@ -36,6 +59,35 @@ long md_chars_to_number PARAMS ((unsigned char *, int)); extern const struct relax_type md_relax_table[]; #define TC_GENERIC_RELAX_TABLE md_relax_table +/* This expression evaluates to false if the relocation is for a local object + for which we still want to do the relocation at runtime. True if we + are willing to perform this relocation while building the .o file. If + the reloc is against an externally visible symbol, then the assembler + should never do the relocation. */ + +#ifdef BFD_ASSEMBLER +#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \ + ((FIX)->fx_addsy == NULL \ + || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \ + && ! S_IS_WEAK ((FIX)->fx_addsy) \ + && S_IS_DEFINED ((FIX)->fx_addsy) \ + && ! S_IS_COMMON ((FIX)->fx_addsy))) +#define TC_FIX_ADJUSTABLE(FIX) \ + (!symbol_used_in_reloc_p ((FIX)) && tc_fix_adjustable ((FIX))) +#define tc_fix_adjustable(FIX) \ + ((FIX)->fx_r_type != BFD_RELOC_VTABLE_INHERIT \ + && (FIX)->fx_r_type != BFD_RELOC_32_PLT_PCREL \ + && (FIX)->fx_r_type != BFD_RELOC_32_GOT_PCREL \ + && (FIX)->fx_r_type != BFD_RELOC_VTABLE_ENTRY \ + && ! S_IS_EXTERNAL ((FIX)->fx_addsy) \ + && ! S_IS_WEAK ((FIX)->fx_addsy) \ + && ((FIX)->fx_pcrel \ + || ((FIX)->fx_subsy != NULL \ + && (S_GET_SEGMENT ((FIX)->fx_subsy) \ + == S_GET_SEGMENT ((FIX)->fx_addsy))) \ + || S_IS_LOCAL ((FIX)->fx_addsy))) +#endif + /* * Local Variables: * comment-column: 0 -- cgit v1.1