[patch/rfc] add support for hosts that have custom symbol prefixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



some architectures, like Blackfin, have a prefix added to all symbols (in our 
case it's historical baggage)

while normally packages shouldnt care, when code starts mixing assembler with 
C (like symbol versioning), you need to dip down into the inner details.  
find attached a patch which queries gcc for the prefix (all gcc toolchains 
have a builtin define of __USER_LABEL_PREFIX__) and then automatically has 
asm() constructs utilize this

since most targets define __USER_LABEL_PREFIX__ to nothing, hopefully this 
shouldnt cause any problems :)
-mike

Attachment: pgpJZ1JCOVlfK.pgp
Description: PGP signature

diff -r 46221e609f45 configure.in
--- a/configure.in	Wed Sep 06 14:39:01 2006 +0200
+++ b/configure.in	Thu Sep 07 20:45:24 2006 -0400
@@ -34,6 +34,7 @@ fi
 	    
 
 AC_PROG_CC
+AC_PROG_CPP
 AC_PROG_INSTALL
 AC_PROG_LN_S 
 AC_DISABLE_STATIC
@@ -104,6 +105,16 @@ else
   AC_MSG_RESULT(no)
 fi
 AM_CONDITIONAL(VERSIONED_SYMBOLS, test x$versioned = xyes)
+
+dnl See if toolchain has a custom prefix for symbols ...
+AC_MSG_CHECKING(for custom symbol prefixes)
+SYMBOL_PREFIX=` \
+	echo "PREFIX=__USER_LABEL_PREFIX__" \
+		| ${CPP-${CC-gcc} -E} - 2>&1 \
+		| ${EGREP-grep} "^PREFIX=" \
+		| ${SED-sed} "s:^PREFIX=::"`
+AC_DEFINE_UNQUOTED([__SYMBOL_PREFIX], "$SYMBOL_PREFIX", [Toolchain Symbol Prefix])
+AC_MSG_RESULT($SYMBOL_PREFIX)
 
 dnl Check for debug...
 AC_MSG_CHECKING(for debug)
diff -r 46221e609f45 include/alsa-symbols.h
--- a/include/alsa-symbols.h	Wed Sep 06 14:39:01 2006 +0200
+++ b/include/alsa-symbols.h	Thu Sep 07 20:45:45 2006 -0400
@@ -22,6 +22,14 @@
 #ifndef __ALSA_SYMBOLS_H
 #define __ALSA_SYMBOLS_H
 
+#ifdef __USER_LABEL_PREFIX__
+# define __SYMBOL_PREFIX __USER_LABEL_PREFIX__
+#else
+# define __SYMBOL_PREFIX
+#endif
+
+#include "local.h"
+
 #if defined(PIC) && defined(VERSIONED_SYMBOLS) /* might be also configurable */
 #define USE_VERSIONED_SYMBOLS
 #endif
@@ -31,16 +39,16 @@
 
 #ifdef __powerpc64__
 # define symbol_version(real, name, version) 			\
-	__asm__ (".symver " #real "," #name "@" #version);	\
-	__asm__ (".symver ." #real ",." #name "@" #version)
+	__asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@" #version);	\
+	__asm__ (".symver ." ASM_NAME(#real) ",." ASM_NAME(#name) "@" #version)
 # define default_symbol_version(real, name, version) 		\
-	__asm__ (".symver " #real "," #name "@@" #version);	\
-	__asm__ (".symver ." #real ",." #name "@@" #version)
+	__asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@@" #version);	\
+	__asm__ (".symver ." ASM_NAME(#real) ",." ASM_NAME(#name) "@@" #version)
 #else
 # define symbol_version(real, name, version) \
-	__asm__ (".symver " #real "," #name "@" #version)
+	__asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@" #version)
 # define default_symbol_version(real, name, version) \
-	__asm__ (".symver " #real "," #name "@@" #version)
+	__asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@@" #version)
 #endif
 
 #ifdef USE_VERSIONED_SYMBOLS
@@ -52,19 +60,19 @@
 #define use_symbol_version(real, name, version) /* nothing */
 #ifdef __powerpc64__
 #define use_default_symbol_version(real, name, version) \
-	__asm__ (".weak " #name); 			\
-	__asm__ (".weak ." #name); 			\
-	__asm__ (".set " #name "," #real);		\
-	__asm__ (".set ." #name ",." #real)
+	__asm__ (".weak " ASM_NAME(#name)); 			\
+	__asm__ (".weak ." ASM_NAME(#name)); 			\
+	__asm__ (".set " ASM_NAME(#name) "," ASM_NAME(#real));		\
+	__asm__ (".set ." ASM_NAME(#name) ",." ASM_NAME(#real))
 #else
 #if defined(__alpha__) || defined(__mips__)
 #define use_default_symbol_version(real, name, version) \
-        __asm__ (".weak " #name); \
-        __asm__ (#name " = " #real)
+        __asm__ (".weak " ASM_NAME(#name)); \
+        __asm__ (ASM_NAME(#name) " = " ASM_NAME(#real))
 #else
 #define use_default_symbol_version(real, name, version) \
-	__asm__ (".weak " #name); \
-	__asm__ (".set " #name "," #real)
+	__asm__ (".weak " ASM_NAME(#name)); \
+	__asm__ (".set " ASM_NAME(#name) "," ASM_NAME(#real))
 #endif
 #endif
 #endif
diff -r 46221e609f45 include/local.h
--- a/include/local.h	Wed Sep 06 14:39:01 2006 +0200
+++ b/include/local.h	Thu Sep 07 20:45:45 2006 -0400
@@ -192,6 +192,9 @@ extern snd_lib_error_handler_t snd_err_m
 
 /* When a reference to SYMBOL is encountered, the linker will emit a
    warning message MSG.  */
+
+#define ASM_NAME(name) __SYMBOL_PREFIX name
+
 #ifdef HAVE_GNU_LD
 # ifdef HAVE_ELF
 
@@ -210,19 +213,19 @@ extern snd_lib_error_handler_t snd_err_m
    section attributes on what looks like a comment to the assembler.  */
 #  ifdef HAVE_SECTION_QUOTES
 #   define link_warning(symbol, msg) \
-  __make_section_unallocated (".gnu.warning." #symbol) \
+  __make_section_unallocated (".gnu.warning." ASM_NAME(#symbol)) \
   static const char __evoke_link_warning_##symbol[]	\
-    __attribute__ ((section (".gnu.warning." #symbol "\"\n\t#\""))) = msg;
+    __attribute__ ((section (".gnu.warning." ASM_NAME(#symbol) "\"\n\t#\""))) = msg;
 #  else
 #   define link_warning(symbol, msg) \
-  __make_section_unallocated (".gnu.warning." #symbol) \
+  __make_section_unallocated (".gnu.warning." ASM_NAME(#symbol)) \
   static const char __evoke_link_warning_##symbol[]	\
-    __attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg;
+    __attribute__ ((section (".gnu.warning." ASM_NAME(#symbol) "\n\t#"))) = msg;
 #  endif
 # else
 #  define link_warning(symbol, msg)		\
   asm (".stabs \"" msg "\",30,0,0,0\n\t"	\
-       ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
+       ".stabs \"" ASM_NAME(#symbol) "\",1,0,0,0\n");
 # endif
 #else
 /* We will never be heard; they will all die horribly.  */
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux