Index: gas/NEWS =================================================================== RCS file: /cvs/src/src/gas/NEWS,v retrieving revision 1.111 diff -p -u -r1.111 NEWS --- gas/NEWS 29 Sep 2009 14:17:06 -0000 1.111 +++ gas/NEWS 23 Jan 2010 18:51:03 -0000 @@ -4,6 +4,9 @@ Changes in 2.20: +* GAS now understands an extended syntax in the .section directive flags + for COFF targets that allows the section's alignment to be specified. + * GNU/Linux targets now supports "gnu_unique_object" as a value in the .type pseudo op. It marks the symbol as being globally unique in the entire process. Index: gas/config/obj-coff.c =================================================================== RCS file: /cvs/src/src/gas/config/obj-coff.c,v retrieving revision 1.103 diff -p -u -r1.103 obj-coff.c --- gas/config/obj-coff.c 11 Dec 2009 13:42:10 -0000 1.103 +++ gas/config/obj-coff.c 23 Jan 2010 18:51:03 -0000 @@ -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. @@ -1551,7 +1553,7 @@ obj_coff_section (int ignore ATTRIBUTE_U { /* Strip out the section name. */ char *section_name; - char c; + char c, alignment = -1; char *name; unsigned int exp; flagword flags, oldflags; @@ -1594,6 +1596,11 @@ obj_coff_section (int ignore ATTRIBUTE_U attr != '"' && ! is_end_of_line[attr]) { + if (ISDIGIT (attr)) + { + alignment = attr - '0'; + continue; + } switch (attr) { case 'b': @@ -1670,6 +1677,8 @@ obj_coff_section (int ignore ATTRIBUTE_U } 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: gas/doc/as.texinfo =================================================================== RCS file: /cvs/src/src/gas/doc/as.texinfo,v retrieving revision 1.214 diff -p -u -r1.214 as.texinfo --- gas/doc/as.texinfo 29 Oct 2009 00:19:19 -0000 1.214 +++ gas/doc/as.texinfo 23 Jan 2010 18:51:04 -0000 @@ -5768,6 +5768,8 @@ shared section (meaningful for PE target 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: gas/testsuite/gas/pe/pe.exp =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/pe/pe.exp,v retrieving revision 1.1 diff -p -u -r1.1 pe.exp --- gas/testsuite/gas/pe/pe.exp 19 May 2009 16:08:07 -0000 1.1 +++ gas/testsuite/gas/pe/pe.exp 23 Jan 2010 18:51:05 -0000 @@ -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" Index: gas/testsuite/gas/pe/section-align-1.d =================================================================== RCS file: gas/testsuite/gas/pe/section-align-1.d diff -N gas/testsuite/gas/pe/section-align-1.d --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gas/testsuite/gas/pe/section-align-1.d 23 Jan 2010 18:51:05 -0000 @@ -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 Index: gas/testsuite/gas/pe/section-align-1.s =================================================================== RCS file: gas/testsuite/gas/pe/section-align-1.s diff -N gas/testsuite/gas/pe/section-align-1.s --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gas/testsuite/gas/pe/section-align-1.s 23 Jan 2010 18:51:05 -0000 @@ -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 Index: gas/testsuite/gas/pe/section-align-3.d =================================================================== RCS file: gas/testsuite/gas/pe/section-align-3.d diff -N gas/testsuite/gas/pe/section-align-3.d --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gas/testsuite/gas/pe/section-align-3.d 23 Jan 2010 18:51:05 -0000 @@ -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 Index: gas/testsuite/gas/pe/section-align-3.s =================================================================== RCS file: gas/testsuite/gas/pe/section-align-3.s diff -N gas/testsuite/gas/pe/section-align-3.s --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gas/testsuite/gas/pe/section-align-3.s 23 Jan 2010 18:51:05 -0000 @@ -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