maybe 64-bit better
diff --git a/src/libmach/Linux.c b/src/libmach/Linux.c
index 12b0f9b..7128bdc 100644
--- a/src/libmach/Linux.c
+++ b/src/libmach/Linux.c
@@ -34,8 +34,8 @@
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 @@
}
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 @@
}
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 @@
addr = reg2linux(name);
if(~addr == 0){
if(isr){
- *val = ~(ulong)0;
+ *val = ~(uvlong)0;
return 0;
}
werrstr("register not available");
diff --git a/src/libmach/frame.c b/src/libmach/frame.c
index 6e44851..1d1ac40 100644
--- a/src/libmach/frame.c
+++ b/src/libmach/frame.c
@@ -13,7 +13,7 @@
};
static int
-locregrw(Regs *regs, char *name, ulong *val, int isr)
+locregrw(Regs *regs, char *name, uvlong *val, int isr)
{
int i;
LocRegs *lr;
@@ -36,7 +36,7 @@
{
char *rname;
int i, ipc, ret;
- ulong nextpc, pc, v;
+ uvlong nextpc, pc, v;
ulong *cur, *next;
LocRegs lr;
Symbol s, *sp;
diff --git a/src/libmach/loc.c b/src/libmach/loc.c
index 47bcf3d..8113168 100644
--- a/src/libmach/loc.c
+++ b/src/libmach/loc.c
@@ -70,7 +70,7 @@
int
lget2(Map *map, Regs *regs, Loc loc, u16int *u)
{
- ulong ul;
+ uvlong ul;
if(locsimplify(map, regs, loc, &loc) < 0)
return -1;
@@ -93,7 +93,7 @@
int
lget4(Map *map, Regs *regs, Loc loc, u32int *u)
{
- ulong ul;
+ uvlong ul;
if(locsimplify(map, regs, loc, &loc) < 0)
return -1;
@@ -116,7 +116,7 @@
int
lget8(Map *map, Regs *regs, Loc loc, u64int *u)
{
- ulong ul;
+ uvlong ul;
if(locsimplify(map, regs, loc, &loc) < 0)
return -1;
@@ -188,7 +188,7 @@
}
Loc
-locaddr(ulong addr)
+locaddr(uvlong addr)
{
Loc l;
@@ -198,7 +198,7 @@
}
Loc
-locindir(char *reg, long offset)
+locindir(char *reg, vlong offset)
{
Loc l;
@@ -209,7 +209,7 @@
}
Loc
-locconst(ulong con)
+locconst(uvlong con)
{
Loc l;
diff --git a/src/libmach/map.c b/src/libmach/map.c
index 2745dd4..eed205b 100644
--- a/src/libmach/map.c
+++ b/src/libmach/map.c
@@ -6,10 +6,10 @@
#include <bio.h>
#include <mach.h>
-static int fdrw(Map*, Seg*, ulong, void*, uint, int);
-static int zerorw(Map*, Seg*, ulong, void*, uint, int);
-static int mrw(Map*, ulong, void*, uint, int);
-static int datarw(Map*, Seg*, ulong, void*, uint, int);
+static int fdrw(Map*, Seg*, uvlong, void*, uint, int);
+static int zerorw(Map*, Seg*, uvlong, void*, uint, int);
+static int mrw(Map*, uvlong, void*, uint, int);
+static int datarw(Map*, Seg*, uvlong, void*, uint, int);
Map*
allocmap(void)
@@ -71,7 +71,7 @@
}
int
-addrtoseg(Map *map, ulong addr, Seg *sp)
+addrtoseg(Map *map, uvlong addr, Seg *sp)
{
int i;
Seg *s;
@@ -93,7 +93,7 @@
}
int
-addrtosegafter(Map *map, ulong addr, Seg *sp)
+addrtosegafter(Map *map, uvlong addr, Seg *sp)
{
int i;
Seg *s, *best;
@@ -142,13 +142,13 @@
}
int
-get1(Map *map, ulong addr, uchar *a, uint n)
+get1(Map *map, uvlong addr, uchar *a, uint n)
{
return mrw(map, addr, a, n, 1);
}
int
-get2(Map *map, ulong addr, u16int *u)
+get2(Map *map, uvlong addr, u16int *u)
{
u16int v;
@@ -159,7 +159,7 @@
}
int
-get4(Map *map, ulong addr, u32int *u)
+get4(Map *map, uvlong addr, u32int *u)
{
u32int v;
@@ -170,7 +170,7 @@
}
int
-get8(Map *map, ulong addr, u64int *u)
+get8(Map *map, uvlong addr, u64int *u)
{
u64int v;
@@ -181,37 +181,37 @@
}
int
-put1(Map *map, ulong addr, uchar *a, uint n)
+put1(Map *map, uvlong addr, uchar *a, uint n)
{
return mrw(map, addr, a, n, 0);
}
int
-put2(Map *map, ulong addr, u16int u)
+put2(Map *map, uvlong addr, u16int u)
{
u = mach->swap2(u);
return mrw(map, addr, &u, 2, 0);
}
int
-put4(Map *map, ulong addr, u32int u)
+put4(Map *map, uvlong addr, u32int u)
{
u = mach->swap4(u);
return mrw(map, addr, &u, 4, 0);
}
int
-put8(Map *map, ulong addr, u64int u)
+put8(Map *map, uvlong addr, u64int u)
{
u = mach->swap8(u);
return mrw(map, addr, &u, 8, 0);
}
static Seg*
-reloc(Map *map, ulong addr, uint n, ulong *off, uint *nn)
+reloc(Map *map, uvlong addr, uint n, uvlong *off, uint *nn)
{
int i;
- ulong o;
+ uvlong o;
if(map == nil){
werrstr("invalid map");
@@ -236,12 +236,12 @@
}
static int
-mrw(Map *map, ulong addr, void *a, uint n, int r)
+mrw(Map *map, uvlong addr, void *a, uint n, int r)
{
uint nn;
uint tot;
Seg *s;
- ulong off;
+ uvlong off;
for(tot=0; tot<n; tot+=nn){
s = reloc(map, addr+tot, n-tot, &off, &nn);
@@ -254,11 +254,11 @@
}
static int
-fdrw(Map *map, Seg *seg, ulong addr, void *a, uint n, int r)
+fdrw(Map *map, Seg *seg, uvlong addr, void *a, uint n, int r)
{
int nn;
uint tot;
- ulong off;
+ uvlong off;
USED(map);
off = seg->offset + addr;
@@ -279,7 +279,7 @@
}
static int
-zerorw(Map *map, Seg *seg, ulong addr, void *a, uint n, int r)
+zerorw(Map *map, Seg *seg, uvlong addr, void *a, uint n, int r)
{
USED(map);
USED(seg);
@@ -294,7 +294,7 @@
}
static int
-datarw(Map *map, Seg *seg, ulong addr, void *a, uint n, int r)
+datarw(Map *map, Seg *seg, uvlong addr, void *a, uint n, int r)
{
USED(map);
diff --git a/src/libmach/mkfile b/src/libmach/mkfile
index 7742643..3ad5384 100644
--- a/src/libmach/mkfile
+++ b/src/libmach/mkfile
@@ -40,7 +40,7 @@
symmacho.$O\
symstabs.$O\
-HFILES=mach.h
+HFILES=$PLAN9/include/mach.h
<$PLAN9/src/mksyslib
CFLAGS=$CFLAGS -I.
diff --git a/src/libmach/regs.c b/src/libmach/regs.c
index 43c0478..2ead7a3 100644
--- a/src/libmach/regs.c
+++ b/src/libmach/regs.c
@@ -3,7 +3,7 @@
#include <mach.h>
int
-rput(Regs *regs, char *name, ulong u)
+rput(Regs *regs, char *name, uvlong u)
{
if(regs == nil){
werrstr("registers not mapped");
@@ -13,7 +13,7 @@
}
int
-rget(Regs *regs, char *name, ulong *u)
+rget(Regs *regs, char *name, uvlong *u)
{
if(regs == nil){
*u = ~(ulong)0;
@@ -24,7 +24,7 @@
}
int
-_uregrw(Regs *regs, char *name, ulong *u, int isr)
+_uregrw(Regs *regs, char *name, uvlong *u, int isr)
{
Regdesc *r;
uchar *ureg;
@@ -41,7 +41,7 @@
switch(r->format){
default:
case 'X':
- *u = mach->swap4(*(u32int*)ureg);
+ *u = mach->swap4(*(ulong*)ureg);
return 0;
}
}
diff --git a/src/libmach/symdwarf.c b/src/libmach/symdwarf.c
index eeafa8d..c29f287 100644
--- a/src/libmach/symdwarf.c
+++ b/src/libmach/symdwarf.c
@@ -323,11 +323,11 @@
}
static int
-dwarfeval(Dwarf *d, Map *map, Regs *regs, ulong cfa, int rno, DwarfExpr e, ulong *u)
+dwarfeval(Dwarf *d, Map *map, Regs *regs, ulong cfa, int rno, DwarfExpr e, uvlong *u)
{
int i;
u32int u4;
- ulong uu;
+ uvlong uu;
switch(e.type){
case RuleUndef:
@@ -400,7 +400,7 @@
{
char *name;
int i, j;
- ulong cfa, pc, u;
+ uvlong cfa, pc, u;
Dwarf *d;
DwarfExpr *e, epc, ecfa;