diff options
author | rsc <devnull@localhost> | 2004-06-11 04:33:54 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-06-11 04:33:54 +0000 |
commit | 9b24f92c5611353cdafb6756ae21b405ebc695dd (patch) | |
tree | 6a81ee9775a14a09f60c2c244ada1cd805806297 /src/libmach/Linux.c | |
parent | fa009f9d7217bd577248e53ff5aba2e8b1e0c4b2 (diff) | |
download | plan9port-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.c | 15 |
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"); |