commit 9b24f92c5611353cdafb6756ae21b405ebc695dd from: rsc date: Fri Jun 11 04:33:54 2004 UTC maybe 64-bit better commit - fa009f9d7217bd577248e53ff5aba2e8b1e0c4b2 commit + 9b24f92c5611353cdafb6756ae21b405ebc695dd blob - 12b0f9b8001beaab242e039df8d44cd04621f0fa blob + 7128bdc4907cd245656291a62b1262f98bab13cb --- src/libmach/Linux.c +++ 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 #include -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 @@ findseg(Map *map, char *name, char *file) } int -addrtoseg(Map *map, ulong addr, Seg *sp) +addrtoseg(Map *map, uvlong addr, Seg *sp) { int i; Seg *s; @@ -93,7 +93,7 @@ addrtoseg(Map *map, ulong addr, Seg *sp) } int -addrtosegafter(Map *map, ulong addr, Seg *sp) +addrtosegafter(Map *map, uvlong addr, Seg *sp) { int i; Seg *s, *best; @@ -142,13 +142,13 @@ removeseg(Map *map, int i) } 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 @@ get2(Map *map, ulong addr, u16int *u) } int -get4(Map *map, ulong addr, u32int *u) +get4(Map *map, uvlong addr, u32int *u) { u32int v; @@ -170,7 +170,7 @@ get4(Map *map, ulong addr, u32int *u) } int -get8(Map *map, ulong addr, u64int *u) +get8(Map *map, uvlong addr, u64int *u) { u64int v; @@ -181,37 +181,37 @@ get8(Map *map, ulong addr, u64int *u) } 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 @@ reloc(Map *map, ulong addr, uint n, ulong *off, uint * } 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; totoffset + addr; @@ -279,7 +279,7 @@ fdrw(Map *map, Seg *seg, ulong addr, void *a, uint n, } 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 @@ zerorw(Map *map, Seg *seg, ulong addr, void *a, uint n } 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); blob - 77426436b9b0feb7b5961250416458ffaba7cdef blob + 3ad5384db6ee827c747163588539c0ea586ef7af --- src/libmach/mkfile +++ src/libmach/mkfile @@ -40,7 +40,7 @@ OFILES=\ symmacho.$O\ symstabs.$O\ -HFILES=mach.h +HFILES=$PLAN9/include/mach.h <$PLAN9/src/mksyslib CFLAGS=$CFLAGS -I. blob - 43c04786c7ebc176595aa3728c8d391b6d09ca7b blob + 2ead7a33f69f16c335096248d6cb7149376fdd77 --- src/libmach/regs.c +++ src/libmach/regs.c @@ -3,7 +3,7 @@ #include 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 @@ rput(Regs *regs, char *name, ulong u) } 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 @@ rget(Regs *regs, char *name, ulong *u) } 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 @@ _uregrw(Regs *regs, char *name, ulong *u, int isr) switch(r->format){ default: case 'X': - *u = mach->swap4(*(u32int*)ureg); + *u = mach->swap4(*(ulong*)ureg); return 0; } } blob - eeafa8dccb8bc755aac55f482ffa3ab7242e896b blob + c29f287fcb67db16b81f81df340811f2c4611a5a --- src/libmach/symdwarf.c +++ src/libmach/symdwarf.c @@ -323,11 +323,11 @@ dwarftosym(Fhdr *fp, Dwarf *d, DwarfSym *ds, Symbol *s } 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 @@ _dwarfunwind(Fhdr *fhdr, Map *map, Regs *regs, ulong * { char *name; int i, j; - ulong cfa, pc, u; + uvlong cfa, pc, u; Dwarf *d; DwarfExpr *e, epc, ecfa;