From: H.J. Lu Date: Fri, 29 Dec 2006 17:56:32 +0000 (+0000) Subject: bfd/ X-Git-Tag: drow-reverse-20070409-branchpoint~982 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=83ad0046cfa785068be98b08efadcad6854c1a12;p=external%2Fbinutils.git 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e0b3a63..5a74f9c 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 6af091b..10b9bcd 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 9a9daf8..2ff0c39 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 0000000..5fd57ea --- /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 0000000..1ff250e --- /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 0000000..7c1938f --- /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 0000000..75c94e0 --- /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 0000000..abd39aa --- /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 (); +}