Module Name:    src
Committed By:   martin
Date:           Wed May 29 19:02:30 UTC 2013

Modified Files:
        src/sys/sys: cdefs.h

Log Message:
While visibility "protected" is nominaly supported by gcc 4.0 and 4.1
it does not actually work - the compiler does not emmit ".protected"
asm statements for used references to protected symbols, which then
causes the linker to fail and/or produce unloadable libraries.
This recently happened to port vax by the locale changes.

Backporting a fix (ASM_OUTPUT_EXTERNAL in gcc target config) is not
feasible.

So: define __dso_protected only starting with gcc 4.2.


To generate a diff of this commit:
cvs rdiff -u -r1.106 -r1.107 src/sys/sys/cdefs.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/sys/cdefs.h
diff -u src/sys/sys/cdefs.h:1.106 src/sys/sys/cdefs.h:1.107
--- src/sys/sys/cdefs.h:1.106	Tue Apr 30 14:45:15 2013
+++ src/sys/sys/cdefs.h	Wed May 29 19:02:30 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: cdefs.h,v 1.106 2013/04/30 14:45:15 joerg Exp $	*/
+/*	$NetBSD: cdefs.h,v 1.107 2013/05/29 19:02:30 martin Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993
@@ -281,7 +281,6 @@
 #if __GNUC_PREREQ__(4, 0)
 #  define __dso_public	__attribute__((__visibility__("default")))
 #  define __dso_hidden	__attribute__((__visibility__("hidden")))
-#  define __dso_protected	__attribute__((__visibility__("protected")))
 #  define __BEGIN_PUBLIC_DECLS	\
 	_Pragma("GCC visibility push(default)") __BEGIN_EXTERN_C
 #  define __END_PUBLIC_DECLS	__END_EXTERN_C _Pragma("GCC visibility pop")
@@ -290,13 +289,17 @@
 #  define __END_HIDDEN_DECLS	__END_EXTERN_C _Pragma("GCC visibility pop")
 #else
 #  define __dso_public
-#  define __dso_protected
 #  define __dso_hidden
 #  define __BEGIN_PUBLIC_DECLS	__BEGIN_EXTERN_C
 #  define __END_PUBLIC_DECLS	__END_EXTERN_C
 #  define __BEGIN_HIDDEN_DECLS	__BEGIN_EXTERN_C
 #  define __END_HIDDEN_DECLS	__END_EXTERN_C
 #endif
+#if __GNUC_PREREQ__(4, 2)
+#  define __dso_protected	__attribute__((__visibility__("protected")))
+#else
+#  define __dso_protected
+#endif
 
 #define	__BEGIN_DECLS		__BEGIN_PUBLIC_DECLS
 #define	__END_DECLS		__END_PUBLIC_DECLS

Reply via email to