Re: [parisc-linux] glibc is broken because of gcc

Aurelien Jarno <[email protected]> Tue, 10 Jul 2007 09:23:23 +0200
Newsgroups gmane.linux.debian.ports.hppa,gmane.linux.ports.hppa
Message-ID <[email protected]>
On Thu, Jul 05, 2007 at 11:18:05AM -0400, John David Anglin wrote:
> > > Could you do glibc builds with the gcc trunk before and after the change?
> > > It's best to base the PR on an unmodified version of gcc.
> > 
> > The test with the gcc-trunk (Main 4.3.0 head) shows the same error at the same place.
> 
> Ok, it would be useful to file a gcc PR to start.  However, it's not
> clear that gcc is a fault.
> 
> It may be that glibc isn't using the visibility attribute correctly
> for this symbol (i.e., hiding a symbol that is externally referenced).


The patch below based on the m68k version of sysdep-cancel.h fixes the
problem.


2007-07-10  Aurelien Jarno  <[email protected]>

	* sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h:
	(__local_multiple_threads): Declare as hidden only in libc and
	in libpthread.

Index: ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h 
===================================================================
--- ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h.orig
+++ ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h
@@ -206,7 +206,11 @@
 # endif
 
 # ifndef __ASSEMBLER__
- extern int __local_multiple_threads attribute_hidden;
+#  if !defined NOT_IN_libc || defined IS_IN_libpthread
+extern int __local_multiple_threads attribute_hidden;
+#  else
+extern int __local_multiple_threads;
+#  endif
 #  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
 # else
 /* This ALT version requires newer kernel support */

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   [email protected]         | [email protected]
   `-    people.debian.org/~aurel32 | www.aurel32.net