diff options
author | Nick Clifton <nickc@redhat.com> | 2003-04-15 09:38:11 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2003-04-15 09:38:11 +0000 |
commit | ca4fa240d6b9d4d7a2b3131ae47689530351674b (patch) | |
tree | 86ea0a9484217062b32eedcc7fba9607873216fd /ld | |
parent | c2dcd04ec8f55fb69fabb24fae58555b5ab0a684 (diff) | |
download | binutils-gdb-ca4fa240d6b9d4d7a2b3131ae47689530351674b.tar.gz |
Properly report filename for alignment reduction.
Add test for alignment reduction.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-elfcomm/common1a.c | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-elfcomm/common1b.c | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-elfcomm/elfcomm.exp | 92 |
4 files changed, 105 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c4105f1c621..b9cf3490d8c 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2003-04-14 H.J. Lu <hjl@gnu.org> + + * ld-elfcom: New directory. + * ld-elfcom/elfcom.exp: New file: Test alignment of common symbols + under ELF. + * ld-elfcom/common1a.c: New file: Test source code. + * ld-elfcom/common1b.c: New file: Test source code. + 2003-04-15 Rohit Kumar Srivastava <rohits@kpitcummins.com> * ld-sh/sh64/crange3-cmpct.rd: Replace occurrances of 'Hitachi' diff --git a/ld/testsuite/ld-elfcomm/common1a.c b/ld/testsuite/ld-elfcomm/common1a.c new file mode 100644 index 00000000000..eb8fbef5b25 --- /dev/null +++ b/ld/testsuite/ld-elfcomm/common1a.c @@ -0,0 +1,2 @@ +char foo1 [2] __attribute__((aligned(64))); +char foo2 [2] __attribute__((aligned(128))); diff --git a/ld/testsuite/ld-elfcomm/common1b.c b/ld/testsuite/ld-elfcomm/common1b.c new file mode 100644 index 00000000000..4ed9e039c0e --- /dev/null +++ b/ld/testsuite/ld-elfcomm/common1b.c @@ -0,0 +1,3 @@ +static char dummy1 = 'X'; +char foo1 [] = "Aligned at odd byte."; +char foo2 [4]; diff --git a/ld/testsuite/ld-elfcomm/elfcomm.exp b/ld/testsuite/ld-elfcomm/elfcomm.exp new file mode 100644 index 00000000000..199e83e3bab --- /dev/null +++ b/ld/testsuite/ld-elfcomm/elfcomm.exp @@ -0,0 +1,92 @@ +# Expect script for commom symbol tests +# Copyright 2003 Free Software Foundation, Inc. +# +# This file 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. +# +# Written by H.J. Lu (hjl@gnu.org) +# + +# Make sure that ld correctly handles common symbols in ELF. + +# This test can only be run on ELF platforms. +# Square bracket expressions seem to confuse istarget. +if { ![istarget hppa*64*-*-hpux*] \ + && ![istarget *-*-gnu] \ + && ![istarget *-*-linux*] \ + && ![istarget *-*-elf] } { + return +} + +if { [istarget *-*-linux*aout*] \ + || [istarget *-*-linux*oldld*] } { + return +} + +proc dump_common1 { testname } { + global exec_output + + send_log "readelf -s tmpdir/common1.o | grep foo\n" + catch "exec readelf -s tmpdir/common1.o | grep foo" exec_output + if { ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0\]*)80(\[ \]+)4(\[ \]+)OBJECT(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)COM(\[ \]+)foo2" $exec_output] + || ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0\]*)1(\[ \]+)21(\[ \]+)OBJECT(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(\[0-9\]+)(\[ \]+)foo1" $exec_output] } { + send_log "$exec_output\n" + verbose $exec_output + fail $testname + return 0 + } + + return 1 +} + +set test1 "size/aligment change of commom symbols" +if { ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1a.c tmpdir/common1a.o] + || ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1b.c tmpdir/common1b.o] } { + unresolved $test1 + return +} + +global ld +global link_output + +if { [ld_simple_link $ld tmpdir/common1.o "-r tmpdir/common1a.o tmpdir/common1b.o"] } { + unresolved $test1 + return +} + +if { ![regexp "Warning: alignment 1 of symbol \`foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] + || ![regexp "Warning: size of symbol \`foo1\' changed from 2 in tmpdir/common1a.o to 21 in tmpdir/common1b.o" $link_output] } { + fail "$test1 (warning 1)" +} else { + pass "$test1 (warning 1)" +} + +if { [dump_common1 "$test1 (change 1)"] } { + pass "$test1 (change 1)" +} + +if { [ld_simple_link $ld tmpdir/common1.o "-r tmpdir/common1b.o tmpdir/common1a.o"] } { + unresolved $test1 + return +} + +if { ![regexp "Warning: alignment 1 of symbol \`foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } { + fail "$test1 (warning 2)" +} else { + pass "$test1 (warningi 2)" +} + +if { [dump_common1 "$test1 (change 2)"] } { + pass "$test1 (change 2)" +} |