gas/ChangeLog:
authorDave Korn <dave.korn@artimi.com>
Wed, 27 Jan 2010 22:01:38 +0000 (22:01 +0000)
committerDave Korn <dave.korn@artimi.com>
Wed, 27 Jan 2010 22:01:38 +0000 (22:01 +0000)
* 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.

gas/ChangeLog
gas/NEWS
gas/config/obj-coff.c
gas/doc/as.texinfo
gas/testsuite/ChangeLog
gas/testsuite/gas/pe/pe.exp
gas/testsuite/gas/pe/section-align-1.d [new file with mode: 0644]
gas/testsuite/gas/pe/section-align-1.s [new file with mode: 0644]
gas/testsuite/gas/pe/section-align-3.d [new file with mode: 0644]
gas/testsuite/gas/pe/section-align-3.s [new file with mode: 0644]

index b045c558766b59d713b90462b89101e8d1b4cfa3..685e69983a783b19a5aa329bfe5c0330acf53c1f 100644 (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.
index adb31f5f8fd14531427ef44a8330eba0a7d5c76c..de5255e033c548648ac1da0699de79887cb95b3b 100644 (file)
--- 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:
index aa621b96d56e45198e109cc242d5073fd91e8741..59fe032e10f1a731809beaaca43143559ec5b916 100644 (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)
index 6065559ba34cd14354b0e436e6fee41bd3f1d615..471b5452d305d397bc10d05d0353ddc67c1a19b3 100644 (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
index b12983d6c663ec4c5666d0f1268c43520e746d01..75e6054305cf54a397b0fdfec54b37172f03b243 100644 (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.
index 87e2a3e097a82a7d97eca21f1c7a75a53bc4a0cb..aadf972c7cddfb267bc4334cb34fdd964cf5d90e 100755 (executable)
@@ -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 (file)
index 0000000..01fb471
--- /dev/null
@@ -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 (file)
index 0000000..de1f9b5
--- /dev/null
@@ -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 (file)
index 0000000..1f37103
--- /dev/null
@@ -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 (file)
index 0000000..fc7b9ea
--- /dev/null
@@ -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