elf.h (TEXT_SPACE_P, [...]): Delete.

* elf.h (TEXT_SPACE_P, FUNCTION_NAME_P): Delete.
        (ASM_GLOBALIZE_LABEL, ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT): Likewise.
        (ASM_FILE_START): Import _mcount with the right type.
        (ASM_DECLARE_FUNCTION_NAME): Define.
        (ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
        * pa.c (output_function_prologue): Always emit the function's label
        here.
        * pa.h (TEXT_SPACE_P): Define.
        (FUNCTION_NAME_P, ENCODE_SECTION_INFO, STRIP_NAME_ENCODING): Likewise.
        (ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT, ASM_GLOBALIZE_LABEL): Likewise.
        * som.h (TEXT_SPACE_P): Delete.
        (FUNCTION_NAME_P, ENCODE_SECTION_INFO, STRIP_NAME_ENCODING): Likewise.
        (ASM_GLOBALIZE_LABEL, ASM_OUTPUT_INT): Likewise.

From-SVN: r28549
This commit is contained in:
Jeffrey A Law 1999-08-06 17:08:29 +00:00 committed by Jeff Law
parent 3a6bdebaa0
commit e7eacc8e27
5 changed files with 158 additions and 105 deletions

View File

@ -1,3 +1,19 @@
Fri Aug 6 11:05:29 1999 Jeffrey A Law (law@cygnus.com)
* elf.h (TEXT_SPACE_P, FUNCTION_NAME_P): Delete.
(ASM_GLOBALIZE_LABEL, ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT): Likewise.
(ASM_FILE_START): Import _mcount with the right type.
(ASM_DECLARE_FUNCTION_NAME): Define.
(ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
* pa.c (output_function_prologue): Always emit the function's label
here.
* pa.h (TEXT_SPACE_P): Define.
(FUNCTION_NAME_P, ENCODE_SECTION_INFO, STRIP_NAME_ENCODING): Likewise.
(ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT, ASM_GLOBALIZE_LABEL): Likewise.
* som.h (TEXT_SPACE_P): Delete.
(FUNCTION_NAME_P, ENCODE_SECTION_INFO, STRIP_NAME_ENCODING): Likewise.
(ASM_GLOBALIZE_LABEL, ASM_OUTPUT_INT): Likewise.
Thu Aug 5 19:29:39 1999 Jim Wilson <wilson@cygnus.com>
* expr.c (emit_group_load): Allow src to be a CONCAT.

View File

@ -21,32 +21,10 @@ Boston, MA 02111-1307, USA. */
/* So we can conditionalize small amounts of code in pa.c or pa.md. */
#define OBJ_ELF
/* Dummy definitions. We do not care about this stuff for ELF. */
#define TEXT_SPACE_P(DECL) 0
#define FUNCTION_NAME_P(NAME) 0
#define TEXT_SECTION_ASM_OP "\t.text"
#define DATA_SECTION_ASM_OP "\t.data"
#define BSS_SECTION_ASM_OP "\t.section\t.bss"
/* This is how to output a command to make the user-level label named NAME
defined for reference from other files. */
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
(fputs ("\t.globl ", FILE), assemble_name (FILE, NAME), fputs ("\n", FILE))
/* This is how to output an assembler line defining an `int' constant. */
#define ASM_OUTPUT_INT(FILE,VALUE) \
{ fputs ("\t.word ", FILE); \
output_addr_const (FILE, (VALUE)); \
fputs ("\n", FILE);}
#define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \
{ fputs ("\t.dword ", FILE); \
output_addr_const (FILE, (VALUE)); \
fputs ("\n", FILE);}
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) \
do { \
@ -57,7 +35,57 @@ do { \
else \
fputs("\t.LEVEL 1.0\n", FILE); \
if (profile_flag)\
fprintf (FILE, "\t.IMPORT _mcount, CODE\n");\
fprintf (FILE, "\t.IMPORT _mcount, ENTRY\n");\
if (write_symbols != NO_DEBUG) \
output_file_directive ((FILE), main_input_filename); \
} while (0)
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
do { \
if (TREE_PUBLIC (DECL)) \
{ \
fputs ("\t.EXPORT ", FILE); \
assemble_name (FILE, NAME); \
fputs (",ENTRY\n", FILE); \
} \
} while (0)
/* This is how to output a command to make the user-level label named NAME
defined for reference from other files.
We call assemble_name, which in turn sets TREE_SYMBOL_REFERENCED. This
macro will restore the original value of TREE_SYMBOL_REFERENCED to avoid
placing useless function definitions in the output file.
Also note that the SOM based tools need the symbol imported as a CODE
symbol, while the ELF based tools require the symbol to be imported as
an ENTRY symbol. What a crock. */
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
do { int save_referenced; \
save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)); \
fputs ("\t.IMPORT ", FILE); \
assemble_name (FILE, NAME); \
if (FUNCTION_NAME_P (NAME)) \
fputs (",ENTRY\n", FILE); \
else \
fputs (",DATA\n", FILE); \
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)) = save_referenced; \
} while (0)
/* The bogus HP assembler requires ALL external references to be
"imported", even library calls. They look a bit different, so
here's this macro.
Also note not all libcall names are passed to ENCODE_SECTION_INFO
(__main for example). To make sure all libcall names have section
info recorded in them, we do it here. */
#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, RTL) \
do { fputs ("\t.IMPORT ", FILE); \
if (!function_label_operand (RTL, VOIDmode)) \
hppa_encode_label (RTL, 1); \
assemble_name (FILE, XSTR ((RTL), 0)); \
fputs (",ENTRY\n", FILE); \
} while (0)

View File

@ -2651,9 +2651,7 @@ output_function_prologue (file, size)
/* The function's label and associated .PROC must never be
separated and must be output *after* any profiling declarations
to avoid changing spaces/subspaces within a procedure. */
#ifdef OBJ_SOM
ASM_OUTPUT_LABEL (file, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));
#endif
fputs ("\t.PROC\n", file);
/* hppa_expand_prologue does the dirty work now. We just need

View File

@ -1586,6 +1586,59 @@ extern struct rtx_def *hppa_legitimize_address ();
else \
readonly_data_section ();
/* Define this macro if references to a symbol must be treated
differently depending on something about the variable or
function named by the symbol (such as what section it is in).
The macro definition, if any, is executed immediately after the
rtl for DECL or other node is created.
The value of the rtl will be a `mem' whose address is a
`symbol_ref'.
The usual thing for this macro to do is to a flag in the
`symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
name string in the `symbol_ref' (if one bit is not enough
information).
On the HP-PA we use this to indicate if a symbol is in text or
data space. Also, function labels need special treatment. */
#define TEXT_SPACE_P(DECL)\
(TREE_CODE (DECL) == FUNCTION_DECL \
|| (TREE_CODE (DECL) == VAR_DECL \
&& TREE_READONLY (DECL) && ! TREE_SIDE_EFFECTS (DECL) \
&& (! DECL_INITIAL (DECL) || ! reloc_needed (DECL_INITIAL (DECL))) \
&& !flag_pic) \
|| (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'c' \
&& !(TREE_CODE (DECL) == STRING_CST && flag_writable_strings)))
#define FUNCTION_NAME_P(NAME) \
(*(NAME) == '@' || (*(NAME) == '*' && *((NAME) + 1) == '@'))
#define ENCODE_SECTION_INFO(DECL)\
do \
{ if (TEXT_SPACE_P (DECL)) \
{ rtx _rtl; \
if (TREE_CODE (DECL) == FUNCTION_DECL \
|| TREE_CODE (DECL) == VAR_DECL) \
_rtl = DECL_RTL (DECL); \
else \
_rtl = TREE_CST_RTL (DECL); \
SYMBOL_REF_FLAG (XEXP (_rtl, 0)) = 1; \
if (TREE_CODE (DECL) == FUNCTION_DECL) \
hppa_encode_label (XEXP (DECL_RTL (DECL), 0), 0);\
} \
} \
while (0)
/* Store the user-specified part of SYMBOL_NAME in VAR.
This is sort of inverse to ENCODE_SECTION_INFO. */
#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
(VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*' ? \
1 + (SYMBOL_NAME)[1] == '@'\
: (SYMBOL_NAME)[0] == '@'))
/* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */
#define CASE_VECTOR_MODE (TARGET_BIG_SWITCH ? TImode : DImode)
@ -1882,6 +1935,27 @@ extern struct rtx_def *hppa_legitimize_address ();
fprintf (FILE, "\t.word 0x%lx\n", l); \
} while (0)
/* This is how to output an assembler line defining an `int' constant.
This is made more complicated by the fact that functions must be
prefixed by a P% as well as code label references for the exception
table -- otherwise the linker chokes. */
#define ASM_OUTPUT_INT(FILE,VALUE) \
{ fputs ("\t.word ", FILE); \
if (function_label_operand (VALUE, VOIDmode)) \
fputs ("P%", FILE); \
output_addr_const (FILE, (VALUE)); \
fputs ("\n", FILE);}
/* Likewise for double integers. */
#define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \
{ fputs ("\t.dword ", FILE); \
if (function_label_operand (VALUE, VOIDmode)) \
fputs ("P%", FILE); \
output_addr_const (FILE, (VALUE)); \
fputs ("\n", FILE);}
/* Likewise for `short' and `char' constants. */
#define ASM_OUTPUT_SHORT(FILE,VALUE) \
@ -1899,6 +1973,18 @@ extern struct rtx_def *hppa_legitimize_address ();
#define ASM_OUTPUT_BYTE(FILE,VALUE) \
fprintf (FILE, "\t.byte 0x%x\n", (VALUE))
#define ASM_GLOBALIZE_LABEL(FILE, NAME) \
do { \
/* We only handle DATA objects here, functions are globalized in \
ASM_DECLARE_FUNCTION_NAME. */ \
if (! FUNCTION_NAME_P (NAME)) \
{ \
fputs ("\t.EXPORT ", FILE); \
assemble_name (FILE, NAME); \
fputs (",DATA\n", FILE); \
} \
} while (0)
#define ASM_OUTPUT_ASCII(FILE, P, SIZE) \
output_ascii ((FILE), (P), (SIZE))

View File

@ -136,59 +136,6 @@ do { \
#endif
/* Define this macro if references to a symbol must be treated
differently depending on something about the variable or
function named by the symbol (such as what section it is in).
The macro definition, if any, is executed immediately after the
rtl for DECL or other node is created.
The value of the rtl will be a `mem' whose address is a
`symbol_ref'.
The usual thing for this macro to do is to a flag in the
`symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
name string in the `symbol_ref' (if one bit is not enough
information).
On the HP-PA we use this to indicate if a symbol is in text or
data space. Also, function labels need special treatment. */
#define TEXT_SPACE_P(DECL)\
(TREE_CODE (DECL) == FUNCTION_DECL \
|| (TREE_CODE (DECL) == VAR_DECL \
&& TREE_READONLY (DECL) && ! TREE_SIDE_EFFECTS (DECL) \
&& (! DECL_INITIAL (DECL) || ! reloc_needed (DECL_INITIAL (DECL))) \
&& !flag_pic) \
|| (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'c' \
&& !(TREE_CODE (DECL) == STRING_CST && flag_writable_strings)))
#define FUNCTION_NAME_P(NAME) \
(*(NAME) == '@' || (*(NAME) == '*' && *((NAME) + 1) == '@'))
#define ENCODE_SECTION_INFO(DECL)\
do \
{ if (TEXT_SPACE_P (DECL)) \
{ rtx _rtl; \
if (TREE_CODE (DECL) == FUNCTION_DECL \
|| TREE_CODE (DECL) == VAR_DECL) \
_rtl = DECL_RTL (DECL); \
else \
_rtl = TREE_CST_RTL (DECL); \
SYMBOL_REF_FLAG (XEXP (_rtl, 0)) = 1; \
if (TREE_CODE (DECL) == FUNCTION_DECL) \
hppa_encode_label (XEXP (DECL_RTL (DECL), 0), 0);\
} \
} \
while (0)
/* Store the user-specified part of SYMBOL_NAME in VAR.
This is sort of inverse to ENCODE_SECTION_INFO. */
#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
(VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*' ? \
1 + (SYMBOL_NAME)[1] == '@'\
: (SYMBOL_NAME)[0] == '@'))
/* NAME refers to the function's name. If we are placing each function into
its own section, we need to switch to the section for this function. Note
that the section name will have a "." prefix. */
@ -395,7 +342,11 @@ DTORS_SECTION_FUNCTION
We call assemble_name, which in turn sets TREE_SYMBOL_REFERENCED. This
macro will restore the original value of TREE_SYMBOL_REFERENCED to avoid
placing useless function definitions in the output file. */
placing useless function definitions in the output file.
Also note that the SOM based tools need the symbol imported as a CODE
symbol, while the ELF based tools require the symbol to be imported as
an ENTRY symbol. What a crock. */
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
do { int save_referenced; \
@ -425,34 +376,8 @@ DTORS_SECTION_FUNCTION
fputs (",CODE\n", FILE); \
} while (0)
#define ASM_GLOBALIZE_LABEL(FILE, NAME) \
do { \
/* We only handle DATA objects here, functions are globalized in \
ASM_DECLARE_FUNCTION_NAME. */ \
if (! FUNCTION_NAME_P (NAME)) \
{ \
fputs ("\t.EXPORT ", FILE); \
assemble_name (FILE, NAME); \
fputs (",DATA\n", FILE); \
} \
} while (0)
#define ASM_FILE_END(FILE) output_deferred_plabels (FILE)
/* This is how to output an assembler line defining an `int' constant.
This is made more complicated by the fact that functions must be
prefixed by a P% as well as code label references for the exception
table -- otherwise the linker chokes. */
#define ASM_OUTPUT_INT(FILE,VALUE) \
{ fputs ("\t.word ", FILE); \
if (function_label_operand (VALUE, VOIDmode)) \
fputs ("P%", FILE); \
output_addr_const (FILE, (VALUE)); \
fputs ("\n", FILE);}
/* We want __gcc_plt_call to appear in every program built by
gcc, so we make a reference to it out of __main.
We use the asm statement to fool the optimizer into not