Commit 478a1f5e by John David Anglin Committed by John David Anglin

elf.h, som.h (ASM_OUTPUT_EXTERNAL): Use assemble_name_raw instead of trying to…

elf.h, som.h (ASM_OUTPUT_EXTERNAL): Use assemble_name_raw instead of trying to save and restore TREE_SYMBOL_REFERENCED.

	* pa/elf.h, pa/som.h (ASM_OUTPUT_EXTERNAL): Use assemble_name_raw
	instead of trying to save and restore TREE_SYMBOL_REFERENCED.
	* pa/pa64-hpux.h (ASM_OUTPUT_TYPE_DIRECTIVE): Define.
	(ASM_OUTPUT_EXTERNAL): Don't save and restore TREE_SYMBOL_REFERENCED.

From-SVN: r95605
parent 9811fd17
2005-02-26 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa/elf.h, pa/som.h (ASM_OUTPUT_EXTERNAL): Use assemble_name_raw
instead of trying to save and restore TREE_SYMBOL_REFERENCED.
* pa/pa64-hpux.h (ASM_OUTPUT_TYPE_DIRECTIVE): Define.
(ASM_OUTPUT_EXTERNAL): Don't save and restore TREE_SYMBOL_REFERENCED.
2005-02-26 Nathanael Nerode <neroden@gcc.gnu.org> 2005-02-26 Nathanael Nerode <neroden@gcc.gnu.org>
* configure.ac: Rename cc_for_cross_gnattools to host_cc_for_libada. * configure.ac: Rename cc_for_cross_gnattools to host_cc_for_libada.
......
/* Definitions for ELF assembler support. /* Definitions for ELF assembler support.
Copyright (C) 1999, 2003 Free Software Foundation, Inc. Copyright (C) 1999, 2003, 2005 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -45,27 +45,26 @@ do { \ ...@@ -45,27 +45,26 @@ do { \
} \ } \
} while (0) } while (0)
/* This is how to output a command to make the user-level label named NAME /* This is how to output a command to make the user-level label
defined for reference from other files. named NAME defined for reference from other files. We use
assemble_name_raw instead of assemble_name since a symbol in
We call assemble_name, which in turn sets TREE_SYMBOL_REFERENCED. This a .IMPORT directive that isn't otherwise referenced is not
macro will restore the original value of TREE_SYMBOL_REFERENCED to avoid placed in the symbol table of the assembled object.
placing useless function definitions in the output file.
Failure to import a function reference can cause the HP linker
Also note that the SOM based tools need the symbol imported as a CODE to segmentation fault!
symbol, while the ELF based tools require the symbol to be imported as
an ENTRY symbol. What a crock. */ Note that the SOM based tools need the symbol imported as a
CODE symbol, while the ELF based tools require the symbol to
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ be imported as an ENTRY symbol. */
do { int save_referenced; \
save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)); \ #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
fputs ("\t.IMPORT ", FILE); \ do { fputs ("\t.IMPORT ", FILE); \
assemble_name (FILE, NAME); \ assemble_name_raw (FILE, NAME); \
if (FUNCTION_NAME_P (NAME)) \ if (FUNCTION_NAME_P (NAME)) \
fputs (",ENTRY\n", FILE); \ fputs (",ENTRY\n", FILE); \
else \ else \
fputs (",DATA\n", FILE); \ fputs (",DATA\n", FILE); \
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)) = save_referenced; \
} while (0) } while (0)
/* The bogus HP assembler requires ALL external references to be /* The bogus HP assembler requires ALL external references to be
......
...@@ -174,6 +174,20 @@ Boston, MA 02111-1307, USA. */ ...@@ -174,6 +174,20 @@ Boston, MA 02111-1307, USA. */
/* This is how we globalize a label. */ /* This is how we globalize a label. */
#define GLOBAL_ASM_OP "\t.globl\t" #define GLOBAL_ASM_OP "\t.globl\t"
/* Hacked version from defaults.h that uses assemble_name_raw
instead of assemble_name. A symbol in a type directive that
isn't otherwise referenced doesn't cause the symbol to be
placed in the symbol table of the assembled object. */
#undef ASM_OUTPUT_TYPE_DIRECTIVE
#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE) \
do { \
fputs (TYPE_ASM_OP, STREAM); \
assemble_name_raw (STREAM, NAME); \
fputs (", ", STREAM); \
fprintf (STREAM, TYPE_OPERAND_FMT, TYPE); \
putc ('\n', STREAM); \
} while (0)
/* Hacked version from elfos.h that doesn't output a label. */ /* Hacked version from elfos.h that doesn't output a label. */
#undef ASM_DECLARE_FUNCTION_NAME #undef ASM_DECLARE_FUNCTION_NAME
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
...@@ -186,15 +200,12 @@ do { \ ...@@ -186,15 +200,12 @@ do { \
dynamic loader to work correctly. This is equivalent to the dynamic loader to work correctly. This is equivalent to the
HP assembler's .IMPORT directive but relates more directly to HP assembler's .IMPORT directive but relates more directly to
ELF object file types. */ ELF object file types. */
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
do { \ do { \
int save_referenced; \ if (FUNCTION_NAME_P (NAME)) \
save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL));\ ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \
if (FUNCTION_NAME_P (NAME)) \ else \
ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \
else \
ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)) = save_referenced;\
} while (0) } while (0)
/* We need set the type for external libcalls. Also note that not all /* We need set the type for external libcalls. Also note that not all
......
...@@ -216,27 +216,26 @@ do { \ ...@@ -216,27 +216,26 @@ do { \
So, we force exception information into the data section. */ So, we force exception information into the data section. */
#define TARGET_ASM_EXCEPTION_SECTION data_section #define TARGET_ASM_EXCEPTION_SECTION data_section
/* This is how to output a command to make the user-level label named NAME /* This is how to output a command to make the user-level label
defined for reference from other files. named NAME defined for reference from other files. We use
assemble_name_raw instead of assemble_name since a symbol in
We call assemble_name, which in turn sets TREE_SYMBOL_REFERENCED. This a .IMPORT directive that isn't otherwise referenced is not
macro will restore the original value of TREE_SYMBOL_REFERENCED to avoid placed in the symbol table of the assembled object.
placing useless function definitions in the output file.
Failure to import a function reference can cause the HP linker
Also note that the SOM based tools need the symbol imported as a CODE to segmentation fault!
symbol, while the ELF based tools require the symbol to be imported as
an ENTRY symbol. What a crock. */ Note that the SOM based tools need the symbol imported as a
CODE symbol, while the ELF based tools require the symbol to
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ be imported as an ENTRY symbol. */
do { int save_referenced; \
save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)); \ #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
fputs ("\t.IMPORT ", FILE); \ do { fputs ("\t.IMPORT ", FILE); \
assemble_name (FILE, NAME); \ assemble_name_raw (FILE, NAME); \
if (FUNCTION_NAME_P (NAME)) \ if (FUNCTION_NAME_P (NAME)) \
fputs (",CODE\n", FILE); \ fputs (",CODE\n", FILE); \
else \ else \
fputs (",DATA\n", FILE); \ fputs (",DATA\n", FILE); \
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)) = save_referenced; \
} while (0) } while (0)
/* The bogus HP assembler requires ALL external references to be /* The bogus HP assembler requires ALL external references to be
......
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