2006-12-29  H.J. Lu  <hongjiu.lu@intel.com>

	* elflink.c (elf_link_add_object_symbols): Remember the symbol
	size only if it is defined.

ld/testsuite/

2006-12-29  H.J. Lu  <hongjiu.lu@intel.com>

	* 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.
This commit is contained in:
H.J. Lu 2006-12-29 17:56:32 +00:00
parent 9b134994af
commit 83ad0046cf
8 changed files with 105 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2006-12-29 H.J. Lu <hongjiu.lu@intel.com>
* elflink.c (elf_link_add_object_symbols): Remember the symbol
size only if it is defined.
2006-12-25 Kazu Hirata <kazu@codesourcery.com>
* archures.c (bfd_mach_cpu32_fido): New.

View File

@ -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"),

View File

@ -1,3 +1,11 @@
2006-12-29 H.J. Lu <hongjiu.lu@intel.com>
* 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 <pedro_alves@portugalmail.pt>
* ld-pe/direct.exp: New file.

View File

@ -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

View File

@ -0,0 +1,8 @@
extern void par (void);
int
main (void)
{
par ();
return 0;
}

View File

@ -0,0 +1,3 @@
__wrap_par
__real_par
par

View File

@ -0,0 +1,6 @@
#include <stdio.h>
void par (void)
{
printf ("par\n");
}

View File

@ -0,0 +1,16 @@
#include <stdio.h>
extern void par (void);
void __real_par (void)
{
printf ("__real_par \n");
par ();
}
void
__wrap_par (void)
{
printf ("__wrap_par \n");
__real_par ();
}