aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-vax.h
diff options
context:
space:
mode:
authorJason Thorpe <thorpej@netbsd.org>2002-06-09 00:45:42 +0000
committerJason Thorpe <thorpej@netbsd.org>2002-06-09 00:45:42 +0000
commit7542c0f275dbb7217ddec0beea4985ba4a2f24b3 (patch)
treeff11d446c10f0144d8ff1c78ab38a251a48f11a1 /gas/config/tc-vax.h
parent05b65acb41e3fe35b45387e64a8f2f50b94935b6 (diff)
downloadgdb-7542c0f275dbb7217ddec0beea4985ba4a2f24b3.zip
gdb-7542c0f275dbb7217ddec0beea4985ba4a2f24b3.tar.gz
gdb-7542c0f275dbb7217ddec0beea4985ba4a2f24b3.tar.bz2
2002-06-08 Matt Thomas <matt@3am-software.com>
* 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.
Diffstat (limited to 'gas/config/tc-vax.h')
-rw-r--r--gas/config/tc-vax.h58
1 files changed, 55 insertions, 3 deletions
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