mirror of https://github.com/xemu-project/xemu.git
util/selfmap: Use dev_t and ino_t in MapInfo
Use dev_t instead of a string, and ino_t instead of uint64_t. The latter is likely to be identical on modern systems but is more type-correct for usage. Tested-by: Helge Deller <deller@gmx.de> Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
4757e2c771
commit
79be812bdb
|
@ -20,10 +20,10 @@ typedef struct {
|
||||||
bool is_exec;
|
bool is_exec;
|
||||||
bool is_priv;
|
bool is_priv;
|
||||||
|
|
||||||
|
dev_t dev;
|
||||||
|
ino_t inode;
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
uint64_t inode;
|
|
||||||
const char *path;
|
const char *path;
|
||||||
char dev[];
|
|
||||||
} MapInfo;
|
} MapInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -8160,13 +8160,15 @@ static int open_self_maps_1(CPUArchState *cpu_env, int fd, bool smaps)
|
||||||
}
|
}
|
||||||
|
|
||||||
count = dprintf(fd, TARGET_ABI_FMT_ptr "-" TARGET_ABI_FMT_ptr
|
count = dprintf(fd, TARGET_ABI_FMT_ptr "-" TARGET_ABI_FMT_ptr
|
||||||
" %c%c%c%c %08" PRIx64 " %s %"PRId64,
|
" %c%c%c%c %08" PRIx64 " %02x:%02x %"PRId64,
|
||||||
h2g(min), h2g(max - 1) + 1,
|
h2g(min), h2g(max - 1) + 1,
|
||||||
(flags & PAGE_READ) ? 'r' : '-',
|
(flags & PAGE_READ) ? 'r' : '-',
|
||||||
(flags & PAGE_WRITE_ORG) ? 'w' : '-',
|
(flags & PAGE_WRITE_ORG) ? 'w' : '-',
|
||||||
(flags & PAGE_EXEC) ? 'x' : '-',
|
(flags & PAGE_EXEC) ? 'x' : '-',
|
||||||
e->is_priv ? 'p' : 's',
|
e->is_priv ? 'p' : 's',
|
||||||
(uint64_t) e->offset, e->dev, e->inode);
|
(uint64_t)e->offset,
|
||||||
|
major(e->dev), minor(e->dev),
|
||||||
|
(uint64_t)e->inode);
|
||||||
if (path) {
|
if (path) {
|
||||||
dprintf(fd, "%*s%s\n", 73 - count, "", path);
|
dprintf(fd, "%*s%s\n", 73 - count, "", path);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -30,19 +30,21 @@ IntervalTreeRoot *read_self_maps(void)
|
||||||
|
|
||||||
if (nfields > 4) {
|
if (nfields > 4) {
|
||||||
uint64_t start, end, offset, inode;
|
uint64_t start, end, offset, inode;
|
||||||
|
unsigned dev_maj, dev_min;
|
||||||
int errors = 0;
|
int errors = 0;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
errors |= qemu_strtou64(fields[0], &p, 16, &start);
|
errors |= qemu_strtou64(fields[0], &p, 16, &start);
|
||||||
errors |= qemu_strtou64(p + 1, NULL, 16, &end);
|
errors |= qemu_strtou64(p + 1, NULL, 16, &end);
|
||||||
errors |= qemu_strtou64(fields[2], NULL, 16, &offset);
|
errors |= qemu_strtou64(fields[2], NULL, 16, &offset);
|
||||||
|
errors |= qemu_strtoui(fields[3], &p, 16, &dev_maj);
|
||||||
|
errors |= qemu_strtoui(p + 1, NULL, 16, &dev_min);
|
||||||
errors |= qemu_strtou64(fields[4], NULL, 10, &inode);
|
errors |= qemu_strtou64(fields[4], NULL, 10, &inode);
|
||||||
|
|
||||||
if (!errors) {
|
if (!errors) {
|
||||||
size_t dev_len, path_len;
|
size_t path_len;
|
||||||
MapInfo *e;
|
MapInfo *e;
|
||||||
|
|
||||||
dev_len = strlen(fields[3]) + 1;
|
|
||||||
if (nfields == 6) {
|
if (nfields == 6) {
|
||||||
p = fields[5];
|
p = fields[5];
|
||||||
p += strspn(p, " ");
|
p += strspn(p, " ");
|
||||||
|
@ -52,11 +54,12 @@ IntervalTreeRoot *read_self_maps(void)
|
||||||
path_len = 0;
|
path_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
e = g_malloc0(sizeof(*e) + dev_len + path_len);
|
e = g_malloc0(sizeof(*e) + path_len);
|
||||||
|
|
||||||
e->itree.start = start;
|
e->itree.start = start;
|
||||||
e->itree.last = end - 1;
|
e->itree.last = end - 1;
|
||||||
e->offset = offset;
|
e->offset = offset;
|
||||||
|
e->dev = makedev(dev_maj, dev_min);
|
||||||
e->inode = inode;
|
e->inode = inode;
|
||||||
|
|
||||||
e->is_read = fields[1][0] == 'r';
|
e->is_read = fields[1][0] == 'r';
|
||||||
|
@ -64,9 +67,8 @@ IntervalTreeRoot *read_self_maps(void)
|
||||||
e->is_exec = fields[1][2] == 'x';
|
e->is_exec = fields[1][2] == 'x';
|
||||||
e->is_priv = fields[1][3] == 'p';
|
e->is_priv = fields[1][3] == 'p';
|
||||||
|
|
||||||
memcpy(e->dev, fields[3], dev_len);
|
|
||||||
if (path_len) {
|
if (path_len) {
|
||||||
e->path = memcpy(e->dev + dev_len, p, path_len);
|
e->path = memcpy(e + 1, p, path_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
interval_tree_insert(&e->itree, root);
|
interval_tree_insert(&e->itree, root);
|
||||||
|
|
Loading…
Reference in New Issue