This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Allow targets to override diff expression generation in w2gencfi.c


> On Sat, Aug 30, 2008 at 02:10:22PM -0400, John David Anglin wrote:
> > 	* 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.
> 
> OK, except..

Fixed the typos and retested on hppa64-hp-hpux11.11.  Committed
as follows.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)

2008-09-07  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>

	* 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.

Index: dw2gencfi.c
===================================================================
RCS file: /cvs/src/src/gas/dw2gencfi.c,v
retrieving revision 1.35
diff -u -3 -p -r1.35 dw2gencfi.c
--- dw2gencfi.c	21 Aug 2008 19:49:22 -0000	1.35
+++ dw2gencfi.c	1 Sep 2008 01:18:34 -0000
@@ -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 ATTRIBU
 
   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_UNUS
 
   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, struc
   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, struc
       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);
Index: config/tc-hppa.h
===================================================================
RCS file: /cvs/src/src/gas/config/tc-hppa.h,v
retrieving revision 1.38
diff -u -3 -p -r1.38 tc-hppa.h
--- config/tc-hppa.h	30 Aug 2008 15:52:22 -0000	1.38
+++ config/tc-hppa.h	1 Sep 2008 01:18:34 -0000
@@ -222,6 +232,10 @@ extern int hppa_regname_to_dw2regnum (ch
 /* 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 */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]