re PR c++/13596 (value of __cplusplus)

PR 13596
	* dbxout.c (dbx_output_lbrac, dbx_output_rbrac): New
	functions, broken out of dbxout_block.
	(dbxout_block): The block at depth 0 should get LBRAC/RBRAC
	stabs too, if it contains symbols.  Use the begin_label and
	the Lscope label (emitted by dbxout_function_end) for the
	range of this block.

From-SVN: r85544
This commit is contained in:
Zack Weinberg 2004-08-04 06:32:01 +00:00 committed by Zack Weinberg
parent 73a8adb62e
commit 7e2e8179ee
2 changed files with 76 additions and 34 deletions

View File

@ -1,3 +1,13 @@
2004-08-03 Zack Weinberg <zack@codesourcery.com>
PR 13596
* dbxout.c (dbx_output_lbrac, dbx_output_rbrac): New
functions, broken out of dbxout_block.
(dbxout_block): The block at depth 0 should get LBRAC/RBRAC
stabs too, if it contains symbols. Use the begin_label and
the Lscope label (emitted by dbxout_function_end) for the
range of this block.
2004-08-03 Nathanael Nerode <neroden@gcc.gnu.org>
* doc/install.texi: Update autoconf version requirements.

View File

@ -3089,6 +3089,46 @@ dbxout_args (tree args)
}
}
/* Subroutine of dbxout_block. Emit an N_LBRAC stab referencing LABEL.
BEGIN_LABEL is the name of the beginning of the function, which may
be required. */
static void
dbx_output_lbrac (const char *label,
const char *begin_label ATTRIBUTE_UNUSED)
{
#ifdef DBX_OUTPUT_LBRAC
DBX_OUTPUT_LBRAC (asmfile, label);
#else
fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_LBRAC);
assemble_name (asmfile, label);
#if DBX_BLOCKS_FUNCTION_RELATIVE
putc ('-', asmfile);
assemble_name (asmfile, begin_label);
#endif
fprintf (asmfile, "\n");
#endif
}
/* Subroutine of dbxout_block. Emit an N_RBRAC stab referencing LABEL.
BEGIN_LABEL is the name of the beginning of the function, which may
be required. */
static void
dbx_output_rbrac (const char *label,
const char *begin_label ATTRIBUTE_UNUSED)
{
#ifdef DBX_OUTPUT_RBRAC
DBX_OUTPUT_RBRAC (asmfile, label);
#else
fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_RBRAC);
assemble_name (asmfile, label);
#if DBX_BLOCKS_FUNCTION_RELATIVE
putc ('-', asmfile);
assemble_name (asmfile, begin_label);
#endif
fprintf (asmfile, "\n");
#endif
}
/* Output everything about a symbol block (a BLOCK node
that represents a scope level),
including recursive output of contained blocks.
@ -3109,15 +3149,11 @@ dbxout_args (tree args)
static void
dbxout_block (tree block, int depth, tree args)
{
int blocknum = -1;
#if DBX_BLOCKS_FUNCTION_RELATIVE
const char *begin_label;
if (current_function_func_begin_label != NULL_TREE)
begin_label = IDENTIFIER_POINTER (current_function_func_begin_label);
else
begin_label = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
#endif
while (block)
{
@ -3125,6 +3161,7 @@ dbxout_block (tree block, int depth, tree args)
if (TREE_USED (block) && TREE_ASM_WRITTEN (block))
{
int did_output;
int blocknum = BLOCK_NUMBER (block);
/* 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. */
@ -3138,11 +3175,20 @@ dbxout_block (tree block, int depth, tree args)
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)
if (did_output)
{
char buf[20];
blocknum = BLOCK_NUMBER (block);
ASM_GENERATE_INTERNAL_LABEL (buf, "LBB", blocknum);
const char *scope_start;
if (depth == 0)
/* The outermost block doesn't get LBB labels; use
the function symbol. */
scope_start = begin_label;
else
{
ASM_GENERATE_INTERNAL_LABEL (buf, "LBB", blocknum);
scope_start = buf;
}
if (BLOCK_HANDLER_BLOCK (block))
{
@ -3152,44 +3198,30 @@ dbxout_block (tree block, int depth, tree args)
{
fprintf (asmfile, "%s\"%s:C1\",%d,0,0,", ASM_STABS_OP,
IDENTIFIER_POINTER (DECL_NAME (decl)), N_CATCH);
assemble_name (asmfile, buf);
assemble_name (asmfile, scope_start);
fprintf (asmfile, "\n");
decl = TREE_CHAIN (decl);
}
}
#ifdef DBX_OUTPUT_LBRAC
DBX_OUTPUT_LBRAC (asmfile, buf);
#else
fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_LBRAC);
assemble_name (asmfile, buf);
#if DBX_BLOCKS_FUNCTION_RELATIVE
putc ('-', asmfile);
assemble_name (asmfile, begin_label);
#endif
fprintf (asmfile, "\n");
#endif
dbx_output_lbrac (scope_start, begin_label);
}
/* Output the subblocks. */
dbxout_block (BLOCK_SUBBLOCKS (block), depth + 1, NULL_TREE);
/* Refer to the marker for the end of the block. */
if (depth > 0 && did_output)
if (did_output)
{
char buf[20];
ASM_GENERATE_INTERNAL_LABEL (buf, "LBE", blocknum);
#ifdef DBX_OUTPUT_RBRAC
DBX_OUTPUT_RBRAC (asmfile, buf);
#else
fprintf (asmfile, "%s%d,0,0,", ASM_STABN_OP, N_RBRAC);
assemble_name (asmfile, buf);
#if DBX_BLOCKS_FUNCTION_RELATIVE
putc ('-', asmfile);
assemble_name (asmfile, begin_label);
#endif
fprintf (asmfile, "\n");
#endif
char buf[100];
if (depth == 0)
/* The outermost block doesn't get LBE labels;
use the "scope" label which will be emitted
by dbxout_function_end. */
ASM_GENERATE_INTERNAL_LABEL (buf, "Lscope", scope_labelno);
else
ASM_GENERATE_INTERNAL_LABEL (buf, "LBE", blocknum);
dbx_output_rbrac (buf, begin_label);
}
}
block = BLOCK_CHAIN (block);