From 83ad0046cfa785068be98b08efadcad6854c1a12 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 29 Dec 2006 17:56:32 +0000 Subject: [PATCH] bfd/ 2006-12-29 H.J. Lu * elflink.c (elf_link_add_object_symbols): Remember the symbol size only if it is defined. ld/testsuite/ 2006-12-29 H.J. Lu * ld-elf/wrap.exp: New file. * ld-elf/wrap1.c: Likewise. * ld-elf/wrap1.out: Likewise. * ld-elf/wrap1a.c: Likewise. * ld-elf/wrap1b.c: Likewise. --- bfd/ChangeLog | 5 ++++ bfd/elflink.c | 8 ++++-- ld/testsuite/ChangeLog | 8 ++++++ ld/testsuite/ld-elf/wrap.exp | 54 +++++++++++++++++++++++++++++++++++ ld/testsuite/ld-elf/wrap1.c | 8 ++++++ ld/testsuite/ld-elf/wrap1.out | 3 ++ ld/testsuite/ld-elf/wrap1a.c | 6 ++++ ld/testsuite/ld-elf/wrap1b.c | 16 +++++++++++ 8 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 ld/testsuite/ld-elf/wrap.exp create mode 100644 ld/testsuite/ld-elf/wrap1.c create mode 100644 ld/testsuite/ld-elf/wrap1.out create mode 100644 ld/testsuite/ld-elf/wrap1a.c create mode 100644 ld/testsuite/ld-elf/wrap1b.c diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e0b3a630607..5a74f9c5e4b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2006-12-29 H.J. Lu + + * elflink.c (elf_link_add_object_symbols): Remember the symbol + size only if it is defined. + 2006-12-25 Kazu Hirata * archures.c (bfd_mach_cpu32_fido): New. diff --git a/bfd/elflink.c b/bfd/elflink.c index 6af091b1015..10b9bcd0b13 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -4035,11 +4035,13 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) } } - /* Remember the symbol size and type. */ - if (isym->st_size != 0 + /* Remember the symbol size if it isn't undefined. */ + if ((isym->st_size != 0 && isym->st_shndx != SHN_UNDEF) && (definition || h->size == 0)) { - if (h->size != 0 && h->size != isym->st_size && ! size_change_ok) + if (h->size != 0 + && h->size != isym->st_size + && ! size_change_ok) (*_bfd_error_handler) (_("Warning: size of symbol `%s' changed" " from %lu in %B to %lu in %B"), diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 9a9daf86a59..2ff0c39945a 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2006-12-29 H.J. Lu + + * ld-elf/wrap.exp: New file. + * ld-elf/wrap1.c: Likewise. + * ld-elf/wrap1.out: Likewise. + * ld-elf/wrap1a.c: Likewise. + * ld-elf/wrap1b.c: Likewise. + 2006-12-18 Pedro Alves * ld-pe/direct.exp: New file. diff --git a/ld/testsuite/ld-elf/wrap.exp b/ld/testsuite/ld-elf/wrap.exp new file mode 100644 index 00000000000..5fd57ea7d62 --- /dev/null +++ b/ld/testsuite/ld-elf/wrap.exp @@ -0,0 +1,54 @@ +# Expect script for wrap ELF tests. +# Copyright 2006 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. +# + +# Exclude non-ELF targets. + +if ![is_elf_format] { + return +} + +# The following tests require running the executable generated by ld. +if ![isnative] { + return +} + +# Check if compiler works +if { [which $CC] == 0 } { + return +} + +set build_tests { + {"Build libwrap1a.so" + "-shared" "-fPIC" + {wrap1a.c} {} "libwrap1a.so"} + {"Build libwrap1b.so" + "-shared tmpdir/libwrap1a.so" "-fPIC" + {wrap1b.c} {} "libwrap1b.so"} +} + +set run_tests { + {"Run with libwrap1a.so and libwrap1b.so" + "--wrap par tmpdir/libwrap1a.so tmpdir/libwrap1b.so" "" + {wrap1.c} "wrap1" "wrap1.out"} + {"Run with libwrap1b.so and libwrap1a.so" + "--wrap par tmpdir/libwrap1b.so tmpdir/libwrap1a.so" "" + {wrap1.c} "wrap1" "wrap1.out"} +} + +run_cc_link_tests $build_tests +run_ld_link_exec_tests [] $run_tests diff --git a/ld/testsuite/ld-elf/wrap1.c b/ld/testsuite/ld-elf/wrap1.c new file mode 100644 index 00000000000..1ff250e2dba --- /dev/null +++ b/ld/testsuite/ld-elf/wrap1.c @@ -0,0 +1,8 @@ +extern void par (void); + +int +main (void) +{ + par (); + return 0; +} diff --git a/ld/testsuite/ld-elf/wrap1.out b/ld/testsuite/ld-elf/wrap1.out new file mode 100644 index 00000000000..7c1938f43b6 --- /dev/null +++ b/ld/testsuite/ld-elf/wrap1.out @@ -0,0 +1,3 @@ +__wrap_par +__real_par +par diff --git a/ld/testsuite/ld-elf/wrap1a.c b/ld/testsuite/ld-elf/wrap1a.c new file mode 100644 index 00000000000..75c94e00a44 --- /dev/null +++ b/ld/testsuite/ld-elf/wrap1a.c @@ -0,0 +1,6 @@ +#include + +void par (void) +{ + printf ("par\n"); +} diff --git a/ld/testsuite/ld-elf/wrap1b.c b/ld/testsuite/ld-elf/wrap1b.c new file mode 100644 index 00000000000..abd39aa9715 --- /dev/null +++ b/ld/testsuite/ld-elf/wrap1b.c @@ -0,0 +1,16 @@ +#include + +extern void par (void); + +void __real_par (void) +{ + printf ("__real_par \n"); + par (); +} + +void +__wrap_par (void) +{ + printf ("__wrap_par \n"); + __real_par (); +} -- 2.30.2