linux64.h (ASM_OUTPUT_LABELREF): Remove.

2003-04-30  Janis Johnson  <janis187@us.ibm.com>

	* config/rs6000/linux64.h (ASM_OUTPUT_LABELREF): Remove.
	* config/rs6000/rs6000.c (rs6000_elf_strip_name_encoding): Remove.
	(rs6000_xcoff_encode_section_info): Remove.
	(current_file_function_operand): Use SYMBOL_REF_FLAGS; fix latent bug.
	(rs6000_output_mi_thunk): Remove dead code; use SYMBOL_REF_FLAGS.
	(small_data_operand, rs6000_emit_move, rs6000_elf_in_small_data_p,):
	Use SYMBOL_REF_FLAGS.
	(rs6000_elf_encode_section_info): Call default_encode_section_info for
	generic flags, use SYMBOL_REF_FLAGS; code cleanups.
	* sysv4.h (TARGET_STRIP_NAME_ENCODING, ASM_OUTPUT_LABELREF): Remove.
	(SYMBOL_FLAG_SMALL_V4, SYMBOL_REF_SMALL_V4_P): New.
	* xcoff.h (TARGET_ENCODE_SECTION_INFO): Remove.
	(ASM_DECLARE_FUNCTION_NAME): Remove setting of SYMBOL_REF_FLAG.

From-SVN: r66297
This commit is contained in:
Janis Johnson 2003-04-30 16:51:23 +00:00 committed by Janis Johnson
parent 0e42348d22
commit d1908febec
5 changed files with 68 additions and 138 deletions

View File

@ -1,3 +1,19 @@
2003-04-30 Janis Johnson <janis187@us.ibm.com>
* config/rs6000/linux64.h (ASM_OUTPUT_LABELREF): Remove.
* config/rs6000/rs6000.c (rs6000_elf_strip_name_encoding): Remove.
(rs6000_xcoff_encode_section_info): Remove.
(current_file_function_operand): Use SYMBOL_REF_FLAGS; fix latent bug.
(rs6000_output_mi_thunk): Remove dead code; use SYMBOL_REF_FLAGS.
(small_data_operand, rs6000_emit_move, rs6000_elf_in_small_data_p,):
Use SYMBOL_REF_FLAGS.
(rs6000_elf_encode_section_info): Call default_encode_section_info for
generic flags, use SYMBOL_REF_FLAGS; code cleanups.
* sysv4.h (TARGET_STRIP_NAME_ENCODING, ASM_OUTPUT_LABELREF): Remove.
(SYMBOL_FLAG_SMALL_V4, SYMBOL_REF_SMALL_V4_P): New.
* xcoff.h (TARGET_ENCODE_SECTION_INFO): Remove.
(ASM_DECLARE_FUNCTION_NAME): Remove setting of SYMBOL_REF_FLAG.
2003-04-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
* diagnostic.c (output_pointer): Use HOST_PTR_PRINTF.

View File

@ -272,23 +272,6 @@
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
/* This is how to output a reference to a user-level label named NAME.
`assemble_name' uses this. */
/* Override elfos.h definition. */
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(FILE,NAME) \
do { \
const char *_name = NAME; \
if (*_name == '@') \
_name++; \
\
if (*_name == '*') \
fprintf (FILE, "%s", _name + 1); \
else \
asm_fprintf (FILE, "%U%s", _name); \
} while (0)
#undef ASM_DECLARE_FUNCTION_NAME
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
do \

View File

@ -231,7 +231,6 @@ static void rs6000_elf_select_rtx_section PARAMS ((enum machine_mode, rtx,
unsigned HOST_WIDE_INT));
static void rs6000_elf_encode_section_info PARAMS ((tree, rtx, int))
ATTRIBUTE_UNUSED;
static const char *rs6000_elf_strip_name_encoding PARAMS ((const char *));
static bool rs6000_elf_in_small_data_p PARAMS ((tree));
#endif
#if TARGET_XCOFF
@ -244,8 +243,6 @@ static void rs6000_xcoff_select_rtx_section PARAMS ((enum machine_mode, rtx,
unsigned HOST_WIDE_INT));
static const char * rs6000_xcoff_strip_name_encoding PARAMS ((const char *));
static unsigned int rs6000_xcoff_section_type_flags PARAMS ((tree, const char *, int));
static void rs6000_xcoff_encode_section_info PARAMS ((tree, rtx, int))
ATTRIBUTE_UNUSED;
#endif
#if TARGET_MACHO
static bool rs6000_binds_local_p PARAMS ((tree));
@ -2092,17 +2089,24 @@ call_operand (op, mode)
}
/* Return 1 if the operand is a SYMBOL_REF for a function known to be in
this file and the function is not weakly defined. */
this file. */
int
current_file_function_operand (op, mode)
rtx op;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return (GET_CODE (op) == SYMBOL_REF
&& (SYMBOL_REF_FLAG (op)
|| (op == XEXP (DECL_RTL (current_function_decl), 0)
&& ! DECL_WEAK (current_function_decl))));
if (GET_CODE (op) == SYMBOL_REF
&& (SYMBOL_REF_LOCAL_P (op)
|| (op == XEXP (DECL_RTL (current_function_decl), 0))))
{
#ifdef ENABLE_CHECKING
if (!SYMBOL_REF_FUNCTION_P (op))
abort ();
#endif
return 1;
}
return 0;
}
/* Return 1 if this operand is a valid input for a move insn. */
@ -2206,11 +2210,7 @@ small_data_operand (op, mode)
sym_ref = XEXP (sum, 0);
}
if (*XSTR (sym_ref, 0) != '@')
return 0;
return 1;
return SYMBOL_REF_SMALL_V4_P (sym_ref);
#else
return 0;
#endif
@ -2939,8 +2939,9 @@ rs6000_emit_move (dest, source, mode)
new_ref = gen_rtx_SYMBOL_REF (Pmode, name);
CONSTANT_POOL_ADDRESS_P (new_ref)
= CONSTANT_POOL_ADDRESS_P (operands[1]);
SYMBOL_REF_FLAG (new_ref) = SYMBOL_REF_FLAG (operands[1]);
SYMBOL_REF_FLAGS (new_ref) = SYMBOL_REF_FLAGS (operands[1]);
SYMBOL_REF_USED (new_ref) = SYMBOL_REF_USED (operands[1]);
SYMBOL_REF_DECL (new_ref) = SYMBOL_REF_DECL (operands[1]);
operands[1] = new_ref;
}
@ -11749,15 +11750,7 @@ rs6000_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function)
TREE_USED (function) = 1;
}
funexp = XEXP (DECL_RTL (function), 0);
SYMBOL_REF_FLAG (funexp) = 0;
if (current_file_function_operand (funexp, VOIDmode)
&& (! lookup_attribute ("longcall",
TYPE_ATTRIBUTES (TREE_TYPE (function)))
|| lookup_attribute ("shortcall",
TYPE_ATTRIBUTES (TREE_TYPE (function)))))
SYMBOL_REF_FLAG (funexp) = 1;
SYMBOL_REF_FLAGS (funexp) &= ~SYMBOL_FLAG_LOCAL;
funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
#if TARGET_MACHO
@ -12930,13 +12923,16 @@ rs6000_elf_unique_section (decl, reloc)
flag_pic || DEFAULT_ABI == ABI_AIX);
}
/* If we are referencing a function that is static or is known to be
in this file, make the SYMBOL_REF special. We can use this to indicate
that we can branch to this function without emitting a no-op after the
call. For real AIX calling sequences, we also replace the
function name with the real name (1 or 2 leading .'s), rather than
the function descriptor name. This saves a lot of overriding code
to read the prefixes. */
/* For a SYMBOL_REF, set generic flags and then perform some
target-specific processing.
Set SYMBOL_FLAG_SMALL_V4 for an operand in small memory on V.4/eabi;
this is different from the generic SYMBOL_FLAG_SMALL.
When the AIX ABI is requested on a non-AIX system, replace the
function name with the real name (with a leading .) rather than the
function descriptor name. This saves a lot of overriding code to
read the prefixes. */
static void
rs6000_elf_encode_section_info (decl, rtl, first)
@ -12944,26 +12940,19 @@ rs6000_elf_encode_section_info (decl, rtl, first)
rtx rtl;
int first;
{
if (!first)
return;
default_encode_section_info (decl, rtl, first);
if (TREE_CODE (decl) == FUNCTION_DECL)
if (first
&& TREE_CODE (decl) == FUNCTION_DECL
&& !TARGET_AIX
&& DEFAULT_ABI == ABI_AIX)
{
rtx sym_ref = XEXP (rtl, 0);
if ((*targetm.binds_local_p) (decl))
SYMBOL_REF_FLAG (sym_ref) = 1;
if (!TARGET_AIX && DEFAULT_ABI == ABI_AIX)
{
size_t len1 = (DEFAULT_ABI == ABI_AIX) ? 1 : 2;
size_t len2 = strlen (XSTR (sym_ref, 0));
char *str = alloca (len1 + len2 + 1);
str[0] = '.';
str[1] = '.';
memcpy (str + len1, XSTR (sym_ref, 0), len2 + 1);
XSTR (sym_ref, 0) = ggc_alloc_string (str, len1 + len2);
}
size_t len = strlen (XSTR (sym_ref, 0));
char *str = alloca (len + 2);
str[0] = '.';
memcpy (str + 1, XSTR (sym_ref, 0), len + 1);
XSTR (sym_ref, 0) = ggc_alloc_string (str, len + 1);
}
else if (rs6000_sdata != SDATA_NONE
&& DEFAULT_ABI == ABI_V4
@ -12973,56 +12962,27 @@ rs6000_elf_encode_section_info (decl, rtl, first)
int size = int_size_in_bytes (TREE_TYPE (decl));
tree section_name = DECL_SECTION_NAME (decl);
const char *name = (char *)0;
int len = 0;
if ((*targetm.binds_local_p) (decl))
SYMBOL_REF_FLAG (sym_ref) = 1;
if (section_name)
{
if (TREE_CODE (section_name) == STRING_CST)
{
name = TREE_STRING_POINTER (section_name);
len = TREE_STRING_LENGTH (section_name);
}
name = TREE_STRING_POINTER (section_name);
else
abort ();
}
if (name
? ((len == sizeof (".sdata") - 1
&& strcmp (name, ".sdata") == 0)
|| (len == sizeof (".sdata2") - 1
&& strcmp (name, ".sdata2") == 0)
|| (len == sizeof (".sbss") - 1
&& strcmp (name, ".sbss") == 0)
|| (len == sizeof (".sbss2") - 1
&& strcmp (name, ".sbss2") == 0)
|| (len == sizeof (".PPC.EMB.sdata0") - 1
&& strcmp (name, ".PPC.EMB.sdata0") == 0)
|| (len == sizeof (".PPC.EMB.sbss0") - 1
&& strcmp (name, ".PPC.EMB.sbss0") == 0))
? (strcmp (name, ".sdata") == 0
|| strcmp (name, ".sdata2") == 0
|| strcmp (name, ".sbss") == 0
|| strcmp (name, ".sbss2") == 0
|| strcmp (name, ".PPC.EMB.sdata0") == 0
|| strcmp (name, ".PPC.EMB.sbss0") == 0)
: (size > 0 && size <= g_switch_value))
{
size_t len = strlen (XSTR (sym_ref, 0));
char *str = alloca (len + 2);
str[0] = '@';
memcpy (str + 1, XSTR (sym_ref, 0), len + 1);
XSTR (sym_ref, 0) = ggc_alloc_string (str, len + 1);
}
SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_SMALL_V4;
}
}
static const char *
rs6000_elf_strip_name_encoding (str)
const char *str;
{
while (*str == '*' || *str == '@')
str++;
return str;
}
static bool
rs6000_elf_in_small_data_p (decl)
tree decl;
@ -13631,17 +13591,6 @@ rs6000_xcoff_section_type_flags (decl, name, reloc)
return flags | (exact_log2 (align) & SECTION_ENTSIZE);
}
static void
rs6000_xcoff_encode_section_info (decl, rtl, first)
tree decl;
rtx rtl;
int first ATTRIBUTE_UNUSED;
{
if (TREE_CODE (decl) == FUNCTION_DECL
&& (*targetm.binds_local_p) (decl))
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
}
#endif /* TARGET_XCOFF */
#if TARGET_MACHO

View File

@ -766,7 +766,6 @@ extern int fixuplabelno;
#define DBX_DEBUGGING_INFO 1
#define TARGET_ENCODE_SECTION_INFO rs6000_elf_encode_section_info
#define TARGET_STRIP_NAME_ENCODING rs6000_elf_strip_name_encoding
#define TARGET_IN_SMALL_DATA_P rs6000_elf_in_small_data_p
#define TARGET_SECTION_TYPE_FLAGS rs6000_elf_section_type_flags
@ -775,25 +774,8 @@ extern int fixuplabelno;
#define RS6000_OUTPUT_BASENAME(FILE, NAME) \
assemble_name (FILE, NAME)
/* This is how to output a reference to a user-level label named NAME.
`assemble_name' uses this. */
/* Override elfos.h definition. */
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(FILE,NAME) \
do { \
const char *_name = NAME; \
if (*_name == '@') \
_name++; \
\
if (*_name == '*') \
fprintf (FILE, "%s", _name + 1); \
else \
asm_fprintf (FILE, "%U%s", _name); \
} while (0)
/* But, to make this work, we have to output the stabs for the function
name *first*... */
/* We have to output the stabs for the function name *first*, before
outputting its label. */
#define DBX_FUNCTION_FIRST
@ -1392,3 +1374,9 @@ ncrtn.o%s"
/* Generate entries in .fixup for relocatable addresses. */
#define RELOCATABLE_NEEDS_FIXUP
/* Define target-specific symbol_ref flags, beginning with
SYMBOL_REF_FLAG_DEP. */
#define SYMBOL_FLAG_SMALL_V4 (SYMBOL_FLAG_MACH_DEP << 0)
#define SYMBOL_REF_SMALL_V4_P(RTX) \
((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_SMALL_V4) != 0)

View File

@ -163,7 +163,6 @@ toc_section () \
#define TARGET_ASM_SELECT_SECTION rs6000_xcoff_select_section
#define TARGET_ASM_SELECT_RTX_SECTION rs6000_xcoff_select_rtx_section
#define TARGET_ASM_UNIQUE_SECTION rs6000_xcoff_unique_section
#define TARGET_ENCODE_SECTION_INFO rs6000_xcoff_encode_section_info
#define TARGET_STRIP_NAME_ENCODING rs6000_xcoff_strip_name_encoding
#define TARGET_SECTION_TYPE_FLAGS rs6000_xcoff_section_type_flags
@ -255,16 +254,11 @@ toc_section () \
`text_section' call previously done. We do have to go back to that
csect, however.
We also record that the function exists in the current compilation
unit, reachable by short branch, by setting SYMBOL_REF_FLAG.
The third and fourth parameters to the .function pseudo-op (16 and 044)
are placeholders which no longer have any use. */
#define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
{ rtx sym_ref = XEXP (DECL_RTL (DECL), 0); \
if ((*targetm.binds_local_p) (DECL)) \
SYMBOL_REF_FLAG (sym_ref) = 1; \
if (TREE_PUBLIC (DECL)) \
{ \
if (!RS6000_WEAK || !DECL_WEAK (decl)) \