commit - 2897735523dd05a4ef21d25d3d99fa7fa0b24b44
commit + 540caa5873bcc3bc2a0e1896119f5b53a0e8e630
blob - 45b22b691cded6bfcfdf2e11fd3883bd049d5c3b
blob + 94d5b5ca500807dfbd8c67a87ca20c1309b80eea
--- include/libc.h
+++ include/libc.h
#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
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>
*/
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*);
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
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) */
char *uid; /* owner name */
char *gid; /* group name */
char *muid; /* last modifier name */
-
+
/* 9P2000.u extensions */
uint uidnum; /* numeric uid */
uint gidnum; /* numeric gid */
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);
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
-#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
-#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
-#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
-#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
-#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
-.text
-.globl getcallerpc
-getcallerpc:
- retl
- or %o7, %r0, %o0
blob - 1367370e93737504e23f9d9460166ea770c27887 (mode 644)
blob + /dev/null
--- src/lib9/getcallerpc-x86_64.c
+++ /dev/null
-#include <lib9.h>
-
-ulong
-getcallerpc(void *x)
-{
- return (((ulong*)(x))[-1]);
-}
blob - 8f7283ef8f5386087c9ecc50cc2b161597b489fc
blob + 943b597b9871a64e00b87b2ed70fa9e763dae0ec
--- src/lib9/mkfile
+++ src/lib9/mkfile
fcallfmt.$O\
frand.$O\
get9root.$O\
- getcallerpc-$OBJTYPE.$O\
+ getcallerpc.$O\
getenv.$O\
getfields.$O\
getnetconn.$O\