Commit 66319f5c by Richard Sandiford Committed by Richard Sandiford

elf64.h (UNIQUE_SECTION): Use mips_unique_section.

	* config/mips/elf64.h (UNIQUE_SECTION): Use mips_unique_section.
	* config/mips/mips.c (mips_unique_section): Strip encoding from
	decl name.

From-SVN: r53101
parent 7bebf279
2002-05-03 Richard Sandiford <rsandifo@redhat.com>
* config/mips/elf64.h (UNIQUE_SECTION): Use mips_unique_section.
* config/mips/mips.c (mips_unique_section): Strip encoding from
decl name.
2002-05-03 Jakub Jelinek <jakub@redhat.com> 2002-05-03 Jakub Jelinek <jakub@redhat.com>
* config/i386/i386.c (ix86_expand_int_movcc): Truncate to proper * config/i386/i386.c (ix86_expand_int_movcc): Truncate to proper
......
...@@ -210,70 +210,7 @@ do { \ ...@@ -210,70 +210,7 @@ do { \
#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
#undef UNIQUE_SECTION #undef UNIQUE_SECTION
#define UNIQUE_SECTION(DECL,RELOC) \ #define UNIQUE_SECTION(DECL,RELOC) \
do { \ mips_unique_section ((DECL), (RELOC))
int len, size, sec; \
const char *name, *prefix; \
char *string; \
static const char *const prefixes[4][2] = { \
{ ".text.", ".gnu.linkonce.t." }, \
{ ".rodata.", ".gnu.linkonce.r." }, \
{ ".data.", ".gnu.linkonce.d." }, \
{ ".sdata.", ".gnu.linkonce.s." } \
}; \
\
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
size = int_size_in_bytes (TREE_TYPE (decl)); \
\
/* Determine the base section we are interested in: \
0=text, 1=rodata, 2=data, 3=sdata, [4=bss]. */ \
if (TREE_CODE (DECL) == FUNCTION_DECL) \
sec = 0; \
else if (DECL_INITIAL (DECL) == 0 \
|| DECL_INITIAL (DECL) == error_mark_node) \
sec = 2; \
else if ((TARGET_EMBEDDED_PIC || TARGET_MIPS16) \
&& TREE_CODE (decl) == STRING_CST \
&& !flag_writable_strings) \
{ \
/* For embedded position independent code, put constant strings \
in the text section, because the data section is limited to \
64K in size. For mips16 code, put strings in the text \
section so that a PC relative load instruction can be used to \
get their address. */ \
sec = 0; \
} \
else if (TARGET_EMBEDDED_DATA) \
{ \
/* For embedded applications, always put an object in read-only data \
if possible, in order to reduce RAM usage. */ \
\
if (DECL_READONLY_SECTION (DECL, RELOC)) \
sec = 1; \
else if (size > 0 && size <= mips_section_threshold) \
sec = 3; \
else \
sec = 2; \
} \
else \
{ \
/* For hosted applications, always put an object in small data if \
possible, as this gives the best performance. */ \
\
if (size > 0 && size <= mips_section_threshold) \
sec = 3; \
else if (DECL_READONLY_SECTION (DECL, RELOC)) \
sec = 1; \
else \
sec = 2; \
} \
\
prefix = prefixes[sec][DECL_ONE_ONLY (DECL)]; \
len = strlen (name) + strlen (prefix); \
string = alloca (len + 1); \
sprintf (string, "%s%s", prefix, name); \
\
DECL_SECTION_NAME (DECL) = build_string (len, string); \
} while (0)
/* A list of other sections which the compiler might be "in" at any /* A list of other sections which the compiler might be "in" at any
given time. */ given time. */
......
...@@ -10259,6 +10259,7 @@ mips_unique_section (decl, reloc) ...@@ -10259,6 +10259,7 @@ mips_unique_section (decl, reloc)
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
size = int_size_in_bytes (TREE_TYPE (decl)); size = int_size_in_bytes (TREE_TYPE (decl));
STRIP_NAME_ENCODING (name, name);
/* Determine the base section we are interested in: /* Determine the base section we are interested in:
0=text, 1=rodata, 2=data, 3=sdata, [4=bss]. */ 0=text, 1=rodata, 2=data, 3=sdata, [4=bss]. */
......
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