From 1ad63b2f000e4fea64a8fa6a11a3015aadd6e8fe Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Wed, 20 Jun 2001 13:34:10 +0000 Subject: [PATCH] Fix for problem with default alignment of .comm --- gas/ChangeLog | 4 +++ gas/config/tc-ppc.c | 13 +++----- gas/testsuite/ChangeLog | 5 +++ gas/testsuite/gas/ppc/aix.exp | 63 +++++++++++++++++++++++++++++++++++ gas/testsuite/gas/ppc/align.s | 6 ++++ 5 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 gas/testsuite/gas/ppc/aix.exp create mode 100644 gas/testsuite/gas/ppc/align.s diff --git a/gas/ChangeLog b/gas/ChangeLog index a9a0332b94..4f30ec34e1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,7 @@ +2000-06-20 Tom Rix + + * config/tc-ppc.c (ppc_comm): Change default alignment to 4 bytes. + 2001-06-18 H.J. Lu * doc/Makefile.am (info): Depend on $(MANS). diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index b98f751773..f0e23d56cf 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -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; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 615b92cc16..441cbd9d72 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2001-06-18 Tom Rix + + * gas/ppc/aix.exp: New file, aix specific tests. + * gas/ppc/align.s: New file, .comm alignment test. + 2001-06-13 Andreas Jaeger * 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 index 0000000000..46eeb3e133 --- /dev/null +++ b/gas/testsuite/gas/ppc/aix.exp @@ -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 index 0000000000..fbb630a291 --- /dev/null +++ b/gas/testsuite/gas/ppc/align.s @@ -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 +