diff mbox

RFA: Add libstdc++-v3 support for avr 2/7: config/avr

Message ID CAMqJFCp9A88UXWndZ7fN3Rwdg6HfTuN9++OaqoG1O37dJEG=QQ@mail.gmail.com
State New
Headers show

Commit Message

Joern Rennecke Oct. 21, 2014, 3:45 p.m. UTC
gcc:

2014-09-23  Joern Rennecke  <joern.rennecke@embecosm.com>

	* config/avr/avr.h (LIBSTDCXX): Don't define.

	* config/avr/avr.c (TARGET_UNWIND_WORD_MODE): Define.
	(avr_unwind_word_mode): New function.

	* config/avr/avr.c (avr_asm_function_rodata_section):
	When merging something into a ".gnu.linkonce.t.*" function-specific
	section, always add the SECTION_CODE flag.
diff mbox

Patch

Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c	(revision 216243)
+++ config/avr/avr.c	(working copy)
@@ -8667,8 +8667,20 @@  avr_asm_function_rodata_section (tree de
             {
               const char *rname = ACONCAT ((new_prefix,
                                             name + strlen (old_prefix), NULL));
-              flags &= ~SECTION_CODE;
-              flags |= AVR_HAVE_JMP_CALL ? 0 : SECTION_CODE;
+	      if (i == 0)
+		{
+		  flags &= ~SECTION_CODE;
+		  flags |= AVR_HAVE_JMP_CALL ? 0 : SECTION_CODE;
+		}
+	      else
+		{
+		  /* The flags have to match the existing section where the
+		     function proper went, lest varasm.c:get_section will
+		     complain: ...include/bits/locale_facets_nonio.tcc:
+		     In member function '<447 chars of c++ name>':
+		      <447 chars of c++ name> causes a section type conflict  */
+		  flags |= SECTION_CODE;
+		}
 
               return get_section (rname, flags, frodata->named.decl);
             }
@@ -12721,6 +12733,16 @@  #define TARGET_ADDR_SPACE_LEGITIMATE_ADD
 #undef  TARGET_PRINT_OPERAND_PUNCT_VALID_P
 #define TARGET_PRINT_OPERAND_PUNCT_VALID_P avr_print_operand_punct_valid_p
 
+#undef  TARGET_UNWIND_WORD_MODE
+#define TARGET_UNWIND_WORD_MODE avr_unwind_word_mode
+
+static enum machine_mode
+avr_unwind_word_mode (void)
+{
+  return Pmode;
+}
+
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 
Index: config/avr/avr.h
===================================================================
--- config/avr/avr.h	(revision 216243)
+++ config/avr/avr.h	(working copy)
@@ -516,9 +516,6 @@  #define LINK_SPEC "\
 #define LIB_SPEC \
   "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}"
 
-#define LIBSTDCXX "gcc"
-/* No libstdc++ for now.  Empty string doesn't work.  */
-
 #define LIBGCC_SPEC \
   "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lgcc }}}}}"