mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
linux-user: Rewrite and improve /proc/pid/maps
linux-user: Fix shmdt and improve shm region tracking linux-user: Remove ELF_START_MMAP and image_info.start_mmap -----BEGIN PGP SIGNATURE----- iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmTyTEcdHHJpY2hhcmQu aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV8aZAf/UVKDv0FwEzxn3wzx pT+NbP4adHCew5ovDq94In9OpwG4+PtZj3x+EdPCFxAvVb9KdOs001a9zSRYSwWi 0p9ZkOgtq58/Wr34dl6C8oPZP8bnw7hfVcXWYwdsBq9K+dmW9Tu4LgZSc92NWYiE SGBATB/cF4keLlDJrm1YBfb6cVKmYHdgQzMHr4g4TitBOO3lic8HQglXN8eKvQyd ZKuMxFwfSGjaNXsoBLmzPBEqJCLzj5JNtOb8maIN9oPTkkC66XvkBmD/4UrQ7K3x aX2QgZpxZYZsyKfWJd4EkrJl+0JZYvGW4vBX1c+vBdIYQZoBHlWwZQBqsi+AMA6J ASc3hQ== =QWfr -----END PGP SIGNATURE----- Merge tag 'pull-lu-20230901' of https://gitlab.com/rth7680/qemu into staging linux-user: Rewrite and improve /proc/pid/maps linux-user: Fix shmdt and improve shm region tracking linux-user: Remove ELF_START_MMAP and image_info.start_mmap # -----BEGIN PGP SIGNATURE----- # # iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmTyTEcdHHJpY2hhcmQu # aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV8aZAf/UVKDv0FwEzxn3wzx # pT+NbP4adHCew5ovDq94In9OpwG4+PtZj3x+EdPCFxAvVb9KdOs001a9zSRYSwWi # 0p9ZkOgtq58/Wr34dl6C8oPZP8bnw7hfVcXWYwdsBq9K+dmW9Tu4LgZSc92NWYiE # SGBATB/cF4keLlDJrm1YBfb6cVKmYHdgQzMHr4g4TitBOO3lic8HQglXN8eKvQyd # ZKuMxFwfSGjaNXsoBLmzPBEqJCLzj5JNtOb8maIN9oPTkkC66XvkBmD/4UrQ7K3x # aX2QgZpxZYZsyKfWJd4EkrJl+0JZYvGW4vBX1c+vBdIYQZoBHlWwZQBqsi+AMA6J # ASc3hQ== # =QWfr # -----END PGP SIGNATURE----- # gpg: Signature made Fri 01 Sep 2023 16:40:39 EDT # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "richard.henderson@linaro.org" # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [full] # Primary key fingerprint: 7A48 1E78 868B 4DB6 A85A 05C0 64DF 38E8 AF7E 215F * tag 'pull-lu-20230901' of https://gitlab.com/rth7680/qemu: linux-user: Track shm regions with an interval tree linux-user: Fix shmdt linux-user: Use WITH_MMAP_LOCK_GUARD in target_{shmat,shmdt} linux-user: Move shmat and shmdt implementations to mmap.c linux-user: Remove ELF_START_MMAP and image_info.start_mmap linux-user: Emulate the Anonymous: keyword in /proc/self/smaps linux-user: Show heap address in /proc/pid/maps linux-user: Adjust brk for load_bias linux-user: Use walk_memory_regions for open_self_maps util/selfmap: Use dev_t and ino_t in MapInfo linux-user: Emulate /proc/cpuinfo for Alpha linux-user: Emulate /proc/cpuinfo on aarch64 and arm linux-user: Split out cpu/target_proc.h Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
bde438c3ec
29 changed files with 828 additions and 437 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue