patch: fix unwinder to map dwarf regs to unwinder columns

Aldy Hernandez aldyh@redhat.com
Tue Mar 11 21:45:00 GMT 2003


>>         info_ptr->spe_64bit_regs_used = insn_chain_scanned;
>
> Oh, I didn't notice before, but your code for insn_chain_scanned
> here is wrong.  Using a static variable means that you only scan
> the first function in a translation unit.  You need to put this
> in struct machine_function instead.

You mean like this?

2003-03-11  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.c (rs6000_stack_info): Remove
	insn_chain_scanned.  Use insn_chain_scanned_p in machine_function.

	* config/rs6000/rs6000.h (machine_function): Add insn_chain_scanned_p.

Index: config/rs6000/rs6000.c
===================================================================
RCS file: /cvs/uberbaum/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.437
diff -c -p -r1.437 rs6000.c
*** config/rs6000/rs6000.c	11 Mar 2003 21:26:12 -0000	1.437
--- config/rs6000/rs6000.c	11 Mar 2003 21:34:00 -0000
*************** rs6000_stack_info ()
*** 9169,9175 ****
     enum rs6000_abi abi;
     int ehrd_size;
     int total_raw_size;
-   static int insn_chain_scanned = -1;

     /* Zero all fields portably.  */
     info = zero_info;
--- 9169,9174 ----
*************** rs6000_stack_info ()
*** 9177,9185 ****
     if (TARGET_SPE)
       {
         /* Cache value so we don't rescan instruction chain over and 
over.  */
!       if (insn_chain_scanned < 0)
! 	insn_chain_scanned = (int) spe_func_has_64bit_regs_p ();
!       info_ptr->spe_64bit_regs_used = insn_chain_scanned;
       }

     /* Select which calling sequence.  */
--- 9176,9186 ----
     if (TARGET_SPE)
       {
         /* Cache value so we don't rescan instruction chain over and 
over.  */
!       if (cfun->machine->insn_chain_scanned_p == 0)
! 	{
! 	  cfun->machine->insn_chain_scanned_p = 1;
! 	  info_ptr->spe_64bit_regs_used = (int) spe_func_has_64bit_regs_p ();
! 	}
       }

     /* Select which calling sequence.  */
Index: config/rs6000/rs6000.h
===================================================================
RCS file: /cvs/uberbaum/gcc/config/rs6000/rs6000.h,v
retrieving revision 1.255
diff -c -p -r1.255 rs6000.h
*** config/rs6000/rs6000.h	11 Mar 2003 20:40:54 -0000	1.255
--- config/rs6000/rs6000.h	11 Mar 2003 21:34:10 -0000
*************** typedef struct machine_function GTY(())
*** 1649,1654 ****
--- 1649,1656 ----
     int sysv_varargs_p;
     /* Flags if __builtin_return_address (n) with n >= 1 was used.  */
     int ra_needs_full_frame;
+   /* Whether the instruction chain has been scanned already.  */
+   int insn_chain_scanned_p;
   } machine_function;

   /* Define a data type for recording info about an argument list



More information about the Gcc-patches mailing list