<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">diff -rupN gcc/config/arm/aout.h gcc.patched/config/arm/aout.h
--- gcc/config/arm/aout.h	2016-04-19 16:50:32.000000000 +0100
+++ gcc.patched/config/arm/aout.h	2017-03-03 14:54:38.745301785 +0000
@@ -31,9 +31,13 @@
 #endif
 
 /* Switch to the text or data segment.  */
-#define TEXT_SECTION_ASM_OP  	"\t.text"
-#define DATA_SECTION_ASM_OP  	"\t.data"
-#define BSS_SECTION_ASM_OP   	"\t.bss"
+#define TEXT_SECTION_ASM_OP arm_text_section
+#define DATA_SECTION_ASM_OP arm_data_section
+#undef READONLY_DATA_SECTION_ASM_OP
+#define READONLY_DATA_SECTION_ASM_OP arm_readonly_data_section
+#define BSS_SECTION_ASM_OP arm_bss_section
+#undef TARGET_ASM_NAMED_SECTION
+#define TARGET_ASM_NAMED_SECTION arm_asm_named_section
 
 /* Note: If USER_LABEL_PREFIX or LOCAL_LABEL_PREFIX are changed,
    make sure that this change is reflected in the function
diff -rupN gcc/config/arm/arm.c gcc.patched/config/arm/arm.c
--- gcc/config/arm/arm.c	2017-02-15 15:07:50.000000000 +0000
+++ gcc.patched/config/arm/arm.c	2017-03-03 14:54:38.749301852 +0000
@@ -2328,6 +2328,11 @@ arm_constant_limit (bool size_p)
   return size_p ? 1 : current_tune-&gt;constant_limit;
 }
 
+const char *arm_text_section = "\t" ARM_DEFAULT_TEXT_SECTION_NAME;
+const char *arm_data_section = "\t" ARM_DEFAULT_DATA_SECTION_NAME;
+const char *arm_readonly_data_section = "\t.section " ARM_DEFAULT_READONLY_DATA_SECTION_NAME;
+const char *arm_bss_section = "\t" ARM_DEFAULT_BSS_SECTION_NAME;
+
 /* Emit an insn that's a simple single-set.  Both the operands must be known
    to be valid.  */
 inline static rtx_insn *
@@ -3394,6 +3399,35 @@ arm_option_override (void)
       flag_reorder_blocks = 1;
     }
 
+  if (strcmp(arm_text_string, ARM_DEFAULT_TEXT_SECTION_NAME))
+    {
+      #define ARM_TEXT_SECTION_FORMAT "\t.section\t%s,\"ax\",%%progbits\n"
+      char *tmp = XNEWVEC (char, strlen (arm_text_string) + sizeof (ARM_TEXT_SECTION_FORMAT) + 1);
+      sprintf (tmp, ARM_TEXT_SECTION_FORMAT, arm_text_string);
+      arm_text_section = tmp;
+    }
+  if (strcmp(arm_data_string, ARM_DEFAULT_DATA_SECTION_NAME))
+    {
+      #define ARM_DATA_SECTION_FORMAT "\t.section\t%s,\"aw\",%%progbits\n"
+      char *tmp = XNEWVEC (char, strlen (arm_data_string) + sizeof (ARM_DATA_SECTION_FORMAT) + 1);
+      sprintf (tmp, ARM_DATA_SECTION_FORMAT, arm_data_string);
+      arm_data_section = tmp;
+    }
+  if (strcmp(arm_readonly_data_string, ARM_DEFAULT_READONLY_DATA_SECTION_NAME))
+    {
+      #define ARM_READONLY_DATA_SECTION_FORMAT "\t.section\t%s,\"a\",%%progbits\n"
+      char *tmp = XNEWVEC (char, strlen (arm_readonly_data_string) + sizeof (ARM_READONLY_DATA_SECTION_FORMAT) + 1);
+      sprintf (tmp, ARM_READONLY_DATA_SECTION_FORMAT, arm_readonly_data_string);
+      arm_readonly_data_section = tmp;
+    }
+  if (strcmp(arm_bss_string, ARM_DEFAULT_BSS_SECTION_NAME))
+    {
+      #define ARM_BSS_SECTION_FORMAT "\t.section\t%s,\"aw\",%%nobits\n"
+      char *tmp = XNEWVEC (char, strlen (arm_bss_string) + sizeof (ARM_BSS_SECTION_FORMAT) + 1);
+      sprintf (tmp, ARM_BSS_SECTION_FORMAT, arm_bss_string);
+      arm_bss_section = tmp;
+    }
+
   if (flag_pic)
     /* Hoisting PIC address calculations more aggressively provides a small,
        but measurable, size reduction for PIC code.  Therefore, we decrease
@@ -3507,6 +3541,32 @@ arm_option_override (void)
   thumb_flipper = TARGET_THUMB;
 }
 
+void arm_asm_named_section (const char *name, unsigned int flags, tree t)
+{
+  char local[1024];
+  if (strstr(name, ARM_DEFAULT_TEXT_SECTION_NAME)==name)
+    {
+      sprintf(local, "%s%s", arm_text_string, name+sizeof(ARM_DEFAULT_TEXT_SECTION_NAME)-1);
+      name = local;
+    }
+  else if (strstr(name, ARM_DEFAULT_DATA_SECTION_NAME)==name)
+    {
+      sprintf(local, "%s%s", arm_data_string, name+sizeof(ARM_DEFAULT_DATA_SECTION_NAME)-1);
+      name = local;
+    }
+  else if (strstr(name, ARM_DEFAULT_BSS_SECTION_NAME)==name)
+    {
+      sprintf(local, "%s%s", arm_bss_string, name+sizeof(ARM_DEFAULT_BSS_SECTION_NAME)-1);
+      name = local;
+    }
+  else if (strstr(name, ARM_DEFAULT_READONLY_DATA_SECTION_NAME)==name)
+    {
+      sprintf(local, "%s%s", arm_readonly_data_string, name+sizeof(ARM_DEFAULT_READONLY_DATA_SECTION_NAME)-1);
+      name = local;
+    }
+  default_elf_asm_named_section(name, flags, t);
+}
+
 static void
 arm_add_gc_roots (void)
 {
diff -rupN gcc/config/arm/arm.h gcc.patched/config/arm/arm.h
--- gcc/config/arm/arm.h	2016-12-05 16:07:09.000000000 +0000
+++ gcc.patched/config/arm/arm.h	2017-03-03 14:54:38.757301984 +0000
@@ -1772,6 +1772,17 @@ enum arm_auto_incmodes
   if (TARGET_THUMB2)			\
     thumb2_asm_output_opcode (STREAM);
 
+#define ARM_DEFAULT_TEXT_SECTION_NAME  ".text"
+#define ARM_DEFAULT_DATA_SECTION_NAME  ".data"
+#define ARM_DEFAULT_READONLY_DATA_SECTION_NAME  ".rodata"
+#define ARM_DEFAULT_BSS_SECTION_NAME ".bss"
+
+extern const char *arm_text_section;
+extern const char *arm_data_section;
+extern const char *arm_readonly_data_section;
+extern const char *arm_bss_section;
+void arm_asm_named_section (const char *name, unsigned int flags, tree t);
+
 /* The EABI specifies that constructors should go in .init_array.
    Other targets use .ctors for compatibility.  */
 #ifndef ARM_EABI_CTORS_SECTION_OP
diff -rupN gcc/config/arm/arm.opt gcc.patched/config/arm/arm.opt
--- gcc/config/arm/arm.opt	2016-12-05 16:07:09.000000000 +0000
+++ gcc.patched/config/arm/arm.opt	2017-03-03 14:54:38.757301984 +0000
@@ -274,6 +274,22 @@ munaligned-access
 Target Report Var(unaligned_access) Init(2) Save
 Enable unaligned word and halfword accesses to packed data.
 
+mtext=
+Target RejectNegative Joined Var(arm_text_string) Init(ARM_DEFAULT_TEXT_SECTION_NAME)
+-mtext=SECTION Put functions in SECTION
+
+mdata=
+Target RejectNegative Joined Var(arm_data_string) Init(ARM_DEFAULT_DATA_SECTION_NAME)
+-mdata=SECTION Put data in SECTION
+
+mrodata=
+Target RejectNegative Joined Var(arm_readonly_data_string) Init(ARM_DEFAULT_READONLY_DATA_SECTION_NAME)
+-mrodata=SECTION Put read-only data in SECTION
+
+mbss=
+Target RejectNegative Joined Var(arm_bss_string) Init(ARM_DEFAULT_BSS_SECTION_NAME)
+-mbss=SECTION Put zeroed data in SECTION
+
 mneon-for-64bits
 Target Report RejectNegative Var(use_neon_for_64bits) Init(0)
 Use Neon to perform 64-bits operations rather than core registers.
diff -rupN gcc/dwarf2out.c gcc.patched/dwarf2out.c
--- gcc/dwarf2out.c	2017-01-24 15:07:55.000000000 +0000
+++ gcc.patched/dwarf2out.c	2017-03-03 14:54:38.761302050 +0000
@@ -24826,7 +24826,7 @@ dwarf2out_source_line (unsigned int line
   unsigned int file_num;
   dw_line_info_table *table;
 
-  if (debug_info_level &lt; DINFO_LEVEL_TERSE || line == 0)
+  if (debug_info_level &lt; DINFO_LEVEL_NORMAL || line == 0)
     return;
 
   /* The discriminator column was added in dwarf4.  Simplify the below
@@ -27814,7 +27814,7 @@ dwarf2out_finish (const char *filename)
 	}
     }
 
-  if (debug_info_level &gt;= DINFO_LEVEL_TERSE)
+  if (debug_info_level &gt;= DINFO_LEVEL_NORMAL)
     add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
 		    debug_line_section_label);
 
</pre></body></html>