This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
fix bug in patch for 13956
- From: Zack Weinberg <zack at codesourcery dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 04 Aug 2004 00:22:51 -0700
- Subject: fix bug in patch for 13956
The patch I just applied to fix PR 13956 foolishly assumed that
dbxout_function_end was always called. It turns out only to be
called when the target configuration thinks it's appropriate, and when
-gstabs+. Which is the default on Darwin for GCC 3.5, but not 3.4 - I
caught the problem while trying to backport the patch.
Fixed by moving that check into the middle of dbxout_function_end, so
that we now always get the Lscope<n> symbol, but the N_FUN stab is
still only emitted when it should be.
zw
* dbxout.c (dbxout_function_decl): Always call dbxout_function_end.
(dbxout_function_end): Return after emitting the "Lscope" symbol
under the same conditions that this function formerly wasn't called.
Add explanatory comments.
===================================================================
Index: dbxout.c
--- dbxout.c 4 Aug 2004 06:32:01 -0000 1.194
+++ dbxout.c 4 Aug 2004 07:21:03 -0000
@@ -449,6 +449,8 @@ dbxout_function_end (void)
{
char lscope_label_name[100];
+ /* The Lscope label must be emitted even if we aren't doing anything
+ else; dbxout_block needs it. */
function_section (current_function_decl);
/* Convert Ltext into the appropriate format for local labels in case
@@ -458,6 +460,16 @@ dbxout_function_end (void)
targetm.asm_out.internal_label (asmfile, "Lscope", scope_labelno);
scope_labelno++;
+ /* The N_FUN tag at the end of the function is a GNU extension,
+ which may be undesirable, and is unnecessary if we do not have
+ named sections. */
+ if (!use_gnu_debug_info_extensions
+#if defined(NO_DBX_FUNCTION_END)
+ || NO_DBX_FUNCTION_END
+#endif
+ || !targetm.have_named_sections)
+ return;
+
/* By convention, GCC will mark the end of a function with an N_FUN
symbol and an empty string. */
#ifdef DBX_OUTPUT_NFUN
@@ -792,12 +804,7 @@ dbxout_function_decl (tree decl)
#ifdef DBX_OUTPUT_FUNCTION_END
DBX_OUTPUT_FUNCTION_END (asmfile, decl);
#endif
- if (use_gnu_debug_info_extensions
-#if defined(NO_DBX_FUNCTION_END)
- && ! NO_DBX_FUNCTION_END
-#endif
- && targetm.have_named_sections)
- dbxout_function_end ();
+ dbxout_function_end ();
}
#endif /* DBX_DEBUGGING_INFO */