Fix for problem with default alignment of .comm
authorTom Rix <trix@redhat.com>
Wed, 20 Jun 2001 13:34:10 +0000 (13:34 +0000)
committerTom Rix <trix@redhat.com>
Wed, 20 Jun 2001 13:34:10 +0000 (13:34 +0000)
gas/ChangeLog
gas/config/tc-ppc.c
gas/testsuite/ChangeLog
gas/testsuite/gas/ppc/aix.exp [new file with mode: 0644]
gas/testsuite/gas/ppc/align.s [new file with mode: 0644]

index a9a0332b9408db2e5148f8876a25147d7339190c..4f30ec34e1b5e8cdfbf634bebc55b96d02a79a21 100644 (file)
@@ -1,3 +1,7 @@
+2000-06-20  Tom Rix <trix@redhat.com>
+
+       * config/tc-ppc.c (ppc_comm): Change default alignment to 4 bytes.
+
 2001-06-18  H.J. Lu <hjl@gnu.org>
 
         * doc/Makefile.am (info): Depend on $(MANS).
index b98f7517738f9dda3a4add2ed9049146328e301b..f0e23d56cf7a75dcf0ccdcb0e6074f39a1c6dfac 100644 (file)
@@ -2340,7 +2340,8 @@ static boolean ppc_stab_symbol;
 
 /* The .comm and .lcomm pseudo-ops for XCOFF.  XCOFF puts common
    symbols in the .bss segment as though they were local common
-   symbols, and uses a different smclas.  */
+   symbols, and uses a different smclas.  The native Aix 4.3.3 assember
+   aligns .comm and .lcomm to 4 bytes.  */
 
 static void
 ppc_comm (lcomm)
@@ -2382,7 +2383,7 @@ ppc_comm (lcomm)
     {
       /* The third argument to .comm is the alignment.  */
       if (*input_line_pointer != ',')
-       align = 3;
+       align = 2;
       else
        {
          ++input_line_pointer;
@@ -2390,7 +2391,7 @@ ppc_comm (lcomm)
          if (align <= 0)
            {
              as_warn (_("ignoring bad alignment"));
-             align = 3;
+             align = 2;
            }
        }
     }
@@ -2399,11 +2400,7 @@ ppc_comm (lcomm)
       char *lcomm_name;
       char lcomm_endc;
 
-      if (size <= 1)
-       align = 0;
-      else if (size <= 2)
-       align = 1;
-      else if (size <= 4)
+      if (size <= 4)
        align = 2;
       else
        align = 3;
index 615b92cc16bee5c15f9546a4534b69958b39b1ba..441cbd9d72e641ee734585ac8c6481dd369b04fe 100644 (file)
@@ -1,3 +1,8 @@
+2001-06-18  Tom Rix  <trix@redhat.com>
+
+       * gas/ppc/aix.exp: New file, aix specific tests.
+       * gas/ppc/align.s: New file, .comm alignment test.
+       
 2001-06-13  Andreas Jaeger  <aj@suse.de>
 
        * gas/vtable/vtable.exp (run_list_test): Don't run on sparc64.
diff --git a/gas/testsuite/gas/ppc/aix.exp b/gas/testsuite/gas/ppc/aix.exp
new file mode 100644 (file)
index 0000000..46eeb3e
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Contributed by Red Hat
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+#
+
+#
+# Aix on PowerPC tests
+#
+proc do_align_test {} {
+    set testname "align.s: Alignment of symbols part 1"
+    set x0 0
+    set x1 0
+    set x2 0
+    set x3 0
+    set x4 0
+
+    set testname "align.s (part 2)"
+
+    if [gas_test_old "align.s" "" "Alignment of symbols part 1"] {
+       objdump_start_no_subdir "a.out" "-t"
+
+       while 1 {
+           expect {
+               -re "AUX val    16 prmhsh 0 snhsh 0 typ 3 algn 2 clss 5 stb 0 snstb 0" { set x0 1 }
+               -re "AUX val    32 prmhsh 0 snhsh 0 typ 3 algn 1 clss 5 stb 0 snstb 0" { set x1 1 }
+               -re "AUX val    64 prmhsh 0 snhsh 0 typ 3 algn 2 clss 5 stb 0 snstb 0" { set x2 1 }
+               -re "AUX val   128 prmhsh 0 snhsh 0 typ 3 algn 3 clss 5 stb 0 snstb 0" { set x3 1 }
+               -re "AUX val   256 prmhsh 0 snhsh 0 typ 3 algn 4 clss 5 stb 0 snstb 0" { set x4 1 }
+               -re "\[^\n\]*\n"                                { }
+               timeout                         { perror "timeout\n"; break }
+               eof                             { break }
+           }
+       }
+
+       objdump_finish
+
+       if [all_ones $x0 $x1 $x2 $x3 $x4] then {
+           pass $testname
+       } else {
+           fail $testname
+       }
+    }
+}
+
+
+if [istarget powerpc*-*-aix4.3*] then {
+
+    # Make sure that symbols are correctly aligned 
+    do_align_test
+}
diff --git a/gas/testsuite/gas/ppc/align.s b/gas/testsuite/gas/ppc/align.s
new file mode 100644 (file)
index 0000000..fbb630a
--- /dev/null
@@ -0,0 +1,6 @@
+       .comm default_align_4,16
+       .comm align_1,32,1
+       .comm align_2,64,2
+       .comm align_4,128,3
+       .comm align_8,256,4
+