summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--DragonFly/386/include/lib9.h2
-rw-r--r--FreeBSD/386/include/lib9.h2
-rw-r--r--Irix/mips/include/lib9.h2
-rw-r--r--Linux/386/include/lib9.h5
-rw-r--r--Linux/arm/include/lib9.h7
-rw-r--r--Linux/power/include/lib9.h5
-rw-r--r--Linux/spim/include/lib9.h2
-rw-r--r--MacOSX/386/include/lib9.h2
-rw-r--r--MacOSX/power/include/lib9.h2
-rw-r--r--NetBSD/386/include/lib9.h2
-rwxr-xr-xNt/386/include/lib9.h2
-rw-r--r--OpenBSD/386/include/lib9.h2
-rw-r--r--Plan9/386/include/lib9.h2
-rw-r--r--Plan9/arm/include/lib9.h2
-rw-r--r--Plan9/mips/include/lib9.h2
-rw-r--r--Plan9/power/include/lib9.h2
-rw-r--r--Plan9/sparc/include/lib9.h2
-rw-r--r--Solaris/386/include/lib9.h2
-rw-r--r--Solaris/sparc/include/lib9.h2
-rw-r--r--include/kern.h3
-rw-r--r--include/version.h2
-rw-r--r--lib9/getcallerpc-DragonFly-386.S3
-rw-r--r--lib9/getcallerpc-FreeBSD-386.S3
-rw-r--r--lib9/getcallerpc-Linux-386.S3
-rw-r--r--lib9/getcallerpc-MacOSX-386.s5
-rw-r--r--lib9/getcallerpc-NetBSD-386.S3
-rw-r--r--lib9/getcallerpc-OpenBSD-386.S3
-rw-r--r--lib9/getcallerpc-Solaris-386.s3
-rw-r--r--lib9/getcallerpc-Unixware-386.s3
30 files changed, 51 insertions, 32 deletions
diff --git a/CHANGES b/CHANGES
index 51053d9f..5c37adee 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+20110629
+ change x86 getcallerpc to avoid use of %ebp [issue 266]
+ change type of getcallerpc to uintptr from ulong
20110619
emu/port/devfs-posix.c: put major/minor st_dev into path without mapping (with luck)
emu/port/kproc-pthreads.c: ensure pthread stack is at least PTHREAD_STACK_MIN (plus slop)
diff --git a/DragonFly/386/include/lib9.h b/DragonFly/386/include/lib9.h
index 284f3c24..19cffeef 100644
--- a/DragonFly/386/include/lib9.h
+++ b/DragonFly/386/include/lib9.h
@@ -260,7 +260,7 @@ extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/FreeBSD/386/include/lib9.h b/FreeBSD/386/include/lib9.h
index 88914732..e17701ac 100644
--- a/FreeBSD/386/include/lib9.h
+++ b/FreeBSD/386/include/lib9.h
@@ -261,7 +261,7 @@ extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/Irix/mips/include/lib9.h b/Irix/mips/include/lib9.h
index e5cf87d2..010777be 100644
--- a/Irix/mips/include/lib9.h
+++ b/Irix/mips/include/lib9.h
@@ -244,7 +244,7 @@ struct Tm {
extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/Linux/386/include/lib9.h b/Linux/386/include/lib9.h
index a782b4d6..4c26709b 100644
--- a/Linux/386/include/lib9.h
+++ b/Linux/386/include/lib9.h
@@ -6,6 +6,9 @@
#define _LARGEFILE_SOURCE 1
#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64
+#ifdef USE_PTHREADS
+#define _REENTRANT 1
+#endif
#include <features.h>
#include <sys/types.h>
#include <stdlib.h>
@@ -256,7 +259,7 @@ extern vlong osnsec(void);
extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/Linux/arm/include/lib9.h b/Linux/arm/include/lib9.h
index c76ef660..b3ed6a33 100644
--- a/Linux/arm/include/lib9.h
+++ b/Linux/arm/include/lib9.h
@@ -6,6 +6,9 @@
#define _LARGEFILE_SOURCE 1
#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64
+#ifdef USE_PTHREADS
+#define _REENTRANT 1
+#endif
#include <features.h>
#include <sys/types.h>
#include <stdlib.h>
@@ -256,7 +259,7 @@ extern vlong osnsec(void);
extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
-//extern ulong getcallerpc(void*);
+//extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
@@ -455,7 +458,7 @@ extern char *argv0;
#define setbinmode()
/* need the inline because the link register is not saved in a known location */
-static __inline ulong getcallerpc(void* dummy) {
+static __inline uintptr getcallerpc(void* dummy) {
ulong lr;
__asm__( "mov %0, %%lr;"
: "=r" (lr)
diff --git a/Linux/power/include/lib9.h b/Linux/power/include/lib9.h
index de93d34e..8bd3bf74 100644
--- a/Linux/power/include/lib9.h
+++ b/Linux/power/include/lib9.h
@@ -6,6 +6,9 @@
#define _LARGEFILE_SOURCE 1
#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64
+#ifdef USE_PTHREADS
+#define _REENTRANT 1
+#endif
#include <features.h>
#include <sys/types.h>
#include <stdlib.h>
@@ -257,7 +260,7 @@ extern vlong osnsec(void);
extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/Linux/spim/include/lib9.h b/Linux/spim/include/lib9.h
index ca034445..8718c294 100644
--- a/Linux/spim/include/lib9.h
+++ b/Linux/spim/include/lib9.h
@@ -261,7 +261,7 @@ extern vlong osnsec(void);
extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/MacOSX/386/include/lib9.h b/MacOSX/386/include/lib9.h
index ce2321cf..2d04266b 100644
--- a/MacOSX/386/include/lib9.h
+++ b/MacOSX/386/include/lib9.h
@@ -275,7 +275,7 @@ extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/MacOSX/power/include/lib9.h b/MacOSX/power/include/lib9.h
index fa172673..0c1ed055 100644
--- a/MacOSX/power/include/lib9.h
+++ b/MacOSX/power/include/lib9.h
@@ -275,7 +275,7 @@ extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/NetBSD/386/include/lib9.h b/NetBSD/386/include/lib9.h
index cc7e03ef..b2884de5 100644
--- a/NetBSD/386/include/lib9.h
+++ b/NetBSD/386/include/lib9.h
@@ -264,7 +264,7 @@ extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/Nt/386/include/lib9.h b/Nt/386/include/lib9.h
index 71dbda51..0937c33e 100755
--- a/Nt/386/include/lib9.h
+++ b/Nt/386/include/lib9.h
@@ -269,7 +269,7 @@ extern vlong osnsec(void);
extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getuser(void);
diff --git a/OpenBSD/386/include/lib9.h b/OpenBSD/386/include/lib9.h
index 5008a148..050fa070 100644
--- a/OpenBSD/386/include/lib9.h
+++ b/OpenBSD/386/include/lib9.h
@@ -261,7 +261,7 @@ extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/Plan9/386/include/lib9.h b/Plan9/386/include/lib9.h
index 33721e45..e60fba8a 100644
--- a/Plan9/386/include/lib9.h
+++ b/Plan9/386/include/lib9.h
@@ -341,7 +341,7 @@ extern int enc16(char*, int, uchar*, int);
extern int encodefmt(Fmt*);
extern void exits(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern char* getenv(char*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
diff --git a/Plan9/arm/include/lib9.h b/Plan9/arm/include/lib9.h
index 33721e45..e60fba8a 100644
--- a/Plan9/arm/include/lib9.h
+++ b/Plan9/arm/include/lib9.h
@@ -341,7 +341,7 @@ extern int enc16(char*, int, uchar*, int);
extern int encodefmt(Fmt*);
extern void exits(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern char* getenv(char*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
diff --git a/Plan9/mips/include/lib9.h b/Plan9/mips/include/lib9.h
index 333b29f9..91e0f3d4 100644
--- a/Plan9/mips/include/lib9.h
+++ b/Plan9/mips/include/lib9.h
@@ -341,7 +341,7 @@ extern int enc16(char*, int, uchar*, int);
extern int encodefmt(Fmt*);
extern void exits(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern char* getenv(char*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
diff --git a/Plan9/power/include/lib9.h b/Plan9/power/include/lib9.h
index 333b29f9..91e0f3d4 100644
--- a/Plan9/power/include/lib9.h
+++ b/Plan9/power/include/lib9.h
@@ -341,7 +341,7 @@ extern int enc16(char*, int, uchar*, int);
extern int encodefmt(Fmt*);
extern void exits(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern char* getenv(char*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
diff --git a/Plan9/sparc/include/lib9.h b/Plan9/sparc/include/lib9.h
index 333b29f9..91e0f3d4 100644
--- a/Plan9/sparc/include/lib9.h
+++ b/Plan9/sparc/include/lib9.h
@@ -341,7 +341,7 @@ extern int enc16(char*, int, uchar*, int);
extern int encodefmt(Fmt*);
extern void exits(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern char* getenv(char*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
diff --git a/Solaris/386/include/lib9.h b/Solaris/386/include/lib9.h
index 661d62ab..57b69801 100644
--- a/Solaris/386/include/lib9.h
+++ b/Solaris/386/include/lib9.h
@@ -103,7 +103,7 @@ extern ulong getrealloctag(void*);
extern void* malloctopoolblock(void*);
extern int getfields(char*, char**, int, int, char*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
/*
* print routines
diff --git a/Solaris/sparc/include/lib9.h b/Solaris/sparc/include/lib9.h
index 1fb520c5..a79cd72b 100644
--- a/Solaris/sparc/include/lib9.h
+++ b/Solaris/sparc/include/lib9.h
@@ -255,7 +255,7 @@ extern void _assert(char*);
extern double charstod(int(*)(void*), void*);
extern char* cleanname(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
extern char* getwd(char*, int);
diff --git a/include/kern.h b/include/kern.h
index 93121b8a..cf268bff 100644
--- a/include/kern.h
+++ b/include/kern.h
@@ -202,6 +202,7 @@ extern Rune* runefmtstrflush(Fmt*);
#pragma varargck type "%" void
#pragma varargck type "n" int*
#pragma varargck type "p" void*
+#pragma varargck type "p" uintptr
#pragma varargck flag ','
#pragma varargck type "<" void*
#pragma varargck type "[" void*
@@ -341,7 +342,7 @@ extern int enc16(char*, int, uchar*, int);
extern int encodefmt(Fmt*);
extern void exits(char*);
extern double frexp(double, int*);
-extern ulong getcallerpc(void*);
+extern uintptr getcallerpc(void*);
extern char* getenv(char*);
extern int getfields(char*, char**, int, int, char*);
extern char* getuser(void);
diff --git a/include/version.h b/include/version.h
index 7582f39f..db8015a9 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1 +1 @@
-#define VERSION "Fourth Edition (20110619)"
+#define VERSION "Fourth Edition (20110629)"
diff --git a/lib9/getcallerpc-DragonFly-386.S b/lib9/getcallerpc-DragonFly-386.S
index d4ae6218..f05355ec 100644
--- a/lib9/getcallerpc-DragonFly-386.S
+++ b/lib9/getcallerpc-DragonFly-386.S
@@ -3,5 +3,6 @@
.type getcallerpc,@function
.global getcallerpc
getcallerpc:
- movl 4(%ebp), %eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
diff --git a/lib9/getcallerpc-FreeBSD-386.S b/lib9/getcallerpc-FreeBSD-386.S
index 134c2847..d7dc16ea 100644
--- a/lib9/getcallerpc-FreeBSD-386.S
+++ b/lib9/getcallerpc-FreeBSD-386.S
@@ -3,5 +3,6 @@
.type getcallerpc,@function
.global getcallerpc
getcallerpc:
- movl 4(%ebp), %eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
diff --git a/lib9/getcallerpc-Linux-386.S b/lib9/getcallerpc-Linux-386.S
index ae817758..a439875e 100644
--- a/lib9/getcallerpc-Linux-386.S
+++ b/lib9/getcallerpc-Linux-386.S
@@ -2,5 +2,6 @@
.type getcallerpc,@function
.global getcallerpc
getcallerpc:
- movl 4(%ebp), %eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
diff --git a/lib9/getcallerpc-MacOSX-386.s b/lib9/getcallerpc-MacOSX-386.s
index 92f940d7..d2aef82e 100644
--- a/lib9/getcallerpc-MacOSX-386.s
+++ b/lib9/getcallerpc-MacOSX-386.s
@@ -1,8 +1,7 @@
.file "getcallerpc-MacOSX-386.s"
-
.text
-
.globl _getcallerpc
_getcallerpc:
- movl 4(%ebp), %eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
diff --git a/lib9/getcallerpc-NetBSD-386.S b/lib9/getcallerpc-NetBSD-386.S
index 8cf0040b..09148627 100644
--- a/lib9/getcallerpc-NetBSD-386.S
+++ b/lib9/getcallerpc-NetBSD-386.S
@@ -3,5 +3,6 @@
.type getcallerpc,@function
.global getcallerpc
getcallerpc:
- movl 4(%ebp), %eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
diff --git a/lib9/getcallerpc-OpenBSD-386.S b/lib9/getcallerpc-OpenBSD-386.S
index edf1fd61..88817063 100644
--- a/lib9/getcallerpc-OpenBSD-386.S
+++ b/lib9/getcallerpc-OpenBSD-386.S
@@ -3,5 +3,6 @@
.type getcallerpc,@function
.global getcallerpc
getcallerpc:
- movl 4(%ebp), %eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
diff --git a/lib9/getcallerpc-Solaris-386.s b/lib9/getcallerpc-Solaris-386.s
index 5d4c7053..ad582d39 100644
--- a/lib9/getcallerpc-Solaris-386.s
+++ b/lib9/getcallerpc-Solaris-386.s
@@ -1,7 +1,8 @@
.align 4
.globl getcallerpc
getcallerpc:
- movl 4(%ebp),%eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
.align 4
.type getcallerpc,@function
diff --git a/lib9/getcallerpc-Unixware-386.s b/lib9/getcallerpc-Unixware-386.s
index 5d4c7053..ad582d39 100644
--- a/lib9/getcallerpc-Unixware-386.s
+++ b/lib9/getcallerpc-Unixware-386.s
@@ -1,7 +1,8 @@
.align 4
.globl getcallerpc
getcallerpc:
- movl 4(%ebp),%eax
+ movl 4(%esp), %eax
+ movl -4(%eax), %eax
ret
.align 4
.type getcallerpc,@function