summaryrefslogtreecommitdiff
path: root/utils/libmach/map.c
diff options
context:
space:
mode:
authorforsyth <forsyth@vitanuova.com>2010-04-27 12:51:13 +0100
committerforsyth <forsyth@vitanuova.com>2010-04-27 12:51:13 +0100
commitd67b7dad77bb8aa973dad1f7c3ab0c309b114278 (patch)
tree6794120fb327d6de19cf05eed53f80d877781a3e /utils/libmach/map.c
parent09da2e137d5eb0c940df35d989e4c31ec0654fc4 (diff)
20100427-1251
Diffstat (limited to 'utils/libmach/map.c')
-rw-r--r--utils/libmach/map.c60
1 files changed, 30 insertions, 30 deletions
diff --git a/utils/libmach/map.c b/utils/libmach/map.c
index afb19b11..e1d6010e 100644
--- a/utils/libmach/map.c
+++ b/utils/libmach/map.c
@@ -25,7 +25,7 @@ newmap(Map *map, int n)
}
int
-setmap(Map *map, int fd, ulong b, ulong e, ulong f, char *name)
+setmap(Map *map, int fd, uvlong b, uvlong e, vlong f, char *name)
{
int i;
@@ -45,7 +45,7 @@ setmap(Map *map, int fd, ulong b, ulong e, ulong f, char *name)
return 1;
}
-static ulong
+static uvlong
stacktop(int pid)
{
char buf[64];
@@ -53,7 +53,7 @@ stacktop(int pid)
int n;
char *cp;
- sprint(buf, "/proc/%d/segment", pid);
+ snprint(buf, sizeof(buf), "/proc/%d/segment", pid);
fd = open(buf, 0);
if (fd < 0)
return 0;
@@ -73,7 +73,7 @@ stacktop(int pid)
cp++;
if (!*cp)
return 0;
- return strtoul(cp, 0, 16);
+ return strtoull(cp, 0, 16);
}
Map*
@@ -82,7 +82,7 @@ attachproc(int pid, int kflag, int corefd, Fhdr *fp)
char buf[64], *regs;
int fd;
Map *map;
- ulong n;
+ uvlong n;
int mode;
map = newmap(0, 4);
@@ -115,13 +115,13 @@ attachproc(int pid, int kflag, int corefd, Fhdr *fp)
setmap(map, fd, mach->regsize, mach->regsize+mach->fpregsize, 0, "fpregs");
}
setmap(map, corefd, fp->txtaddr, fp->txtaddr+fp->txtsz, fp->txtaddr, "text");
- if(kflag || (ulong) fp->dataddr >= 0x7fffffff) {
- setmap(map, corefd, fp->dataddr, 0xffffffff, fp->dataddr, "data");
+ if(kflag || fp->dataddr >= mach->utop) {
+ setmap(map, corefd, fp->dataddr, ~0, fp->dataddr, "data");
return map;
}
n = stacktop(pid);
if (n == 0) {
- setmap(map, corefd, fp->dataddr, 0x7fffffff, fp->dataddr, "data");
+ setmap(map, corefd, fp->dataddr, mach->utop, fp->dataddr, "data");
return map;
}
setmap(map, corefd, fp->dataddr, n, fp->dataddr, "data");
@@ -149,6 +149,28 @@ unusemap(Map *map, int i)
}
Map*
+loadmap(Map *map, int fd, Fhdr *fp)
+{
+ map = newmap(map, 2);
+ if (map == 0)
+ return 0;
+
+ map->seg[0].b = fp->txtaddr;
+ map->seg[0].e = fp->txtaddr+fp->txtsz;
+ map->seg[0].f = fp->txtoff;
+ map->seg[0].fd = fd;
+ map->seg[0].inuse = 1;
+ map->seg[0].name = "text";
+ map->seg[1].b = fp->dataddr;
+ map->seg[1].e = fp->dataddr+fp->datsz;
+ map->seg[1].f = fp->datoff;
+ map->seg[1].fd = fd;
+ map->seg[1].inuse = 1;
+ map->seg[1].name = "data";
+ return map;
+}
+
+Map*
attachremt(int fd, Fhdr *f)
{
Map *m;
@@ -171,28 +193,6 @@ attachremt(int fd, Fhdr *f)
return m;
}
-Map*
-loadmap(Map *map, int fd, Fhdr *fp)
-{
- map = newmap(map, 2);
- if (map == 0)
- return 0;
-
- map->seg[0].b = fp->txtaddr;
- map->seg[0].e = fp->txtaddr+fp->txtsz;
- map->seg[0].f = fp->txtoff;
- map->seg[0].fd = fd;
- map->seg[0].inuse = 1;
- map->seg[0].name = "text";
- map->seg[1].b = fp->dataddr;
- map->seg[1].e = fp->dataddr+fp->datsz;
- map->seg[1].f = fp->datoff;
- map->seg[1].fd = fd;
- map->seg[1].inuse = 1;
- map->seg[1].name = "data";
- return map;
-}
-
void
setmapio(Map *map, int i, Rsegio get, Rsegio put)
{