* config/obj-elf.c (obj_elf_section): When pushing a section, if there is a
authorNick Clifton <nickc@redhat.com>
Thu, 11 Oct 2007 20:20:55 +0000 (20:20 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 11 Oct 2007 20:20:55 +0000 (20:20 +0000)
  comma then the following argument must be a subsection number.
* testsuite/gas/elf/elf.exp (run_elf_list_test): Run section6 test.
* testsuite/gas/elf/section6.s: New file: Check behaviour of .pushsection with a subsection argument.
* testsuite/gas/elf/section6.d: New file: Expected disassembly.

gas/ChangeLog
gas/config/obj-elf.c
gas/testsuite/ChangeLog
gas/testsuite/gas/elf/elf.exp
gas/testsuite/gas/elf/section6.d [new file with mode: 0644]
gas/testsuite/gas/elf/section6.s [new file with mode: 0644]

index 292cb1e1ae41ef1e925947436734f6c8a2f6ee32..26bcf587d4648f1c35dfa1d6c4ce62f8c0fe8b2b 100644 (file)
@@ -1,3 +1,9 @@
+2007-10-11  Nick Clifton  <nickc@redhat.com>
+
+       * config/obj-elf.c (obj_elf_section): When pushing a section, if
+       there is a comma then the following argument must be a subsection
+       number.
+
 2007-10-11  H.J. Lu  <hongjiu.lu@intel.com>
 
        * doc/c-i386.texi: Update which instruction's operands are
index 57f11af8e46afb5df6e2627361768c433fb090f9..429b32faca98c990d51647faf54902c231607534 100644 (file)
@@ -883,6 +883,7 @@ obj_elf_section (int push)
   int type, attr, dummy;
   int entsize;
   int linkonce;
+  subsegT new_subsection = -1;
 
 #ifndef TC_I370
   if (flag_mri)
@@ -921,7 +922,11 @@ obj_elf_section (int push)
       ++input_line_pointer;
       SKIP_WHITESPACE ();
 
-      if (*input_line_pointer == '"')
+      if (push)
+       {
+         new_subsection = (subsegT) get_absolute_expression ();
+       }
+      else if (*input_line_pointer == '"')
        {
          beg = demand_copy_C_string (&dummy);
          if (beg == NULL)
@@ -1030,6 +1035,9 @@ obj_elf_section (int push)
   demand_empty_rest_of_line ();
 
   obj_elf_change_section (name, type, attr, entsize, group_name, linkonce, push);
+
+  if (push && new_subsection != -1)
+    subseg_set (now_seg, new_subsection);
 }
 
 /* Change to the .data section.  */
@@ -1089,7 +1097,7 @@ obj_elf_struct (int i)
 static void
 obj_elf_subsection (int ignore ATTRIBUTE_UNUSED)
 {
-  register int temp;
+  int temp;
 
 #ifdef md_flush_pending_output
   md_flush_pending_output ();
index 5e6d26bb16128063777643e2178b3964036c3b5e..1acc54c1e35fc31399fd2074f78ab05e94d554dd 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-11  Nick Clifton  <nickc@redhat.com>
+
+       * gas/elf/elf.exp (run_elf_list_test): Run section6 test.
+       * gas/elf/section6.s: New file: Check behaviour of .pushsection
+       with a subsection argument.
+       * gas/elf/section6.d: New file: Expected disassembly.
+
 2007-10-08  H.J. Lu  <hongjiu.lu@intel.com>
 
        * gas/i386/i386.exp: Run simd-suffix and x86-64-simd-suffix.
index 8b7833f02eb0435406c29f3693801904ca16e4c9..1bcb101af427f7cd1baba3d7ed2f76d1cb7d3787 100644 (file)
@@ -102,5 +102,6 @@ if { ([istarget "*-*-*elf*"]
     run_elf_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\""
     run_dump_test "struct" 
     run_dump_test "symver" 
-    run_elf_list_test "type" "" "" "-s" "| grep \"1 \\\[FONT\\\]\""
+    run_elf_list_test "type" "" "" "-s" "| grep \"1 \\\[FONTC\\\]\""
+    run_dump_test "section6" 
 }
diff --git a/gas/testsuite/gas/elf/section6.d b/gas/testsuite/gas/elf/section6.d
new file mode 100644 (file)
index 0000000..e8e0a66
--- /dev/null
@@ -0,0 +1,13 @@
+#objdump: -s
+#name: elf section6
+
+.*: +file format .*
+
+# The MIPS includes a 'section .reginfo' and such here.
+#...
+Contents of section sec1:
+ 0+000 01 ?02 ?05.*
+Contents of section sec2:
+ 0+000 04 ?03.*
+# Arm includes a .ARM.attributes section here
+#...
diff --git a/gas/testsuite/gas/elf/section6.s b/gas/testsuite/gas/elf/section6.s
new file mode 100644 (file)
index 0000000..f978434
--- /dev/null
@@ -0,0 +1,10 @@
+        .section sec1
+        .byte 1
+        .subsection 2
+        .byte 2
+        .pushsection sec2,1
+        .byte 3
+        .subsection 0
+        .byte 4
+        .popsection
+        .byte 5