[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 04/13] util/selfmap: Use dev_t and ino_t in MapInfo
From: |
Richard Henderson |
Subject: |
[PULL 04/13] util/selfmap: Use dev_t and ino_t in MapInfo |
Date: |
Fri, 1 Sep 2023 13:42:42 -0700 |
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>
---
include/qemu/selfmap.h | 4 ++--
linux-user/syscall.c | 6 ++++--
util/selfmap.c | 12 +++++++-----
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/include/qemu/selfmap.h b/include/qemu/selfmap.h
index 7d938945cb..1690a74f4b 100644
--- a/include/qemu/selfmap.h
+++ b/include/qemu/selfmap.h
@@ -20,10 +20,10 @@ typedef struct {
bool is_exec;
bool is_priv;
+ dev_t dev;
+ ino_t inode;
uint64_t offset;
- uint64_t inode;
const char *path;
- char dev[];
} MapInfo;
/**
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index faad3a56df..a562920a84 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -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
- " %c%c%c%c %08" PRIx64 " %s %"PRId64,
+ " %c%c%c%c %08" PRIx64 " %02x:%02x %"PRId64,
h2g(min), h2g(max - 1) + 1,
(flags & PAGE_READ) ? 'r' : '-',
(flags & PAGE_WRITE_ORG) ? 'w' : '-',
(flags & PAGE_EXEC) ? 'x' : '-',
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) {
dprintf(fd, "%*s%s\n", 73 - count, "", path);
} else {
diff --git a/util/selfmap.c b/util/selfmap.c
index 4db5b42651..483cb617e2 100644
--- a/util/selfmap.c
+++ b/util/selfmap.c
@@ -30,19 +30,21 @@ IntervalTreeRoot *read_self_maps(void)
if (nfields > 4) {
uint64_t start, end, offset, inode;
+ unsigned dev_maj, dev_min;
int errors = 0;
const char *p;
errors |= qemu_strtou64(fields[0], &p, 16, &start);
errors |= qemu_strtou64(p + 1, NULL, 16, &end);
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);
if (!errors) {
- size_t dev_len, path_len;
+ size_t path_len;
MapInfo *e;
- dev_len = strlen(fields[3]) + 1;
if (nfields == 6) {
p = fields[5];
p += strspn(p, " ");
@@ -52,11 +54,12 @@ IntervalTreeRoot *read_self_maps(void)
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.last = end - 1;
e->offset = offset;
+ e->dev = makedev(dev_maj, dev_min);
e->inode = inode;
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_priv = fields[1][3] == 'p';
- memcpy(e->dev, fields[3], dev_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);
--
2.34.1
- [PULL 00/13] linux-user patch queue, Richard Henderson, 2023/09/01
- [PULL 03/13] linux-user: Emulate /proc/cpuinfo for Alpha, Richard Henderson, 2023/09/01
- [PULL 01/13] linux-user: Split out cpu/target_proc.h, Richard Henderson, 2023/09/01
- [PULL 02/13] linux-user: Emulate /proc/cpuinfo on aarch64 and arm, Richard Henderson, 2023/09/01
- [PULL 06/13] linux-user: Adjust brk for load_bias, Richard Henderson, 2023/09/01
- [PULL 04/13] util/selfmap: Use dev_t and ino_t in MapInfo,
Richard Henderson <=
- [PULL 05/13] linux-user: Use walk_memory_regions for open_self_maps, Richard Henderson, 2023/09/01
- [PULL 08/13] linux-user: Emulate the Anonymous: keyword in /proc/self/smaps, Richard Henderson, 2023/09/01
- [PULL 09/13] linux-user: Remove ELF_START_MMAP and image_info.start_mmap, Richard Henderson, 2023/09/01
- [PULL 07/13] linux-user: Show heap address in /proc/pid/maps, Richard Henderson, 2023/09/01
- [PULL 12/13] linux-user: Fix shmdt, Richard Henderson, 2023/09/01
- [PULL 11/13] linux-user: Use WITH_MMAP_LOCK_GUARD in target_{shmat, shmdt}, Richard Henderson, 2023/09/01
- [PULL 10/13] linux-user: Move shmat and shmdt implementations to mmap.c, Richard Henderson, 2023/09/01
- [PULL 13/13] linux-user: Track shm regions with an interval tree, Richard Henderson, 2023/09/01
- Re: [PULL 00/13] linux-user patch queue, Stefan Hajnoczi, 2023/09/06