Commit 3ce9c824 by Ian Lance Taylor Committed by Ian Lance Taylor

re PR debug/9963 ([CygWin] g++ -gcoff report "C_EFCN symbol out of scope")

	PR debug/9963
	* config/i386/cygming.h (ASM_OUTPUT_EXTERNAL): Pass DECL to
	i386_pe_record_external_function.
	(i386_pe_record_external_function): Update declaration.
	* config/i386/winnt.c (struct extern_list): Add decl field.
	(i386_pe_record_external_function): Add decl parameter.
	(i386_pe_file_end): Check TREE_ASM_WRITTEN on decl, not
	identifier.
	* config/i386/i386-protos.h (i386_pe_record_external_function):
	Update declaration.

From-SVN: r97602
parent b683f9fe
2005-04-05 Ian Lance Taylor <ian@airs.com>
PR debug/9963
* config/i386/cygming.h (ASM_OUTPUT_EXTERNAL): Pass DECL to
i386_pe_record_external_function.
(i386_pe_record_external_function): Update declaration.
* config/i386/winnt.c (struct extern_list): Add decl field.
(i386_pe_record_external_function): Add decl parameter.
(i386_pe_file_end): Check TREE_ASM_WRITTEN on decl, not
identifier.
* config/i386/i386-protos.h (i386_pe_record_external_function):
Update declaration.
2005-04-05 Kazu Hirata <kazu@cs.umass.edu> 2005-04-05 Kazu Hirata <kazu@cs.umass.edu>
* config/m68k/m68k-protos.h: Add a prototype for * config/m68k/m68k-protos.h: Add a prototype for
......
...@@ -297,7 +297,7 @@ extern void i386_pe_unique_section (TREE, int); ...@@ -297,7 +297,7 @@ extern void i386_pe_unique_section (TREE, int);
do \ do \
{ \ { \
if (TREE_CODE (DECL) == FUNCTION_DECL) \ if (TREE_CODE (DECL) == FUNCTION_DECL) \
i386_pe_record_external_function (NAME); \ i386_pe_record_external_function ((DECL), (NAME)); \
} \ } \
while (0) while (0)
...@@ -345,7 +345,7 @@ extern void i386_pe_unique_section (TREE, int); ...@@ -345,7 +345,7 @@ extern void i386_pe_unique_section (TREE, int);
/* External function declarations. */ /* External function declarations. */
extern void i386_pe_record_external_function (const char *); extern void i386_pe_record_external_function (tree, const char *);
extern void i386_pe_declare_function_type (FILE *, const char *, int); extern void i386_pe_declare_function_type (FILE *, const char *, int);
extern void i386_pe_record_exported_symbol (const char *, int); extern void i386_pe_record_exported_symbol (const char *, int);
extern void i386_pe_file_end (void); extern void i386_pe_file_end (void);
......
...@@ -234,7 +234,7 @@ extern int i386_pe_dllexport_name_p (const char *); ...@@ -234,7 +234,7 @@ extern int i386_pe_dllexport_name_p (const char *);
extern int i386_pe_dllimport_name_p (const char *); extern int i386_pe_dllimport_name_p (const char *);
extern void i386_pe_unique_section (tree, int); extern void i386_pe_unique_section (tree, int);
extern void i386_pe_declare_function_type (FILE *, const char *, int); extern void i386_pe_declare_function_type (FILE *, const char *, int);
extern void i386_pe_record_external_function (const char *); extern void i386_pe_record_external_function (tree, const char *);
extern void i386_pe_record_exported_symbol (const char *, int); extern void i386_pe_record_exported_symbol (const char *, int);
extern void i386_pe_asm_file_end (FILE *); extern void i386_pe_asm_file_end (FILE *);
extern void i386_pe_encode_section_info (tree, rtx, int); extern void i386_pe_encode_section_info (tree, rtx, int);
......
...@@ -719,6 +719,7 @@ i386_pe_declare_function_type (FILE *file, const char *name, int public) ...@@ -719,6 +719,7 @@ i386_pe_declare_function_type (FILE *file, const char *name, int public)
struct extern_list GTY(()) struct extern_list GTY(())
{ {
struct extern_list *next; struct extern_list *next;
tree decl;
const char *name; const char *name;
}; };
...@@ -731,12 +732,13 @@ static GTY(()) struct extern_list *extern_head; ...@@ -731,12 +732,13 @@ static GTY(()) struct extern_list *extern_head;
for it then. */ for it then. */
void void
i386_pe_record_external_function (const char *name) i386_pe_record_external_function (tree decl, const char *name)
{ {
struct extern_list *p; struct extern_list *p;
p = (struct extern_list *) ggc_alloc (sizeof *p); p = (struct extern_list *) ggc_alloc (sizeof *p);
p->next = extern_head; p->next = extern_head;
p->decl = decl;
p->name = name; p->name = name;
extern_head = p; extern_head = p;
} }
...@@ -785,10 +787,11 @@ i386_pe_file_end (void) ...@@ -785,10 +787,11 @@ i386_pe_file_end (void)
{ {
tree decl; tree decl;
decl = get_identifier (p->name); decl = p->decl;
/* Positively ensure only one declaration for any given symbol. */ /* Positively ensure only one declaration for any given symbol. */
if (! TREE_ASM_WRITTEN (decl) && TREE_SYMBOL_REFERENCED (decl)) if (! TREE_ASM_WRITTEN (decl)
&& TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
{ {
TREE_ASM_WRITTEN (decl) = 1; TREE_ASM_WRITTEN (decl) = 1;
i386_pe_declare_function_type (asm_out_file, p->name, i386_pe_declare_function_type (asm_out_file, p->name,
......
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