* coverage.c (coverage_checksum_string): Update comment.
	* dwarf2out.c (switch_to_eh_frame_section): Update for removal
	of get_file_function_name.
	* cgraphunit.c (cgraph_build_static_cdtor): Update for rename
	of get_file_function_name_long.
	* tree.c (get_file_function_name): Rename from
	get_file_function_name_long; improve comment; handle 'I' and 'D'
	specially when the target has ctor/dtor support; remove special
	handling for 'F'.
	(get_file_function_name): Remove.
	* tree.h (get_file_function_name): Rename from
        get_file_function_name_long.
	(get_file_function_name): Remove prototype.
In gcc/cp/:
	* name-lookup.c (get_anonymous_namespace_name): New.
	(push_namespace_with_attribs): Use get_anonymous_namespace_name.
	* decl2.c (start_objects): Update for rename of
	get_file_function_name_long.
In gcc/fortran/:
	* trans-decl.c (gfc_generate_constructors): Update for removal
	of get_file_function_name.

From-SVN: r118360
This commit is contained in:
Geoffrey Keating 2006-11-01 05:06:12 +00:00 committed by Geoffrey Keating
parent 4d04fa0539
commit 5880f14fe8
11 changed files with 82 additions and 51 deletions

View File

@ -1,3 +1,19 @@
2006-10-31 Geoffrey Keating <geoffk@apple.com>
* coverage.c (coverage_checksum_string): Update comment.
* dwarf2out.c (switch_to_eh_frame_section): Update for removal
of get_file_function_name.
* cgraphunit.c (cgraph_build_static_cdtor): Update for rename
of get_file_function_name_long.
* tree.c (get_file_function_name): Rename from
get_file_function_name_long; improve comment; handle 'I' and 'D'
specially when the target has ctor/dtor support; remove special
handling for 'F'.
(get_file_function_name): Remove.
* tree.h (get_file_function_name): Rename from
get_file_function_name_long.
(get_file_function_name): Remove prototype.
2006-10-31 Geoffrey Keating <geoffk@apple.com>
* config/i386/darwin.h (PREFERRED_DEBUGGING_TYPE): Remove.

View File

@ -1675,7 +1675,7 @@ cgraph_build_static_cdtor (char which, tree body, int priority)
tree decl, name, resdecl;
sprintf (which_buf, "%c_%d", which, counter++);
name = get_file_function_name_long (which_buf);
name = get_file_function_name (which_buf);
decl = build_decl (FUNCTION_DECL, name,
build_function_type (void_type_node, void_list_node));

View File

@ -433,7 +433,7 @@ coverage_checksum_string (unsigned chksum, const char *string)
char *dup = NULL;
/* Look for everything that looks if it were produced by
get_file_function_name_long and zero out the second part
get_file_function_name and zero out the second part
that may result from flag_random_seed. This is not critical
as the checksums are used only for sanity checking. */
for (i = 0; string[i]; i++)

View File

@ -1,3 +1,10 @@
2006-10-31 Geoffrey Keating <geoffk@apple.com>
* name-lookup.c (get_anonymous_namespace_name): New.
(push_namespace_with_attribs): Use get_anonymous_namespace_name.
* decl2.c (start_objects): Update for rename of
get_file_function_name_long.
2006-10-30 Dirk Mueller <dmueller@suse.de>
PR c++/28704

View File

@ -2324,7 +2324,7 @@ start_objects (int method_type, int initp)
sprintf (type, "%c", method_type);
fndecl = build_lang_decl (FUNCTION_DECL,
get_file_function_name_long (type),
get_file_function_name (type),
build_function_type (void_type_node,
void_list_node));
start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);

View File

@ -61,6 +61,24 @@ tree global_namespace;
unit. */
static GTY(()) tree anonymous_namespace_name;
/* Initialise anonymous_namespace_name if necessary, and return it. */
static tree
get_anonymous_namespace_name(void)
{
if (!anonymous_namespace_name)
{
/* The anonymous namespace has to have a unique name
if typeinfo objects are being compared by name. */
if (! flag_weak || ! SUPPORTS_ONE_ONLY)
anonymous_namespace_name = get_file_function_name ("N");
else
/* The demangler expects anonymous namespaces to be called
something starting with '_GLOBAL__N_'. */
anonymous_namespace_name = get_identifier ("_GLOBAL__N_1");
}
return anonymous_namespace_name;
}
/* Compute the chain index of a binding_entry given the HASH value of its
name and the total COUNT of chains. COUNT is assumed to be a power
@ -3011,11 +3029,7 @@ push_namespace_with_attribs (tree name, tree attributes)
if (anon)
{
/* The name of anonymous namespace is unique for the translation
unit. */
if (!anonymous_namespace_name)
anonymous_namespace_name = get_file_function_name ('N');
name = anonymous_namespace_name;
name = get_anonymous_namespace_name();
d = IDENTIFIER_NAMESPACE_VALUE (name);
if (d)
/* Reopening anonymous namespace. */

View File

@ -2030,7 +2030,7 @@ switch_to_eh_frame_section (void)
/* We have no special eh_frame section. Put the information in
the data section and emit special labels to guide collect2. */
switch_to_section (data_section);
label = get_file_function_name ('F');
label = get_file_function_name ("F");
ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
targetm.asm_out.globalize_label (asm_out_file,
IDENTIFIER_POINTER (label));

View File

@ -1,3 +1,8 @@
2006-10-31 Geoffrey Keating <geoffk@apple.com>
* trans-decl.c (gfc_generate_constructors): Update for removal
of get_file_function_name.
2006-11-01 Bernhard Fischer <aldot@gcc.gnu.org>
PR fortran/29537

View File

@ -3299,7 +3299,7 @@ gfc_generate_constructors (void)
if (gfc_static_ctors == NULL_TREE)
return;
fnname = get_file_function_name ('I');
fnname = get_file_function_name ("I");
type = build_function_type (void_type_node,
gfc_chainon_list (NULL_TREE, void_type_node));

View File

@ -6042,41 +6042,48 @@ clean_symbol_name (char *p)
*p = '_';
}
/* Generate a name for a function unique to this translation unit.
/* Generate a name for a special-purpose function function.
The generated name may need to be unique across the whole link.
TYPE is some string to identify the purpose of this function to the
linker or collect2. */
linker or collect2; it must start with an uppercase letter,
one of:
I - for constructors
D - for destructors
N - for C++ anonymous namespaces
F - for DWARF unwind frame information. */
tree
get_file_function_name_long (const char *type)
get_file_function_name (const char *type)
{
char *buf;
const char *p;
char *q;
/* If we already have a name we know to be unique, just use that. */
if (first_global_object_name)
p = first_global_object_name;
/* If the target is handling the constructors/destructors, they
will be local to this file and the name is only necessary for
debugging purposes. */
else if ((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
{
p = first_global_object_name;
/* For type 'F', the generated name must be unique not only to this
translation unit but also to any given link. Since global names
can be overloaded, we concatenate the first global object name
with a string derived from the file name of this object. */
if (!strcmp (type, "F"))
{
const char *file = main_input_filename;
if (! file)
file = input_filename;
q = alloca (strlen (p) + 10);
sprintf (q, "%s_%08X", p, crc32_string (0, file));
p = q;
}
const char *file = main_input_filename;
if (! file)
file = input_filename;
/* Just use the file's basename, because the full pathname
might be quite long. */
p = strrchr (file, '/');
if (p)
p++;
else
p = file;
p = q = ASTRDUP (p);
clean_symbol_name (q);
}
else
{
/* We don't have anything that we know to be unique to this translation
/* Otherwise, the name must be unique across the entire link.
We don't have anything that we know to be unique to this translation
unit, so use what we do have and throw in some randomness. */
unsigned len;
const char *name = weak_global_object_name;
@ -6108,20 +6115,6 @@ get_file_function_name_long (const char *type)
return get_identifier (buf);
}
/* If KIND=='I', return a suitable global initializer (constructor) name.
If KIND=='D', return a suitable global clean-up (destructor) name. */
tree
get_file_function_name (int kind)
{
char p[2];
p[0] = kind;
p[1] = 0;
return get_file_function_name_long (p);
}
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)

View File

@ -4150,7 +4150,7 @@ extern GTY(()) const char * current_function_func_begin_label;
/* In tree.c */
extern unsigned crc32_string (unsigned, const char *);
extern void clean_symbol_name (char *);
extern tree get_file_function_name_long (const char *);
extern tree get_file_function_name (const char *);
extern tree get_callee_fndecl (tree);
extern void change_decl_assembler_name (tree, tree);
extern int type_num_arguments (tree);
@ -4488,10 +4488,6 @@ extern void gimplify_function_tree (tree);
extern const char *get_name (tree);
extern tree unshare_expr (tree);
extern void sort_case_labels (tree);
/* If KIND=='I', return a suitable global initializer (constructor) name.
If KIND=='D', return a suitable global clean-up (destructor) name. */
extern tree get_file_function_name (int);
/* Interface of the DWARF2 unwind info support. */