Commit c3b07ec2 by Geoffrey Keating Committed by Geoffrey Keating

Index: gcc/ChangeLog

2007-10-09  Geoffrey Keating  <geoffk@apple.com>

	* dwarf2out.c (output_call_frame_info): FDEs are always emitted
	if flag_exceptions is not set.
	* config/darwin.c (darwin_emit_unwind_label): Rewrite to use
	assemble_name rather than incorrectly emulating it.

Index: gcc/testsuite/ChangeLog
2007-10-09  Geoffrey Keating  <geoffk@apple.com>

	* gcc.dg/unwind-1.c: New.

From-SVN: r129187
parent 32e26ece
2007-10-09 Geoffrey Keating <geoffk@apple.com> 2007-10-09 Geoffrey Keating <geoffk@apple.com>
* dwarf2out.c (output_call_frame_info): FDEs are always emitted
if flag_exceptions is not set.
* config/darwin.c (darwin_emit_unwind_label): Rewrite to use
assemble_name rather than incorrectly emulating it.
* doc/extend.texi (Deprecated Features): Mention that <? and >? and * doc/extend.texi (Deprecated Features): Mention that <? and >? and
friends are removed from G++. friends are removed from G++.
...@@ -1465,12 +1465,6 @@ darwin_handle_weak_import_attribute (tree *node, tree name, ...@@ -1465,12 +1465,6 @@ darwin_handle_weak_import_attribute (tree *node, tree name,
return NULL_TREE; return NULL_TREE;
} }
static void
no_dead_strip (FILE *file, const char *lab)
{
fprintf (file, ".no_dead_strip %s\n", lab);
}
/* Emit a label for an FDE, making it global and/or weak if appropriate. /* Emit a label for an FDE, making it global and/or weak if appropriate.
The third parameter is nonzero if this is for exception handling. The third parameter is nonzero if this is for exception handling.
The fourth parameter is nonzero if this is just a placeholder for an The fourth parameter is nonzero if this is just a placeholder for an
...@@ -1479,46 +1473,44 @@ no_dead_strip (FILE *file, const char *lab) ...@@ -1479,46 +1473,44 @@ no_dead_strip (FILE *file, const char *lab)
void void
darwin_emit_unwind_label (FILE *file, tree decl, int for_eh, int empty) darwin_emit_unwind_label (FILE *file, tree decl, int for_eh, int empty)
{ {
const char *base;
char *lab; char *lab;
bool need_quotes;
if (DECL_ASSEMBLER_NAME_SET_P (decl))
base = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
else
base = IDENTIFIER_POINTER (DECL_NAME (decl));
base = targetm.strip_name_encoding (base);
need_quotes = name_needs_quotes (base);
if (! for_eh) if (! for_eh)
return; return;
lab = concat (need_quotes ? "\"" : "", user_label_prefix, base, ".eh", lab = concat (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), ".eh", NULL);
need_quotes ? "\"" : "", NULL);
if (TREE_PUBLIC (decl)) if (TREE_PUBLIC (decl))
fprintf (file, "\t%s %s\n", {
(DECL_VISIBILITY (decl) != VISIBILITY_HIDDEN targetm.asm_out.globalize_label (file, lab);
? ".globl" if (DECL_VISIBILITY (decl) == VISIBILITY_HIDDEN)
: ".private_extern"), {
lab); fputs ("\t.private_extern ", file);
assemble_name (file, lab);
fputc ('\n', file);
}
}
if (DECL_WEAK (decl)) if (DECL_WEAK (decl))
fprintf (file, "\t.weak_definition %s\n", lab); {
fputs ("\t.weak_definition ", file);
assemble_name (file, lab);
fputc ('\n', file);
}
assemble_name (file, lab);
if (empty) if (empty)
{ {
fprintf (file, "%s = 0\n", lab); fputs (" = 0\n", file);
/* Mark the absolute .eh and .eh1 style labels as needed to /* Mark the absolute .eh and .eh1 style labels as needed to
ensure that we don't dead code strip them and keep such ensure that we don't dead code strip them and keep such
labels from another instantiation point until we can fix this labels from another instantiation point until we can fix this
properly with group comdat support. */ properly with group comdat support. */
no_dead_strip (file, lab); darwin_mark_decl_preserved (lab);
} }
else else
fprintf (file, "%s:\n", lab); fputs (":\n", file);
free (lab); free (lab);
} }
......
...@@ -2223,6 +2223,7 @@ output_call_frame_info (int for_eh) ...@@ -2223,6 +2223,7 @@ output_call_frame_info (int for_eh)
specialization doesn't. */ specialization doesn't. */
if (TARGET_USES_WEAK_UNWIND_INFO if (TARGET_USES_WEAK_UNWIND_INFO
&& ! flag_asynchronous_unwind_tables && ! flag_asynchronous_unwind_tables
&& flag_exceptions
&& for_eh) && for_eh)
for (i = 0; i < fde_table_in_use; i++) for (i = 0; i < fde_table_in_use; i++)
if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls) if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
......
2007-10-09 Geoffrey Keating <geoffk@apple.com>
* gcc.dg/unwind-1.c: New.
2007-10-09 Thomas Koenig <tkoenig@gcc.gnu.org> 2007-10-09 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/33683 PR libfortran/33683
/* { dg-do assemble } */
/* { dg-options "-fleading-underscore -funwind-tables" } */
void func(void) __asm("_func");
void _func(int x) {}
void func(void) {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment