Module Name:    src
Committed By:   joerg
Date:           Wed Dec  8 01:18:55 UTC 2010

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

Log Message:
Implement __warn_references and __SECTIONSTRING (used e.g. by __RCSID)
for clang without assembler. This declares a global variable with
attribute used to prevent optimisation, attribute section to change
the placement and includes __COUNTER__ in the variable name for
uniqueness.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/sys/cdefs_elf.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_elf.h
diff -u src/sys/sys/cdefs_elf.h:1.33 src/sys/sys/cdefs_elf.h:1.34
--- src/sys/sys/cdefs_elf.h:1.33	Tue Oct 12 06:39:48 2010
+++ src/sys/sys/cdefs_elf.h	Wed Dec  8 01:18:55 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cdefs_elf.h,v 1.33 2010/10/12 06:39:48 skrll Exp $	*/
+/*	$NetBSD: cdefs_elf.h,v 1.34 2010/12/08 01:18:55 joerg Exp $	*/
 
 /*
  * Copyright (c) 1995, 1996 Carnegie-Mellon University.
@@ -70,10 +70,16 @@
 #define	__weak_reference(sym)	; __asm(".weak " _C_LABEL_STRING(#sym))
 #endif
 
+#if defined(__clang__)
+#define	__warn_references(sym,msg)					\
+    static __attribute__((__used__, __section__(".gnu.warning." #sym))) \
+    const char ___CONCAT(__warn_reference_##sym,__COUNTER__)[] = msg;
+#else
 #define	__warn_references(sym,msg)					\
     __asm(".pushsection .gnu.warning." #sym "\n"			\
 	  ".ascii \"" msg "\"\n"					\
 	  ".popsection");
+#endif
 
 #else /* !__STDC__ */
 
@@ -100,7 +106,11 @@
 
 #endif /* !__STDC__ */
 
-#if __STDC__
+#if defined(__clang__)
+#define	__SECTIONSTRING(_sec, _str)					\
+	static __attribute__((__used__, __section__(#_sec))) const char \
+	___CONCAT(__sectstr,__COUNTER__)[] = _str
+#elif __STDC__
 #define	__SECTIONSTRING(_sec, _str)					\
 	__asm(".pushsection " #_sec "\n"				\
 	      ".asciz \"" _str "\"\n"					\

Reply via email to