From 021986386e5aea745ae5b4300b84a3f8ef50e00b Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Fri, 18 Aug 2000 18:45:05 +0000 Subject: [PATCH] * write.c (fixup_segment) [TC_DONT_FIX_NON_ADJUSTABLE]: Use obj_fix_adjustable() and tc_fix_adjustable() to tell whether to add a symbol's address. Removed all target-specific #ifdefs that used to accomplished the same. * config/tc-v850.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. * config/tc-m68k.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. * config/tc-arm.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. * config/tc-i960.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. * config/tc-i386.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. --- gas/ChangeLog | 12 ++++++++++++ gas/config/tc-arm.h | 4 ++++ gas/config/tc-i386.h | 4 ++++ gas/config/tc-i960.h | 4 ++++ gas/config/tc-m68k.h | 4 ++++ gas/config/tc-v850.h | 6 +++++- gas/write.c | 16 ++++++++-------- 7 files changed, 41 insertions(+), 9 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index bca5da89f70..011b7d84804 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,15 @@ +2000-08-18 Alexandre Oliva + + * write.c (fixup_segment) [TC_DONT_FIX_NON_ADJUSTABLE]: Use + obj_fix_adjustable() and tc_fix_adjustable() to tell whether to + add a symbol's address. Removed all target-specific #ifdefs that + used to accomplished the same. + * config/tc-v850.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. + * config/tc-m68k.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. + * config/tc-arm.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. + * config/tc-i960.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. + * config/tc-i386.h (TC_DONT_FIX_NON_ADJUSTABLE): Define. + 2000-08-17 Kazu Hirata * dwarf2dbg.c: Fix formatting. diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h index c5ab8870512..28d8bc4ed26 100644 --- a/gas/config/tc-arm.h +++ b/gas/config/tc-arm.h @@ -116,6 +116,10 @@ #define TC_FIX_TYPE PTR #define TC_INIT_FIX_DATA(FIXP) ((FIXP)->tc_fix_data = NULL) +/* This arranges for gas/write.c to not apply a relocation if + obj_fix_adjustable() says it is not adjustable. */ +#define TC_DONT_FIX_NON_ADJUSTABLE 1 + #ifdef OBJ_ELF #include "write.h" /* For definition of fixS */ #define obj_fix_adjustable(fixP) arm_fix_adjustable (fixP) diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h index c43569087ce..e4a5731857f 100644 --- a/gas/config/tc-i386.h +++ b/gas/config/tc-i386.h @@ -38,6 +38,10 @@ struct fix; type. The idea is that if the original type is already some kind of PIC relocation, we leave it alone, otherwise we give it the desired type */ +/* This arranges for gas/write.c to not apply a relocation if + tc_fix_adjustable() says it is not adjustable. */ +#define TC_DONT_FIX_NON_ADJUSTABLE 1 + #define tc_fix_adjustable(X) tc_i386_fix_adjustable(X) extern int tc_i386_fix_adjustable PARAMS ((struct fix *)); diff --git a/gas/config/tc-i960.h b/gas/config/tc-i960.h index 2746edeeb23..dca9d4a61a7 100644 --- a/gas/config/tc-i960.h +++ b/gas/config/tc-i960.h @@ -153,6 +153,10 @@ extern int i960_validate_fix PARAMS ((struct fix *, segT, symbolS **)); && ! S_IS_COMMON ((FIX)->fx_addsy))) #endif +/* This arranges for gas/write.c to not apply a relocation if + tc_fix_adjustable() says it is not adjustable. */ +#define TC_DONT_FIX_NON_ADJUSTABLE 1 + #ifndef OBJ_ELF #define tc_fix_adjustable(FIXP) ((FIXP)->fx_bsr == 0) #else diff --git a/gas/config/tc-m68k.h b/gas/config/tc-m68k.h index b3daf5e023c..1941e300837 100644 --- a/gas/config/tc-m68k.h +++ b/gas/config/tc-m68k.h @@ -173,6 +173,10 @@ while (0) && S_IS_DEFINED ((FIX)->fx_addsy) \ && ! S_IS_COMMON ((FIX)->fx_addsy))) +/* This arranges for gas/write.c to not apply a relocation if + tc_fix_adjustable() says it is not adjustable. */ +#define TC_DONT_FIX_NON_ADJUSTABLE 1 + #define tc_fix_adjustable(X) tc_m68k_fix_adjustable(X) extern int tc_m68k_fix_adjustable PARAMS ((struct fix *)); #define elf_tc_final_processing m68k_elf_final_processing diff --git a/gas/config/tc-v850.h b/gas/config/tc-v850.h index fad4d1cf850..59fa5074211 100644 --- a/gas/config/tc-v850.h +++ b/gas/config/tc-v850.h @@ -1,5 +1,5 @@ /* tc-v850.h -- Header file for tc-v850.c. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -37,6 +37,10 @@ #define MD_APPLY_FIX3 #define md_operand(x) +/* This arranges for gas/write.c to not apply a relocation if + obj_fix_adjustable() says it is not adjustable. */ +#define TC_DONT_FIX_NON_ADJUSTABLE 1 + #define obj_fix_adjustable(fixP) v850_fix_adjustable(fixP) #define TC_FORCE_RELOCATION(fixp) v850_force_relocation(fixp) extern int v850_force_relocation PARAMS ((struct fix *)); diff --git a/gas/write.c b/gas/write.c index e9e4f8a7e24..cb5070995e8 100644 --- a/gas/write.c +++ b/gas/write.c @@ -2706,17 +2706,17 @@ fixup_segment (fixP, this_segment_type) else { seg_reloc_count++; -#if !(defined (TC_V850) && defined (OBJ_ELF)) -#if !(defined (TC_M68K) && defined (OBJ_ELF)) -#if !(defined (TC_ARM) && defined (OBJ_ELF)) -#if !(defined (TC_I960) && defined (OBJ_ELF)) -#if !defined (TC_I386) || !(defined (OBJ_ELF) || defined (OBJ_COFF)) || defined (TE_PE) - add_number += S_GET_VALUE (add_symbolP); -#endif -#endif +#ifdef TC_DONT_FIX_NON_ADJUSTABLE + if (1 +#ifdef obj_fix_adjustable + && obj_fix_adjustable (fixP) #endif +#ifdef tc_fix_adjustable + && tc_fix_adjustable (fixP) #endif + ) #endif + add_number += S_GET_VALUE (add_symbolP); } } }