Commit Diff


commit - 2897735523dd05a4ef21d25d3d99fa7fa0b24b44
commit + 540caa5873bcc3bc2a0e1896119f5b53a0e8e630
blob - 45b22b691cded6bfcfdf2e11fd3883bd049d5c3b
blob + 94d5b5ca500807dfbd8c67a87ca20c1309b80eea
--- include/libc.h
+++ include/libc.h
@@ -11,13 +11,13 @@
 #define _LIBC_H_ 1
 #if defined(__cplusplus)
 extern "C" {
-#endif                                                                
+#endif
 
 #include <utf.h>
 #include <fmt.h>
 
 /*
- * Begin usual libc.h 
+ * Begin usual libc.h
  */
 
 #ifndef nil
@@ -361,7 +361,7 @@ enum
 extern	int	p9atexit(void(*)(void));
 extern	void	p9atexitdont(void(*)(void));
 extern	int	atnotify(int(*)(void*, char*), int);
-/* 
+/*
  * <stdlib.h>
 extern	double	atof(char*); <stdlib.h>
  */
@@ -385,6 +385,9 @@ extern	int	exitcode(char*);
 extern	void	exits(char*);
 extern	double	frexp(double, int*);
 extern	ulong	getcallerpc(void*);
+#if defined(__GNUC__) || defined(__clang__)
+#define getcallerpc(x) ((ulong)__builtin_return_address(0))
+#endif
 extern	char*	p9getenv(char*);
 extern	int	p9putenv(char*, char*);
 extern	int	getfields(char*, char**, int, int, char*);
@@ -479,7 +482,7 @@ extern	void	lock(Lock*);
 extern	void	unlock(Lock*);
 extern	int	canlock(Lock*);
 extern	int	(*_lock)(Lock*, int, ulong);
-extern	void	(*_unlock)(Lock*, ulong);	
+extern	void	(*_unlock)(Lock*, ulong);
 
 typedef struct QLock QLock;
 struct QLock
@@ -670,15 +673,15 @@ extern	void		freenetconninfo(NetConnInfo*);
 
 enum
 {
-	RFNAMEG		= (1<<0), 
-	RFENVG		= (1<<1), 
+	RFNAMEG		= (1<<0),
+	RFENVG		= (1<<1),
 	RFFDG		= (1<<2),
 	RFNOTEG		= (1<<3),
 	RFPROC		= (1<<4),
 	RFMEM		= (1<<5),
 	RFNOWAIT	= (1<<6),
-	RFCNAMEG	= (1<<10), 
-	RFCENVG		= (1<<11), 
+	RFCNAMEG	= (1<<10),
+	RFCENVG		= (1<<11),
 	RFCFDG		= (1<<12)
 /*	RFREND		= (1<<13), */
 /*	RFNOMNT		= (1<<14) */
@@ -707,7 +710,7 @@ struct Dir {
 	char	*uid;	/* owner name */
 	char	*gid;	/* group name */
 	char	*muid;	/* last modifier name */
-	
+
 	/* 9P2000.u extensions */
 	uint	uidnum;		/* numeric uid */
 	uint	gidnum;		/* numeric gid */
@@ -750,7 +753,7 @@ extern	int	p9exec(char*, char*[]);
 extern	int	p9execl(char*, ...);
 /* extern	int	p9fork(void); */
 extern	int	p9rfork(int);
-/* not implemented 
+/* not implemented
 extern	int	fauth(int, char*);
 extern	int	fstat(int, uchar*, int);
 extern	int	fwstat(int, uchar*, int);
@@ -767,7 +770,7 @@ extern	int	notifyoff(char*);
 extern	int	p9open(char*, int);
 extern	int	fd2path(int, char*, int);
 extern	int	p9pipe(int*);
-/* 
+/*
  * use defs from <unistd.h>
 extern	long	pread(int, void*, long, vlong);
 extern	long	preadv(int, IOchunk*, int, vlong);
blob - 1367370e93737504e23f9d9460166ea770c27887 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-386.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <lib9.h>
-
-ulong
-getcallerpc(void *x)
-{
-	return (((ulong*)(x))[-1]);
-}
blob - 9bb4a9559a4d4e4cf6dcd7d9fd3506f29ef96b03 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-arm.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <lib9.h>
-
-ulong
-getcallerpc(void *x)
-{
-	return ((ulong*)x)[-2];
-}
-
blob - 9bb4a9559a4d4e4cf6dcd7d9fd3506f29ef96b03 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-arm64.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <lib9.h>
-
-ulong
-getcallerpc(void *x)
-{
-	return ((ulong*)x)[-2];
-}
-
blob - 9bb4a9559a4d4e4cf6dcd7d9fd3506f29ef96b03 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-mips.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <lib9.h>
-
-ulong
-getcallerpc(void *x)
-{
-	return ((ulong*)x)[-2];
-}
-
blob - b4bf6980febc2fe8bffb4264c4e09d49578d2f50 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-power.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <lib9.h>
-
-ulong
-getcallerpc(void *x)
-{
-	ulong *lp;
-
-	lp = x;
-
-	return lp[-1];
-}
blob - f28e57f18b4630d158f136171082983b1fcadc70 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-sun4u.s
+++ /dev/null
@@ -1,5 +0,0 @@
-.text
-.globl getcallerpc
-getcallerpc:
-	retl
-	or %o7, %r0, %o0
blob - 1367370e93737504e23f9d9460166ea770c27887 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-x86_64.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <lib9.h>
-
-ulong
-getcallerpc(void *x)
-{
-	return (((ulong*)(x))[-1]);
-}
blob - 8f7283ef8f5386087c9ecc50cc2b161597b489fc
blob + 943b597b9871a64e00b87b2ed70fa9e763dae0ec
--- src/lib9/mkfile
+++ src/lib9/mkfile
@@ -104,7 +104,7 @@ LIB9OFILES=\
 	fcallfmt.$O\
 	frand.$O\
 	get9root.$O\
-	getcallerpc-$OBJTYPE.$O\
+	getcallerpc.$O\
 	getenv.$O\
 	getfields.$O\
 	getnetconn.$O\