gas/ChangeLog:

* NEWS: Mention new feature.
	* config/obj-coff.c (obj_coff_section): Accept digits and use
	to override default section alignment power if specified.
	* doc/as.texinfo (.section directive): Update documentation.

gas/testsuite/ChangeLog:

	* gas/pe/section-align-1.s: New test source file.
	* gas/pe/section-align-1.d: Likewise control script.
	* gas/pe/section-align-2.s: Likewise ...
	* gas/pe/section-align-2.d: ... and likewise.
	* gas/pe/pe.exp: Invoke new testcases.
This commit is contained in:
Dave Korn 2010-01-27 22:01:38 +00:00
parent 40b27cdc59
commit 31907d5e90
10 changed files with 143 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2010-01-27 Dave Korn <dave.korn.cygwin@gmail.com>
* NEWS: Mention new feature.
* config/obj-coff.c (obj_coff_section): Accept digits and use
to override default section alignment power if specified.
* doc/as.texinfo (.section directive): Update documentation.
2010-01-27 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (avxscalar): New.

View File

@ -1,5 +1,10 @@
-*- text -*-
* GAS now understands an extended syntax in the .section directive flags
for COFF targets that allows the section's alignment to be specified. This
feature has also been backported to the 2.20 release series, starting with
2.20.1.
* Add support for the Renesas RX processor.
Changes in 2.20:

View File

@ -23,6 +23,7 @@
#define OBJ_HEADER "obj-coff.h"
#include "as.h"
#include "safe-ctype.h"
#include "obstack.h"
#include "subsegs.h"
@ -1540,6 +1541,7 @@ coff_frob_file_after_relocs (void)
'r' for read-only data
's' for shared data (PE)
'y' for noread
'0' - '9' for power-of-two alignment (GNU extension).
But if the argument is not a quoted string, treat it as a
subsegment number.
@ -1552,6 +1554,7 @@ obj_coff_section (int ignore ATTRIBUTE_UNUSED)
/* Strip out the section name. */
char *section_name;
char c;
int alignment = -1;
char *name;
unsigned int exp;
flagword flags, oldflags;
@ -1594,6 +1597,11 @@ obj_coff_section (int ignore ATTRIBUTE_UNUSED)
attr != '"'
&& ! is_end_of_line[attr])
{
if (ISDIGIT (attr))
{
alignment = attr - '0';
continue;
}
switch (attr)
{
case 'b':
@ -1670,6 +1678,8 @@ obj_coff_section (int ignore ATTRIBUTE_UNUSED)
}
sec = subseg_new (name, (subsegT) exp);
if (alignment >= 0)
sec->alignment_power = alignment;
oldflags = bfd_get_section_flags (stdoutput, sec);
if (oldflags == SEC_NO_FLAGS)

View File

@ -5768,6 +5768,8 @@ shared section (meaningful for PE targets)
ignored. (For compatibility with the ELF version)
@item y
section is not readable (meaningful for PE targets)
@item 0-9
single-digit power-of-two section alignment (GNU extension)
@end table
If no flags are specified, the default flags depend upon the section name. If

View File

@ -1,3 +1,11 @@
2010-01-27 Dave Korn <dave.korn.cygwin@gmail.com>
* gas/pe/section-align-1.s: New test source file.
* gas/pe/section-align-1.d: Likewise control script.
* gas/pe/section-align-2.s: Likewise ...
* gas/pe/section-align-2.d: ... and likewise.
* gas/pe/pe.exp: Invoke new testcases.
2010-01-27 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/avx-scalar-intel.d: New.

View File

@ -32,3 +32,6 @@ run_dump_test "aligncomm-a"
run_dump_test "aligncomm-b"
run_dump_test "aligncomm-c"
run_dump_test "aligncomm-d"
run_dump_test "section-align-1"
run_dump_test "section-align-3"

View File

@ -0,0 +1,29 @@
#objdump: -h
#name: section alignment
# Test that alignment works in .section directives.
.*: .*
Sections:
Idx Name *Size *VMA *LMA *File off *Algn
0 \.text 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*[24]
ALLOC, LOAD, READONLY, CODE
1 \.data 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*[24]
ALLOC, LOAD, DATA
2 \.bss 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*[24]
ALLOC
3 \.none 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*0
ALLOC, LOAD, READONLY, DATA
4 \.zero 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*0
ALLOC, LOAD, READONLY, DATA
5 \.one 0*0000001 0*0000000 0*0000000 0*00001a4 2\*\*0
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 \.two 0*0000002 0*0000000 0*0000000 0*00001a5 2\*\*0
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 \.three 0*0000003 0*0000000 0*0000000 0*00001a7 2\*\*0
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 \.four 0*0000004 0*0000000 0*0000000 0*00001aa 2\*\*0
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 \.five 0*0000005 0*0000000 0*0000000 0*00001ae 2\*\*0
CONTENTS, ALLOC, LOAD, READONLY, DATA

View File

@ -0,0 +1,15 @@
.section .none,"dr0"
.section .zero,"dr0"
.ascii ""
.section .one,"dr0"
.ascii "1"
.section .two,"dr0"
.ascii "12"
.section .three,"dr0"
.ascii "123"
.section .four,"dr0"
.ascii "1234"
.section .five,"dr0"
.ascii "12345"
.end

View File

@ -0,0 +1,39 @@
#objdump: -h
#name: section alignment
# Test that alignment works in .section directives.
.*: .*
Sections:
Idx Name *Size *VMA *LMA *File off *Algn
0 \.text 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*[24]
ALLOC, LOAD, READONLY, CODE
1 \.data 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*[24]
ALLOC, LOAD, DATA
2 \.bss 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*[24]
ALLOC
3 \.none 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*3
ALLOC, LOAD, READONLY, DATA
4 \.zero 0*0000000 0*0000000 0*0000000 0*0000000 2\*\*3
ALLOC, LOAD, READONLY, DATA
5 \.one 0*0000008 0*0000000 0*0000000 0*000026c 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 \.two 0*0000008 0*0000000 0*0000000 0*0000274 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 \.three 0*0000008 0*0000000 0*0000000 0*000027c 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 \.four 0*0000008 0*0000000 0*0000000 0*0000284 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 \.five 0*0000008 0*0000000 0*0000000 0*000028c 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
10 \.six 0*0000008 0*0000000 0*0000000 0*0000294 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
11 \.seven 0*0000008 0*0000000 0*0000000 0*000029c 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
12 \.eight 0*0000008 0*0000000 0*0000000 0*00002a4 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
13 \.nine 0*0000010 0*0000000 0*0000000 0*00002ac 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA
14 \.ten 0*0000010 0*0000000 0*0000000 0*00002bc 2\*\*3
CONTENTS, ALLOC, LOAD, READONLY, DATA

View File

@ -0,0 +1,25 @@
.section .none,"dr3"
.section .zero,"dr3"
.ascii ""
.section .one,"dr3"
.ascii "1"
.section .two,"dr3"
.ascii "12"
.section .three,"dr3"
.ascii "123"
.section .four,"dr3"
.ascii "1234"
.section .five,"dr3"
.ascii "12345"
.section .six,"dr3"
.ascii "123456"
.section .seven,"dr3"
.ascii "1234567"
.section .eight,"dr3"
.ascii "12345678"
.section .nine,"dr3"
.ascii "123456789"
.section .ten,"dr3"
.ascii "1234567890"
.end