Debugging data on Alpha

Richard Henderson rth@redhat.com
Sat Dec 30 10:55:00 GMT 2000


On Fri, Dec 29, 2000 at 03:04:20PM -0500, Richard Kenner wrote:
> Missing just variables from nested scopes sounds much more like a
> problem in stabs generation to me, and David's comment adds weight to that.

I think you're right.

By inspection, there were no LBRAC/RBRAC pairs being output.
So we'd get labels for eg "$LBB554" but nothing would use them.

This appears to have been broken here

2000-03-01  Martin von Loewis  <loewis@informatik.hu-berlin.de>

        * dbxout.c (dbxout_symbol): Change return type to int.
        (dbxout_symbol_location, dbxout_syms): Likewise.
        (dbxout_block): Don't emit LBRAC/RBRAC pairs for blocks without
        any locals. Use current_function_func_begin_label if set.

with some backwards logic on when blocks should be emitted.
Give the following a try.


r~


	* dbxout.c (dbxout_block): Invert logic on eliding LBRAC/RBRAC.
	Initialize variables properly for DBX_LBRAC_FIRST.

Index: dbxout.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/dbxout.c,v
retrieving revision 1.69
diff -c -p -d -r1.69 dbxout.c
*** dbxout.c	2000/12/02 00:18:46	1.69
--- dbxout.c	2000/12/30 18:48:20
*************** dbxout_block (block, depth, args)
*** 2641,2647 ****
       tree args;
  {
    int blocknum = -1;
-   int ignored;
  
  #if DBX_BLOCKS_FUNCTION_RELATIVE
    const char *begin_label; 
--- 2641,2646 ----
*************** dbxout_block (block, depth, args)
*** 2656,2667 ****
        /* Ignore blocks never expanded or otherwise marked as real.  */
        if (TREE_USED (block) && TREE_ASM_WRITTEN (block))
  	{
! #ifndef DBX_LBRAC_FIRST
  	  /* In dbx format, the syms of a block come before the N_LBRAC.
  	     If nothing is output, we don't need the N_LBRAC, either. */
! 	  ignored = 1;
  	  if (debug_info_level != DINFO_LEVEL_TERSE || depth == 0)
! 	    ignored = dbxout_syms (BLOCK_VARS (block));
  	  if (args)
  	    dbxout_reg_parms (args);
  #endif
--- 2655,2670 ----
        /* Ignore blocks never expanded or otherwise marked as real.  */
        if (TREE_USED (block) && TREE_ASM_WRITTEN (block))
  	{
! 	  int did_output;
! 
! #ifdef DBX_LBRAC_FIRST
! 	  did_output = 1;
! #else
  	  /* In dbx format, the syms of a block come before the N_LBRAC.
  	     If nothing is output, we don't need the N_LBRAC, either. */
! 	  did_output = 0;
  	  if (debug_info_level != DINFO_LEVEL_TERSE || depth == 0)
! 	    did_output = dbxout_syms (BLOCK_VARS (block));
  	  if (args)
  	    dbxout_reg_parms (args);
  #endif
*************** dbxout_block (block, depth, args)
*** 2670,2676 ****
  	     the block.  Use the block's tree-walk order to generate
  	     the assembler symbols LBBn and LBEn
  	     that final will define around the code in this block.  */
! 	  if (depth > 0 && !ignored)
  	    {
  	      char buf[20];
  	      blocknum = BLOCK_NUMBER (block);
--- 2673,2679 ----
  	     the block.  Use the block's tree-walk order to generate
  	     the assembler symbols LBBn and LBEn
  	     that final will define around the code in this block.  */
! 	  if (depth > 0 && did_output)
  	    {
  	      char buf[20];
  	      blocknum = BLOCK_NUMBER (block);
*************** dbxout_block (block, depth, args)
*** 2720,2726 ****
  	  dbxout_block (BLOCK_SUBBLOCKS (block), depth + 1, NULL_TREE);
  
  	  /* Refer to the marker for the end of the block.  */
! 	  if (depth > 0 && !ignored)
  	    {
  	      char buf[20];
  	      ASM_GENERATE_INTERNAL_LABEL (buf, "LBE", blocknum);
--- 2723,2729 ----
  	  dbxout_block (BLOCK_SUBBLOCKS (block), depth + 1, NULL_TREE);
  
  	  /* Refer to the marker for the end of the block.  */
! 	  if (depth > 0 && did_output)
  	    {
  	      char buf[20];
  	      ASM_GENERATE_INTERNAL_LABEL (buf, "LBE", blocknum);


More information about the Gcc-patches mailing list