aboutsummaryrefslogtreecommitdiff
path: root/src/libmach/Linux.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-06-11 04:33:54 +0000
committerrsc <devnull@localhost>2004-06-11 04:33:54 +0000
commit9b24f92c5611353cdafb6756ae21b405ebc695dd (patch)
tree6a81ee9775a14a09f60c2c244ada1cd805806297 /src/libmach/Linux.c
parentfa009f9d7217bd577248e53ff5aba2e8b1e0c4b2 (diff)
downloadplan9port-9b24f92c5611353cdafb6756ae21b405ebc695dd.tar.gz
plan9port-9b24f92c5611353cdafb6756ae21b405ebc695dd.tar.bz2
plan9port-9b24f92c5611353cdafb6756ae21b405ebc695dd.zip
maybe 64-bit better
Diffstat (limited to 'src/libmach/Linux.c')
-rw-r--r--src/libmach/Linux.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/libmach/Linux.c b/src/libmach/Linux.c
index 12b0f9b8..7128bdc4 100644
--- a/src/libmach/Linux.c
+++ b/src/libmach/Linux.c
@@ -34,8 +34,8 @@ struct PtraceRegs
int pid;
};
-static int ptracerw(Map*, Seg*, ulong, void*, uint, int);
-static int ptraceregrw(Regs*, char*, ulong*, int);
+static int ptracerw(Map*, Seg*, uvlong, void*, uint, int);
+static int ptraceregrw(Regs*, char*, uvlong*, int);
static int attachedpids[1000];
static int nattached;
@@ -126,12 +126,17 @@ detachproc(int pid)
}
static int
-ptracerw(Map *map, Seg *seg, ulong addr, void *v, uint n, int isr)
+ptracerw(Map *map, Seg *seg, uvlong addr, void *v, uint n, int isr)
{
int i;
u32int u;
uchar buf[4];
+ if(addr>>32){
+ werrstr("address out of range");
+ return -1;
+ }
+
addr += seg->base;
for(i=0; i<n; i+=4){
if(isr){
@@ -200,7 +205,7 @@ reg2linux(char *reg)
}
static int
-ptraceregrw(Regs *regs, char *name, ulong *val, int isr)
+ptraceregrw(Regs *regs, char *name, uvlong *val, int isr)
{
int pid;
ulong addr;
@@ -210,7 +215,7 @@ ptraceregrw(Regs *regs, char *name, ulong *val, int isr)
addr = reg2linux(name);
if(~addr == 0){
if(isr){
- *val = ~(ulong)0;
+ *val = ~(uvlong)0;
return 0;
}
werrstr("register not available");