lib9: remove getcallerpc implementations

These make no sense and are not really needed at all.
Add a best-effort attempt to get at the gcc/clang macro
in lib9.h, but if it fails, no big deal.

Fixes #324.
This commit is contained in:
Russ Cox 2020-01-07 15:31:01 -05:00
parent 2897735523
commit 540caa5873
9 changed files with 15 additions and 66 deletions

View file

@ -11,13 +11,13 @@
#define _LIBC_H_ 1 #define _LIBC_H_ 1
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {
#endif #endif
#include <utf.h> #include <utf.h>
#include <fmt.h> #include <fmt.h>
/* /*
* Begin usual libc.h * Begin usual libc.h
*/ */
#ifndef nil #ifndef nil
@ -361,7 +361,7 @@ enum
extern int p9atexit(void(*)(void)); extern int p9atexit(void(*)(void));
extern void p9atexitdont(void(*)(void)); extern void p9atexitdont(void(*)(void));
extern int atnotify(int(*)(void*, char*), int); extern int atnotify(int(*)(void*, char*), int);
/* /*
* <stdlib.h> * <stdlib.h>
extern double atof(char*); <stdlib.h> extern double atof(char*); <stdlib.h>
*/ */
@ -385,6 +385,9 @@ extern int exitcode(char*);
extern void exits(char*); extern void exits(char*);
extern double frexp(double, int*); extern double frexp(double, int*);
extern ulong getcallerpc(void*); extern ulong getcallerpc(void*);
#if defined(__GNUC__) || defined(__clang__)
#define getcallerpc(x) ((ulong)__builtin_return_address(0))
#endif
extern char* p9getenv(char*); extern char* p9getenv(char*);
extern int p9putenv(char*, char*); extern int p9putenv(char*, char*);
extern int getfields(char*, char**, int, int, char*); extern int getfields(char*, char**, int, int, char*);
@ -479,7 +482,7 @@ extern void lock(Lock*);
extern void unlock(Lock*); extern void unlock(Lock*);
extern int canlock(Lock*); extern int canlock(Lock*);
extern int (*_lock)(Lock*, int, ulong); extern int (*_lock)(Lock*, int, ulong);
extern void (*_unlock)(Lock*, ulong); extern void (*_unlock)(Lock*, ulong);
typedef struct QLock QLock; typedef struct QLock QLock;
struct QLock struct QLock
@ -670,15 +673,15 @@ extern void freenetconninfo(NetConnInfo*);
enum enum
{ {
RFNAMEG = (1<<0), RFNAMEG = (1<<0),
RFENVG = (1<<1), RFENVG = (1<<1),
RFFDG = (1<<2), RFFDG = (1<<2),
RFNOTEG = (1<<3), RFNOTEG = (1<<3),
RFPROC = (1<<4), RFPROC = (1<<4),
RFMEM = (1<<5), RFMEM = (1<<5),
RFNOWAIT = (1<<6), RFNOWAIT = (1<<6),
RFCNAMEG = (1<<10), RFCNAMEG = (1<<10),
RFCENVG = (1<<11), RFCENVG = (1<<11),
RFCFDG = (1<<12) RFCFDG = (1<<12)
/* RFREND = (1<<13), */ /* RFREND = (1<<13), */
/* RFNOMNT = (1<<14) */ /* RFNOMNT = (1<<14) */
@ -707,7 +710,7 @@ struct Dir {
char *uid; /* owner name */ char *uid; /* owner name */
char *gid; /* group name */ char *gid; /* group name */
char *muid; /* last modifier name */ char *muid; /* last modifier name */
/* 9P2000.u extensions */ /* 9P2000.u extensions */
uint uidnum; /* numeric uid */ uint uidnum; /* numeric uid */
uint gidnum; /* numeric gid */ uint gidnum; /* numeric gid */
@ -750,7 +753,7 @@ extern int p9exec(char*, char*[]);
extern int p9execl(char*, ...); extern int p9execl(char*, ...);
/* extern int p9fork(void); */ /* extern int p9fork(void); */
extern int p9rfork(int); extern int p9rfork(int);
/* not implemented /* not implemented
extern int fauth(int, char*); extern int fauth(int, char*);
extern int fstat(int, uchar*, int); extern int fstat(int, uchar*, int);
extern int fwstat(int, uchar*, int); extern int fwstat(int, uchar*, int);
@ -767,7 +770,7 @@ extern int notifyoff(char*);
extern int p9open(char*, int); extern int p9open(char*, int);
extern int fd2path(int, char*, int); extern int fd2path(int, char*, int);
extern int p9pipe(int*); extern int p9pipe(int*);
/* /*
* use defs from <unistd.h> * use defs from <unistd.h>
extern long pread(int, void*, long, vlong); extern long pread(int, void*, long, vlong);
extern long preadv(int, IOchunk*, int, vlong); extern long preadv(int, IOchunk*, int, vlong);

View file

@ -1,7 +0,0 @@
#include <lib9.h>
ulong
getcallerpc(void *x)
{
return (((ulong*)(x))[-1]);
}

View file

@ -1,8 +0,0 @@
#include <lib9.h>
ulong
getcallerpc(void *x)
{
return ((ulong*)x)[-2];
}

View file

@ -1,8 +0,0 @@
#include <lib9.h>
ulong
getcallerpc(void *x)
{
return ((ulong*)x)[-2];
}

View file

@ -1,8 +0,0 @@
#include <lib9.h>
ulong
getcallerpc(void *x)
{
return ((ulong*)x)[-2];
}

View file

@ -1,11 +0,0 @@
#include <lib9.h>
ulong
getcallerpc(void *x)
{
ulong *lp;
lp = x;
return lp[-1];
}

View file

@ -1,5 +0,0 @@
.text
.globl getcallerpc
getcallerpc:
retl
or %o7, %r0, %o0

View file

@ -1,7 +0,0 @@
#include <lib9.h>
ulong
getcallerpc(void *x)
{
return (((ulong*)(x))[-1]);
}

View file

@ -104,7 +104,7 @@ LIB9OFILES=\
fcallfmt.$O\ fcallfmt.$O\
frand.$O\ frand.$O\
get9root.$O\ get9root.$O\
getcallerpc-$OBJTYPE.$O\ getcallerpc.$O\
getenv.$O\ getenv.$O\
getfields.$O\ getfields.$O\
getnetconn.$O\ getnetconn.$O\