A few of our platforms don't provide a WEAK_ALIAS macro in <machine/asm.h>
That's annoying for those of us who aren't ASM polyglots, so here's a diff
to add WEAK_ALIAS to hppa, hppa64, mips64, and powerpc, based on how their
libc SYS.h files handled them. The diff also converts said SYS.h files to
use WEAK_ALIAS to guarantee that the new macro is exercised.
I don't actually have any of these platforms, so this is completely
untested.
(This is prep for moving renaming rfork_thread() to _rfork_thread() with a
weak alias and moving it to libc.)
Philip Guenther
Index: sys/arch/hppa/include/asm.h
===================================================================
RCS file: /cvs/src/sys/arch/hppa/include/asm.h,v
retrieving revision 1.15
diff -u -p -r1.15 asm.h
--- sys/arch/hppa/include/asm.h 23 Jan 2005 16:28:29 -0000 1.15
+++ sys/arch/hppa/include/asm.h 5 Sep 2010 22:13:53 -0000
@@ -251,4 +251,6 @@ tf4 .reg %fr8
#define BSS(n,s) ! .data ! .label n ! .comm s
+#define WEAK_ALIAS(alias,sym) ! .weak alias ! .set alias, sym
+
#endif /* _MACHINE_ASM_H_ */
Index: sys/arch/hppa64/include/asm.h
===================================================================
RCS file: /cvs/src/sys/arch/hppa64/include/asm.h,v
retrieving revision 1.1
diff -u -p -r1.1 asm.h
--- sys/arch/hppa64/include/asm.h 1 Apr 2005 10:40:48 -0000 1.1
+++ sys/arch/hppa64/include/asm.h 5 Sep 2010 22:13:53 -0000
@@ -67,4 +67,6 @@ ap .reg %r29
#define BSS(n,s) ! .data ! .label n ! .comm s
+#define WEAK_ALIAS(alias,sym) ! .weak alias ! .set alias, sym
+
#endif /* _MACHINE_ASM_H_ */
Index: sys/arch/mips64/include/asm.h
===================================================================
RCS file: /cvs/src/sys/arch/mips64/include/asm.h,v
retrieving revision 1.11
diff -u -p -r1.11 asm.h
--- sys/arch/mips64/include/asm.h 28 Apr 2010 16:20:28 -0000 1.11
+++ sys/arch/mips64/include/asm.h 5 Sep 2010 22:13:53 -0000
@@ -270,6 +270,13 @@ x: ; \
.end x
/*
+ * WEAK ALIAS: create a weak alias
+ */
+#define WEAK_ALIAS(alias,sym) \
+ .weak alias; alias = sym
+
+
+/*
* Macros to panic and printf from assembly language.
*/
#define PANIC(msg) \
Index: sys/arch/powerpc/include/asm.h
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/include/asm.h,v
retrieving revision 1.7
diff -u -p -r1.7 asm.h
--- sys/arch/powerpc/include/asm.h 15 Sep 2002 09:01:59 -0000 1.7
+++ sys/arch/powerpc/include/asm.h 5 Sep 2010 22:13:53 -0000
@@ -103,4 +103,7 @@ _TMP_LABEL(y):; \
#define RCSID(x) .text; .asciz x
+#define WEAK_ALIAS(alias,sym) \
+ .weak alias; .set alias,sym
+
#endif /* !_POWERPC_ASM_H_ */
Index: lib/libc/arch/hppa/SYS.h
===================================================================
RCS file: /cvs/src/lib/libc/arch/hppa/SYS.h,v
retrieving revision 1.15
diff -u -p -r1.15 SYS.h
--- lib/libc/arch/hppa/SYS.h 5 Jan 2006 22:13:55 -0000 1.15
+++ lib/libc/arch/hppa/SYS.h 5 Sep 2010 22:13:53 -0000
@@ -35,7 +35,7 @@
#define SYSENTRY(x) !\
LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\
- .weak x ! .set x, __CONCAT(_thread_sys_,x)
+ WEAK_ALIAS(x,__CONCAT(_thread_sys_,x))
#define SYSEXIT(x) !\
EXIT(__CONCAT(_thread_sys_,x))
Index: lib/libc/arch/hppa64/SYS.h
===================================================================
RCS file: /cvs/src/lib/libc/arch/hppa64/SYS.h,v
retrieving revision 1.2
diff -u -p -r1.2 SYS.h
--- lib/libc/arch/hppa64/SYS.h 5 Jan 2006 22:19:49 -0000 1.2
+++ lib/libc/arch/hppa64/SYS.h 5 Sep 2010 22:13:53 -0000
@@ -35,7 +35,7 @@
#define SYSENTRY(x) !\
LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\
- .weak x ! .set x, __CONCAT(_thread_sys_,x)
+ WEAK_ALIAS(x,__CONCAT(_thread_sys_,x))
#define SYSEXIT(x) !\
EXIT(__CONCAT(_thread_sys_,x))
Index: lib/libc/arch/mips64/SYS.h
===================================================================
RCS file: /cvs/src/lib/libc/arch/mips64/SYS.h,v
retrieving revision 1.3
diff -u -p -r1.3 SYS.h
--- lib/libc/arch/mips64/SYS.h 9 Sep 2004 16:14:02 -0000 1.3
+++ lib/libc/arch/mips64/SYS.h 5 Sep 2010 22:13:53 -0000
@@ -43,7 +43,7 @@
syscall
# define __LEAF2(p,x,sz) LEAF(p ## x, sz) \
- .weak x; x = p ## x;
+ WEAK_ALIAS(x, p ## x);
# define __END2(p,x) END(p ## x)
@@ -56,7 +56,7 @@
syscall
# define __LEAF2(p,x,sz) LEAF(p/**/x, sz) \
- .weak x; x = p/**/x;
+ WEAK_ALIAS(x, p/**/x);
# define __END2(p,x) END(p/**/x)
Index: lib/libc/arch/powerpc/SYS.h
===================================================================
RCS file: /cvs/src/lib/libc/arch/powerpc/SYS.h,v
retrieving revision 1.13
diff -u -p -r1.13 SYS.h
--- lib/libc/arch/powerpc/SYS.h 7 Oct 2002 04:16:33 -0000 1.13
+++ lib/libc/arch/powerpc/SYS.h 5 Sep 2010 22:13:53 -0000
@@ -65,7 +65,7 @@
#define SUFFIX PSEUDO_SUFFIX
-#define ALIAS(x,y) .weak y; .set y,_CONCAT(x,y);
+#define ALIAS(x,y) WEAK_ALIAS(y,_CONCAT(x,y));
#define PREFIX(x) ALIAS(_thread_sys_,x) \
PSEUDO_PREFIX(_thread_sys_,x,x)
Index: lib/libc/arch/sh/SYS.h
===================================================================
RCS file: /cvs/src/lib/libc/arch/sh/SYS.h,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 SYS.h
--- lib/libc/arch/sh/SYS.h 10 Oct 2006 22:07:10 -0000 1.1.1.1
+++ lib/libc/arch/sh/SYS.h 5 Sep 2010 22:13:53 -0000
@@ -39,13 +39,11 @@
#ifdef __STDC__
#define SYSENTRY(x) \
- .weak _C_LABEL(x); \
- _C_LABEL(x) = _C_LABEL(_thread_sys_ ## x); \
+ WEAK_ALIAS(x,_thread_sys_ ## x); \
ENTRY(_thread_sys_ ## x)
#else
#define SYSENTRY(x) \
- .weak _C_LABEL(x); \
- _C_LABEL(x) = _C_LABEL(_thread_sys_/**/x); \
+ WEAK_ALIAS(x,_thread_sys_/**/x); \
ENTRY(_thread_sys_/**/x)
#endif