gas/
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 27 Oct 2007 17:45:53 +0000 (17:45 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 27 Oct 2007 17:45:53 +0000 (17:45 +0000)
2007-10-27  H.J. Lu  <hongjiu.lu@intel.com>

PR gas/5221
* config/obj-elf.c (obj_elf_section): Handle optional
parameters for .pushsection.

* doc/as.texinfo: Document optional parameters for
.pushsection.

gas/testsuite/

2007-10-27  H.J. Lu  <hongjiu.lu@intel.com>

PR gas/5221
* gas/elf/elf.exp: Run section7.

* gas/elf/section7.d: New.
* gas/elf/section7.s: Likewise.

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

index eb1eed2525fbd41a9088f21b02b8afabcba0734c..807d52db6b063b54ab2b029a5c3e8f0df74422f7 100644 (file)
@@ -1,3 +1,12 @@
+2007-10-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/5221
+       * config/obj-elf.c (obj_elf_section): Handle optional
+       parameters for .pushsection.
+
+       * doc/as.texinfo: Document optional parameters for
+       .pushsection.
+
 2007-10-24  H.J. Lu  <hongjiu.lu@intel.com>
 
        * configure.in: Move AM_PROG_LIBTOOL after AC_GNU_SOURCE.
index ab1550df1f442cc1ee17c2f9864aaea7fdc6a9df..ccae61671cb70f8cd939b95a9a0c5a6e9e59d521 100644 (file)
@@ -922,11 +922,23 @@ obj_elf_section (int push)
       ++input_line_pointer;
       SKIP_WHITESPACE ();
 
-      if (push)
+      if (push && ISDIGIT (*input_line_pointer))
        {
+         /* .pushsection has an optional subsection.  */
          new_subsection = (subsegT) get_absolute_expression ();
+
+         SKIP_WHITESPACE ();
+
+         /* Stop if we don't see a comma.  */
+         if (*input_line_pointer != ',')
+           goto done;
+
+         /* Skip the comma.  */
+         ++input_line_pointer;
+         SKIP_WHITESPACE ();
        }
-      else if (*input_line_pointer == '"')
+
+      if (*input_line_pointer == '"')
        {
          beg = demand_copy_C_string (&dummy);
          if (beg == NULL)
@@ -1032,6 +1044,7 @@ obj_elf_section (int push)
        }
     }
 
+done:
   demand_empty_rest_of_line ();
 
   obj_elf_change_section (name, type, attr, entsize, group_name, linkonce, push);
index 5d426ee01cb9283c6efa1491eb675d2b86c22291..21af111054659469ead2d24bb53f89b11da4c539 100644 (file)
@@ -5468,7 +5468,7 @@ expanded.  @xref{Macro}.
 
 @ifset ELF
 @node PushSection
-@section @code{.pushsection @var{name} , @var{subsection}}
+@section @code{.pushsection @var{name} [, @var{subsection}] [, "@var{flags}"[, @@@var{type}[,@var{arguments}]]]}
 
 @cindex @code{pushsection} directive
 @cindex Section Stack
@@ -5479,7 +5479,9 @@ This is one of the ELF section stack manipulation directives.  The others are
 
 This directive pushes the current section (and subsection) onto the
 top of the section stack, and then replaces the current section and
-subsection with @code{name} and @code{subsection}.
+subsection with @code{name} and @code{subsection}. The optional
+@code{flags}, @code{type} and @code{arguments} are treated the same
+as in the @code{.section} (@pxref{Section}) directive.
 @end ifset
 
 @node Quad
index e18ddd4373a3f32add9f55eb4741f4d449cc2a77..8616469dd3e2f1bf6ee67aa989df6252e4cdbb5e 100644 (file)
@@ -1,3 +1,11 @@
+2007-10-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/5221
+       * gas/elf/elf.exp: Run section7.
+
+       * gas/elf/section7.d: New.
+       * gas/elf/section7.s: Likewise.
+
 2007-10-23  H.J. Lu  <hongjiu.lu@intel.com>
 
        * gas/i386/katmai.s: Remove cmpps opcode test.
index 1bcb101af427f7cd1baba3d7ed2f76d1cb7d3787..c5e2921623f6df1675bdd0b7e06db04fa1246770 100644 (file)
@@ -104,4 +104,5 @@ if { ([istarget "*-*-*elf*"]
     run_dump_test "symver" 
     run_elf_list_test "type" "" "" "-s" "| grep \"1 \\\[FONTC\\\]\""
     run_dump_test "section6" 
+    run_dump_test "section7" 
 }
diff --git a/gas/testsuite/gas/elf/section7.d b/gas/testsuite/gas/elf/section7.d
new file mode 100644 (file)
index 0000000..94c57c6
--- /dev/null
@@ -0,0 +1,21 @@
+#objdump: -s
+#name: elf section7
+
+.*: +file format .*
+
+# The MIPS includes a 'section .reginfo' and such here.
+#...
+Contents of section .bar:
+ 0000 00000000 00000000 0000 .*
+Contents of section .bar1:
+ 0000 0102 .*
+Contents of section .bar2:
+ 0000 0102 .*
+Contents of section .bar3:
+ 0000 0103 .*
+Contents of section .bar4:
+ 0000 04 .*
+Contents of section .text:
+ 0000 feff .*
+# Arm includes a .ARM.attributes section here
+#...
diff --git a/gas/testsuite/gas/elf/section7.s b/gas/testsuite/gas/elf/section7.s
new file mode 100644 (file)
index 0000000..fe9aaa1
--- /dev/null
@@ -0,0 +1,38 @@
+       .section .bar,"a"
+       .byte 0
+.pushsection .bar1,2,"a"
+       .byte 2
+.popsection
+       .byte 0
+.pushsection .bar2,3,"a"
+       .byte 2
+.popsection
+       .byte 0
+.pushsection .bar3,2,"a", %progbits
+       .byte 3
+.popsection
+       .byte 0
+.pushsection .bar4
+       .byte 4
+.popsection
+       .byte 0
+.pushsection        .text,1,"axG",%progbits,foo,comdat
+       .byte -1
+.popsection
+       .byte 0
+.pushsection        .text,"axG",%progbits,foo,comdat
+       .byte -2
+.popsection
+       .byte 0
+.pushsection .bar1,"a"
+       .byte 1
+.popsection
+       .byte 0
+.pushsection .bar3,"a", %progbits
+       .byte 1
+.popsection
+       .byte 0
+.pushsection .bar2,"a"
+       .byte 1
+.popsection
+       .byte 0
This page took 0.057367 seconds and 4 git commands to generate.