From 3dd243066bca0093af6a653cc25507596d5ea0b4 Mon Sep 17 00:00:00 2001 From: Dave Anglin Date: Sun, 7 Sep 2008 22:54:54 +0000 Subject: * dw2gencfi.c (CFI_DIFF_EXPR_OK): Define if not defined. (dot_cfi_personality): Use CFI_DIFF_EXPR_OK instead of DIFF_EXPR_OK. (dot_cfi_lsda, output_cie, output_fde): Likewise. * config/tc-hppa.h (CFI_DIFF_EXPR_OK): Define. --- gas/ChangeLog | 7 +++++++ gas/config/tc-hppa.h | 4 ++++ gas/dw2gencfi.c | 21 +++++++++++++++------ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 0d55727e88c..9237bedf6f7 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2008-09-07 John David Anglin + + * dw2gencfi.c (CFI_DIFF_EXPR_OK): Define if not defined. + (dot_cfi_personality): Use CFI_DIFF_EXPR_OK instead of DIFF_EXPR_OK. + (dot_cfi_lsda, output_cie, output_fde): Likewise. + * config/tc-hppa.h (CFI_DIFF_EXPR_OK): Define. + 2008-09-06 Richard Sandiford * config/tc-mips.h (DWARF2_FDE_RELOC_SIZE): Define. diff --git a/gas/config/tc-hppa.h b/gas/config/tc-hppa.h index c3082a24ff3..3a45e082e81 100644 --- a/gas/config/tc-hppa.h +++ b/gas/config/tc-hppa.h @@ -222,6 +222,10 @@ extern int hppa_regname_to_dw2regnum (char *regname); /* 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 */ diff --git a/gas/dw2gencfi.c b/gas/dw2gencfi.c index 520d1e1734a..49a23ad8106 100644 --- a/gas/dw2gencfi.c +++ b/gas/dw2gencfi.c @@ -25,6 +25,15 @@ #ifdef TARGET_USE_CFIPOP +/* By default, use difference expressions if DIFF_EXPR_OK is defined. */ +#ifndef CFI_DIFF_EXPR_OK +# ifdef DIFF_EXPR_OK +# define CFI_DIFF_EXPR_OK 1 +# else +# define CFI_DIFF_EXPR_OK 0 +# endif +#endif + /* We re-use DWARF2_LINE_MIN_INSN_LENGTH for the code alignment field of the CIE. Default to 1 if not otherwise specified. */ #ifndef DWARF2_LINE_MIN_INSN_LENGTH @@ -655,7 +664,7 @@ dot_cfi_personality (int ignored ATTRIBUTE_UNUSED) if ((encoding & 0xff) != encoding || ((encoding & 0x70) != 0 -#if defined DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr +#if CFI_DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr && (encoding & 0x70) != DW_EH_PE_pcrel #endif ) @@ -725,7 +734,7 @@ dot_cfi_lsda (int ignored ATTRIBUTE_UNUSED) if ((encoding & 0xff) != encoding || ((encoding & 0x70) != 0 -#if defined DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr +#if CFI_DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr && (encoding & 0x70) != DW_EH_PE_pcrel #endif ) @@ -1092,7 +1101,7 @@ output_cie (struct cie_entry *cie) exp = cie->personality; if ((cie->per_encoding & 0x70) == DW_EH_PE_pcrel) { -#ifdef DIFF_EXPR_OK +#if CFI_DIFF_EXPR_OK exp.X_op = O_subtract; exp.X_op_symbol = symbol_temp_new_now (); emit_expr (&exp, size); @@ -1122,7 +1131,7 @@ output_cie (struct cie_entry *cie) default: abort (); } -#if defined DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr +#if CFI_DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr enc |= DW_EH_PE_pcrel; #endif out_one (enc); @@ -1157,7 +1166,7 @@ output_fde (struct fde_entry *fde, struct cie_entry *cie, exp.X_op_symbol = cie->start_address; emit_expr (&exp, 4); /* CIE offset. */ -#ifdef DIFF_EXPR_OK +#if CFI_DIFF_EXPR_OK exp.X_add_symbol = fde->start_address; exp.X_op_symbol = symbol_temp_new_now (); emit_expr (&exp, DWARF2_FDE_RELOC_SIZE); /* Code offset. */ @@ -1185,7 +1194,7 @@ output_fde (struct fde_entry *fde, struct cie_entry *cie, exp = fde->lsda; if ((fde->lsda_encoding & 0x70) == DW_EH_PE_pcrel) { -#ifdef DIFF_EXPR_OK +#if CFI_DIFF_EXPR_OK exp.X_op = O_subtract; exp.X_op_symbol = symbol_temp_new_now (); emit_expr (&exp, augmentation_size); -- cgit v1.2.1