X-Git-Url: https://oss.titaniummirror.com/gitweb?p=msp430-binutils.git;a=blobdiff_plain;f=gas%2Fconfig%2Ftc-hppa.h;fp=gas%2Fconfig%2Ftc-hppa.h;h=cd8c205d40c15d5811a171b0074d63dfbd96798d;hp=4a950910542458210dfd00f1c1ad04be1f872db5;hb=88750007d7869f178f0ba528f41efd3b74c424cf;hpb=6df9443a374e2b81278c61b8afc0a1eef7db280b diff --git a/gas/config/tc-hppa.h b/gas/config/tc-hppa.h index 4a95091..cd8c205 100644 --- a/gas/config/tc-hppa.h +++ b/gas/config/tc-hppa.h @@ -1,6 +1,6 @@ /* tc-hppa.h -- Header file for the PA Copyright 1989, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -146,14 +146,23 @@ int hppa_fix_adjustable (struct fix *); two symbols. This includes the difference of two symbols when one of them is undefined (this comes up in PIC code generation). - We don't define DIFF_EXPR_OK because it does the wrong thing if - the add symbol is undefined and the sub symbol is a symbol in - the same section as the relocation. We also need some way to - specialize some code in adjust_reloc_syms. */ + We allow the difference of two symbols when the subtract symbol is + local to the relocation. This is implemented using R_HPPA_COMPLEX. + + This has some limitations. Difference expressions only work between + symbols in the same segment/quadrant of a module since the HP dynamic + loader relocates the text and data segments independently. Thus, a + difference expression can't be used between text and data symbols, + or between symbols in different executable modules. */ +#define DIFF_EXPR_OK 1 +#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG) 1 #define UNDEFINED_DIFFERENCE_OK #endif #ifdef OBJ_ELF + +/* Difference expressions for the 64-bit HP-UX target have the same + limitations as those for the 32-bit SOM target. */ #define DIFF_EXPR_OK 1 /* Handle .type psuedo. Given a type string of `millicode', set the @@ -172,9 +181,8 @@ int hppa_fix_adjustable (struct fix *); if ((S_GET_SEGMENT (sym) == &bfd_und_section \ && ! symbol_used_p (sym) \ && ELF_ST_VISIBILITY (S_GET_OTHER (sym)) == STV_DEFAULT) \ - || (S_GET_SEGMENT (sym) == &bfd_abs_section \ - && ! S_IS_EXTERNAL (sym)) \ || strcmp (S_GET_NAME (sym), "$global$") == 0 \ + || strcmp (S_GET_NAME (sym), "$segrel$") == 0 \ || strcmp (S_GET_NAME (sym), "$PIC_pcrel$0") == 0 \ || strcmp (S_GET_NAME (sym), "$tls_gdidx$") == 0 \ || strcmp (S_GET_NAME (sym), "$tls_ldidx$") == 0 \ @@ -186,8 +194,6 @@ int hppa_fix_adjustable (struct fix *); #define elf_tc_final_processing elf_hppa_final_processing void elf_hppa_final_processing (void); - -#define DWARF2_LINE_MIN_INSN_LENGTH 4 #endif /* OBJ_ELF */ #define md_operand(x) @@ -198,7 +204,7 @@ void elf_hppa_final_processing (void); int hppa_force_reg_syms_absolute (expressionS *, operatorT, expressionS *); -#define TC_FIX_TYPE PTR +#define TC_FIX_TYPE void * #define TC_INIT_FIX_DATA(FIX) ((FIX)->tc_fix_data = NULL) #ifdef OBJ_ELF @@ -213,10 +219,21 @@ extern int hppa_regname_to_dw2regnum (char *regname); #define DWARF2_LINE_MIN_INSN_LENGTH 4 #define DWARF2_DEFAULT_RETURN_COLUMN 2 #if TARGET_ARCH_SIZE == 64 -#define DWARF2_CIE_DATA_ALIGNMENT -8 +#define DWARF2_CIE_DATA_ALIGNMENT 8 +#define DWARF2_FDE_RELOC_SIZE 8 #else -#define DWARF2_CIE_DATA_ALIGNMENT -4 +#define DWARF2_CIE_DATA_ALIGNMENT 4 #endif + +#if !defined (TE_LINUX) && !defined (TE_NetBSD) +/* Due to the way dynamic linking to personality functions is handled + on HP-UX, we need to have a read-write .eh_frame section. */ +#define DWARF2_EH_FRAME_READ_ONLY 0 + +/* Because differences between text and data symbols don't work, we + can't use difference expressions during CFI generation. */ +#define CFI_DIFF_EXPR_OK 0 #endif +#endif /* OBJ_ELF */ #endif /* _TC_HPPA_H */