This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Fix ELF visibility handling


On Tue, May 20, 2003 at 12:19:19AM +0200, Jakub Jelinek wrote:
> On Wed, Apr 09, 2003 at 09:22:52AM -0700, H. J. Lu wrote:
> > 2003-04-01  H.J. Lu <hjl@gnu.org>
> > 
> > 	(elf_link_output_extsym): Warn if a forced local symbol is
> > 	referenced from dynamic objects. Make non-weak undefined symbol
> > 	with non-default visibility a fatal error.
> 
> This change broke static linking with hidden common symbols
> (testcase included in the patch below).

I don't think it works with dynamic linking either. I found another
bug. I will post a testcase and a patch later.

> Any reason why you use h->root.type != bfd_link_hash_undefweak
> which can well be a normal bfd_link_hash_defined symbol?

I have an old patch to fix a related problem:

http://sources.redhat.com/ml/binutils/2003-03/msg00080.html

in a different way. Then I changed it and forgot to update another
patch. That is what happened when you had so many patches on top
of each other.

> 
> 2003-05-20  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* elflink.h (elf_link_output_extsym): Only issue error about !=
> 	STV_DEFAULT symbols if they are bfd_link_hash_undefined.
> 
> 	* ld-elfvsb/sh3.c: New test.
> 	* ld-elfvsb/elfvsb.exp: Add sh3.
> 
> --- bfd/elflink.h.jj	2003-05-19 17:12:39.000000000 -0400
> +++ bfd/elflink.h	2003-05-19 17:43:12.000000000 -0400
> @@ -4622,7 +4622,7 @@ elf_link_output_extsym (h, data)
>    if (! finfo->info->relocateable
>        && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
>        && ELF_ST_BIND (sym.st_info) != STB_WEAK
> -      && h->root.type != bfd_link_hash_undefweak
> +      && h->root.type == bfd_link_hash_undefined
>        && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
>      {
>        (*_bfd_error_handler)
> --- ld/testsuite/ld-elfvsb/sh3.c.jj	2003-05-19 17:51:14.000000000 -0400
> +++ ld/testsuite/ld-elfvsb/sh3.c	2003-05-19 17:51:08.000000000 -0400
> @@ -0,0 +1,7 @@
> +int foo;
> +asm (".hidden foo");
> +
> +int main (void)
> +{
> +  return foo;
> +}
> --- ld/testsuite/ld-elfvsb/elfvsb.exp.jj	2003-05-19 17:12:47.000000000 -0400
> +++ ld/testsuite/ld-elfvsb/elfvsb.exp	2003-05-19 18:08:22.000000000 -0400
> @@ -412,6 +412,16 @@ visibility_run protected_undef_def
>  visibility_run protected_weak
>  visibility_run normal
>  
> +if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG" $srcdir/$subdir/sh3.c $tmpdir/sh3.o] } {
> +	unresolved "static visibility"
> +} else {
> +	if ![ld_simple_link $CC $tmpdir/sh3 "-static $tmpdir/sh3.o"] {
> +		fail "static visibility"
> +	} else {
> +		pass "static visibility"
> +	}
> +}
> +
>  if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
>      # Remove the temporary directory.
>      catch "exec rm -rf $tmpdir" exec_status
> 
> 
> 	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]