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]

[PATCH] Fix some sparc{,64} testsuite failures


Hi!

I have commited following patch.
The ld/testsuite changes are needed, because non-PIC visibility or shared
tests really cannot work on SPARC 64-bit, at least not in the -mmedlow
model which is the default. Shared libraries are loaded very high
(0xfffff80000000000+), but non-pic uses sethi/add pair to load addresses.

2004-04-19  Jakub Jelinek  <jakub@redhat.com>

bfd/
	* elf32-sparc.c (elf32_sparc_relocate_section): Handle
	relocs against hidden/protected undefweak symbols properly.
	* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
gas/testsuite/
	* gas/cfi/cfi-sparc64-1.d: Update.
ld/testsuite/
	* ld-elfvsb/elfvsb.exp: XFAIL some tests on sparc64.
	* ld-shared/shared.exp: Likewise.

--- bfd/elf32-sparc.c.jj	2004-04-18 20:23:31.000000000 +0200
+++ bfd/elf32-sparc.c	2004-04-19 16:10:28.044558659 +0200
@@ -2374,6 +2374,9 @@ elf32_sparc_relocate_section (output_bfd
 	    break;
 
 	  if ((info->shared
+	       && (h == NULL
+		   || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+		   || h->root.type != bfd_link_hash_undefweak)
 	       && (! howto->pc_relative
 		   || (h != NULL
 		       && h->dynindx != -1
--- bfd/elf64-sparc.c.jj	2004-04-18 20:23:31.000000000 +0200
+++ bfd/elf64-sparc.c	2004-04-19 16:10:28.046558300 +0200
@@ -2213,6 +2213,13 @@ sparc64_elf_relocate_section (output_bfd
 		    break;
 		  }
 
+		/* FIXME: Dynamic reloc handling really needs to be rewritten.  */
+		if (!skip
+		    && h != NULL
+		    && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+		    && h->root.type == bfd_link_hash_undefweak)
+		  skip = TRUE, relocate = TRUE;
+
 		if (skip)
 		  memset (&outrel, 0, sizeof outrel);
 		/* h->dynindx may be -1 if the symbol was marked to
--- gas/testsuite/gas/cfi/cfi-sparc64-1.d.jj	2003-08-29 21:17:35.000000000 +0200
+++ gas/testsuite/gas/cfi/cfi-sparc64-1.d	2004-04-19 16:10:28.065554896 +0200
@@ -4,7 +4,7 @@
 
 The section .eh_frame contains:
 
-00000000 00000011 00000000 CIE
+00000000 00000014 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: 4
@@ -13,13 +13,13 @@ The section .eh_frame contains:
   Augmentation data:     1b
 
   DW_CFA_def_cfa: r14 ofs 2047
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
 
-00000015 00000017 00000019 FDE cie=00000000 pc=0000001d..0000004d
-  DW_CFA_advance_loc: 4 to 00000021
+00000018 00000014 0000001c FDE cie=00000000 pc=00000020..00000050
+  DW_CFA_advance_loc: 4 to 00000024
   DW_CFA_def_cfa_reg: r30
   DW_CFA_GNU_window_save
   DW_CFA_register: r15 in r31
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
 
--- ld/testsuite/ld-elfvsb/elfvsb.exp.jj	2004-02-18 20:06:04.000000000 +0100
+++ ld/testsuite/ld-elfvsb/elfvsb.exp	2004-04-19 16:12:27.335180226 +0200
@@ -1,5 +1,5 @@
 # Expect script for ld-visibility tests
-#   Copyright 2000, 2001, 2003 Free Software Foundation, Inc.
+#   Copyright 2000, 2001, 2003, 2004 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
@@ -261,6 +261,9 @@ proc visibility_run {visibility} {
 		 && ![ string match $visibility "hidden_undef_def" ]
 		 && ![ string match $visibility "protected_undef" ] } {
 		setup_xfail "s390x-*-linux*"
+		if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+		    setup_xfail "sparc*-*-linux*"
+		}
 	    }
 	    setup_xfail "x86_64-*-linux*"
 	    if { ![istarget hppa*64*-*-linux*] } {
@@ -289,6 +292,9 @@ proc visibility_run {visibility} {
 		 || [ string match $visibility "protected_weak" ]
 		 || [ string match $visibility "normal" ] } {
 		setup_xfail "powerpc-*-linux*"
+		if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+		    setup_xfail "sparc*-*-linux*"
+		}
 	    }
 	    if { ![ string match $visibility "hidden_undef" ]
 		 && ![ string match $visibility "protected_undef" ] } {
@@ -358,6 +364,9 @@ proc visibility_run {visibility} {
 		     && ![ string match $visibility "hidden_undef_def" ]
 		     && ![ string match $visibility "protected_undef" ] } {
 		    setup_xfail "s390x-*-linux*"
+		    if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainp.o] } {
+			setup_xfail "sparc*-*-linux*"
+		    }
 		}
 		setup_xfail "x86_64-*-linux*"
 		if { ![istarget hppa*64*-*-linux*] } {
--- ld/testsuite/ld-shared/shared.exp.jj	2004-02-18 20:06:04.000000000 +0100
+++ ld/testsuite/ld-shared/shared.exp	2004-04-19 16:10:28.067554538 +0200
@@ -203,6 +203,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $
 	if { ![istarget hppa*64*-*-linux*] } {
 	    setup_xfail "hppa*-*-linux*"
 	}
+	if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+	    setup_xfail "sparc*-*-linux*"
+	}
 	setup_xfail "x86_64-*-linux*"
 	setup_xfail "s390x-*-linux*"
 	shared_test shnp "shared (non PIC)" mainnp.o sh1np.o sh2np.o shared
@@ -220,6 +223,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $
 	if { ![istarget hppa*64*-*-linux*] } {
 	    setup_xfail "hppa*-*-linux*"
 	}
+	if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
+	    setup_xfail "sparc*-*-linux*"
+	}
 	setup_xfail "x86_64-*-linux*"
 	shared_test shnp "shared (non PIC, load offset)" \
 		mainnp.o sh1np.o sh2np.o shared \
@@ -265,6 +271,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG $p
 	    if { ![istarget hppa*64*-*-linux*] } {
 		setup_xfail "hppa*-*-linux*"
 	    }
+	    if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainp.o] } {
+		setup_xfail "sparc*-*-linux*"
+	    }
 	    setup_xfail "x86_64-*-linux*"
 	    setup_xfail "s390x-*-linux*"
 	    shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o shared

	Jakub


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