Commit 52ecdfda by Jim Wilson Committed by Jim Wilson

Fix mips16 libstdc++ builds. Fix inconsistency from Apr 7 change.

	* mips/elf64.h (MAKE_DECL_ONE_ONLY, UNIQUE_SECTION_P): Define.
	* mips/mips.c (mips_select_rtx_section): When TARGET_MIPS16, use
	function_section instead of text_section.
	* mips/mips.h (ENCODE_SECTION_INFO): Add check for UNIQUE_SECTION_P
	in TARGET_MIPS16 STRING_CST handling.

From-SVN: r26824
parent e42dc604
Fri May 7 12:38:54 1999 Jim Wilson <wilson@cygnus.com>
* mips/elf64.h (MAKE_DECL_ONE_ONLY, UNIQUE_SECTION_P): Define.
* mips/mips.c (mips_select_rtx_section): When TARGET_MIPS16, use
function_section instead of text_section.
* mips/mips.h (ENCODE_SECTION_INFO): Add check for UNIQUE_SECTION_P
in TARGET_MIPS16 STRING_CST handling.
Fri May 7 09:54:11 1999 Nick Clifton <nickc@cygnus.com>
Patch from: Nick Burrett <nick.burrett@btinternet.com>
......
......@@ -195,6 +195,8 @@ do { \
fputc ('\n', FILE); \
} while (0)
#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
#define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL))
#define UNIQUE_SECTION(DECL,RELOC) \
do { \
int len, size, sec; \
......
......@@ -6884,10 +6884,10 @@ mips_select_rtx_section (mode, x)
{
if (TARGET_MIPS16)
{
/* In mips16 mode, the constant table always goes in the .text
section, so that constants can be loaded using PC relative
/* In mips16 mode, the constant table always goes in the same section
as the function, so that constants can be loaded using PC relative
addressing. */
text_section ();
function_section (current_function_decl);
}
else if (TARGET_EMBEDDED_DATA)
{
......
......@@ -3168,7 +3168,20 @@ do \
if (TARGET_MIPS16) \
{ \
if (TREE_CODE (DECL) == STRING_CST \
&& ! flag_writable_strings) \
&& ! flag_writable_strings \
/* If this string is from a function, and the function will \
go in a gnu linkonce section, then we can't directly \
access the string. This gets an assembler error \
"unsupported PC relative reference to different section".\
If we modify SELECT_SECTION to put it in function_section\
instead of text_section, it still fails because \
DECL_SECTION_NAME isn't set until assemble_start_function.\
If we fix that, it still fails because strings are shared\
among multiple functions, and we have cross section \
references again. We force it to work by putting string \
addresses in the constant pool and indirecting. */ \
&& (! current_function_decl \
|| ! UNIQUE_SECTION_P (current_function_decl))) \
{ \
SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (DECL), 0)) = 1; \
mips_string_length += TREE_STRING_LENGTH (DECL); \
......
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