aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/NEWS5
-rw-r--r--gas/config/obj-coff.c10
-rw-r--r--gas/doc/as.texinfo2
-rw-r--r--gas/testsuite/ChangeLog8
-rwxr-xr-xgas/testsuite/gas/pe/pe.exp3
-rw-r--r--gas/testsuite/gas/pe/section-align-1.d29
-rw-r--r--gas/testsuite/gas/pe/section-align-1.s15
-rw-r--r--gas/testsuite/gas/pe/section-align-3.d39
-rw-r--r--gas/testsuite/gas/pe/section-align-3.s25
10 files changed, 143 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index b045c55..685e699 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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.
diff --git a/gas/NEWS b/gas/NEWS
index adb31f5..de5255e 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -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:
diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c
index aa621b9..59fe032 100644
--- a/gas/config/obj-coff.c
+++ b/gas/config/obj-coff.c
@@ -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)
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index 6065559..471b545 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -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
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index b12983d..75e6054 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -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.
diff --git a/gas/testsuite/gas/pe/pe.exp b/gas/testsuite/gas/pe/pe.exp
index 87e2a3e..aadf972 100755
--- a/gas/testsuite/gas/pe/pe.exp
+++ b/gas/testsuite/gas/pe/pe.exp
@@ -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"
diff --git a/gas/testsuite/gas/pe/section-align-1.d b/gas/testsuite/gas/pe/section-align-1.d
new file mode 100644
index 0000000..01fb471
--- /dev/null
+++ b/gas/testsuite/gas/pe/section-align-1.d
@@ -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
diff --git a/gas/testsuite/gas/pe/section-align-1.s b/gas/testsuite/gas/pe/section-align-1.s
new file mode 100644
index 0000000..de1f9b5
--- /dev/null
+++ b/gas/testsuite/gas/pe/section-align-1.s
@@ -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
diff --git a/gas/testsuite/gas/pe/section-align-3.d b/gas/testsuite/gas/pe/section-align-3.d
new file mode 100644
index 0000000..1f37103
--- /dev/null
+++ b/gas/testsuite/gas/pe/section-align-3.d
@@ -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
diff --git a/gas/testsuite/gas/pe/section-align-3.s b/gas/testsuite/gas/pe/section-align-3.s
new file mode 100644
index 0000000..fc7b9ea
--- /dev/null
+++ b/gas/testsuite/gas/pe/section-align-3.s
@@ -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