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.
This commit is contained in:
H.J. Lu 2007-10-27 17:45:53 +00:00
parent bfe10c0fae
commit 9cfc3331a8
7 changed files with 96 additions and 4 deletions

View 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.

View 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);

View 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

View 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.

View 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"
}

View File

@ -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
#...

View File

@ -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