qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Viktor Prutyanov <viktor.prutyanov@phystech.edu>
Subject: [Qemu-devel] [PULL 29/77] contrib/elf2dmp: use GLib in PDB processing
Date: Mon,  4 Feb 2019 19:35:31 +0100	[thread overview]
Message-ID: <1549305379-51117-30-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1549305379-51117-1-git-send-email-pbonzini@redhat.com>

From: Viktor Prutyanov <viktor.prutyanov@phystech.edu>

Replace POSIX mmap with GLib g_mapped_file_new in PDB processing stage
to make elf2dmp cross-platform. There are no direct POSIX in elf2dmp
after this patch.

Signed-off-by: Viktor Prutyanov <viktor.prutyanov@phystech.edu>
Message-Id: <20181220012441.13694-4-viktor.prutyanov@phystech.edu>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 contrib/elf2dmp/pdb.c | 29 ++++++++---------------------
 contrib/elf2dmp/pdb.h |  2 +-
 2 files changed, 9 insertions(+), 22 deletions(-)

diff --git a/contrib/elf2dmp/pdb.c b/contrib/elf2dmp/pdb.c
index bcb01b4..52e352d 100644
--- a/contrib/elf2dmp/pdb.c
+++ b/contrib/elf2dmp/pdb.c
@@ -277,28 +277,18 @@ static void pdb_reader_exit(struct pdb_reader *r)
 
 int pdb_init_from_file(const char *name, struct pdb_reader *reader)
 {
+    GError *gerr = NULL;
     int err = 0;
-    int fd;
     void *map;
-    struct stat st;
 
-    fd = open(name, O_RDONLY, 0);
-    if (fd == -1) {
-        eprintf("Failed to open PDB file \'%s\'\n", name);
+    reader->gmf = g_mapped_file_new(name, TRUE, &gerr);
+    if (gerr) {
+        eprintf("Failed to map PDB file \'%s\'\n", name);
         return 1;
     }
-    reader->fd = fd;
-
-    fstat(fd, &st);
-    reader->file_size = st.st_size;
-
-    map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
-    if (map == MAP_FAILED) {
-        eprintf("Failed to map PDB file\n");
-        err = 1;
-        goto out_fd;
-    }
 
+    reader->file_size = g_mapped_file_get_length(reader->gmf);
+    map = g_mapped_file_get_contents(reader->gmf);
     if (pdb_reader_init(reader, map)) {
         err = 1;
         goto out_unmap;
@@ -307,16 +297,13 @@ int pdb_init_from_file(const char *name, struct pdb_reader *reader)
     return 0;
 
 out_unmap:
-    munmap(map, st.st_size);
-out_fd:
-    close(fd);
+    g_mapped_file_unref(reader->gmf);
 
     return err;
 }
 
 void pdb_exit(struct pdb_reader *reader)
 {
-    munmap(reader->ds.header, reader->file_size);
-    close(reader->fd);
+    g_mapped_file_unref(reader->gmf);
     pdb_reader_exit(reader);
 }
diff --git a/contrib/elf2dmp/pdb.h b/contrib/elf2dmp/pdb.h
index a3a3cac..1640d54 100644
--- a/contrib/elf2dmp/pdb.h
+++ b/contrib/elf2dmp/pdb.h
@@ -216,7 +216,7 @@ typedef struct pdb_seg {
 #define IMAGE_FILE_MACHINE_AMD64 0x8664
 
 struct pdb_reader {
-    int fd;
+    GMappedFile *gmf;
     size_t file_size;
     struct {
         PDB_DS_HEADER *header;
-- 
1.8.3.1

  parent reply	other threads:[~2019-02-04 18:36 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-04 18:35 [Qemu-devel] [PULL 00/77] Misc patches for 2019-02-04 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 01/77] vhost-user-test: use g_cond_broadcast Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 02/77] vhost-user-test: signal data_cond when s->rings changes Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 03/77] vhost-user: support cross-endian vnet headers Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 04/77] vhost-user-test: support VHOST_USER_PROTOCOL_F_CROSS_ENDIAN Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 05/77] vhost-user-test: skip if there is no memory at address 0 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 06/77] vhost-user-test: reduce usage of global_qtest Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 07/77] tap: flush STDOUT on newline Paolo Bonzini
2019-02-05 20:24   ` Philippe Mathieu-Daudé
2019-02-04 18:35 ` [Qemu-devel] [PULL 08/77] cpu-exec: add assert_no_pages_locked() after longjmp Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 09/77] cpu-exec: reset BQL after longjmp in cpu_exec_step_atomic Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 10/77] configure: Add a proper check for openpty() in libutil Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 11/77] cpus: ignore ESRCH in qemu_cpu_kick_thread() Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 12/77] elf: Add optional function ptr to load_elf() to parse ELF notes Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 13/77] elf-ops.h: Add get_elf_note_type() Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 14/77] pvh: Add x86/HVM direct boot ABI header file Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 15/77] pvh: Boot uncompressed kernel using direct boot ABI Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 16/77] pvh: load initrd and expose it through fw_cfg Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 17/77] linuxboot_dma: remove duplicate definitions of FW_CFG Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 18/77] linuxboot_dma: move common functions in a new header Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 19/77] optionrom: add new PVH option rom Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 20/77] hw/i386/pc: use " Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 21/77] optionrom/pvh: load initrd from fw_cfg Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 22/77] hw/i386/pc: enable PVH only for machine type >= 4.0 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 23/77] i386: remove the new CPUID 'PCONFIG' from Icelake-Server CPU model Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 24/77] i386: remove the 'INTEL_PT' CPUID bit from named CPU models Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 25/77] Revert "i386: Add CPUID bit for PCONFIG" Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 26/77] target-i386: hvf: remove MPX support Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 27/77] contrib/elf2dmp: fix elf.h including Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 28/77] contrib/elf2dmp: use GLib in ELF processing Paolo Bonzini
2019-02-04 18:35 ` Paolo Bonzini [this message]
2019-02-04 18:35 ` [Qemu-devel] [PULL 30/77] contrib/elf2dmp: fix structures definitions Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 32/77] configure: enable elf2dmp build for Windows hosts Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 33/77] monitor: do not use QTAILQ_FOREACH_SAFE across critical sections Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 34/77] crypto: finish removing TABs Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 35/77] ui: vnc: " Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 36/77] unify len and addr type for memory/address APIs Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 37/77] hw/core/loader.c: Read as long as possible in load_image_size() Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 38/77] i386: import & use bootparam.h Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 39/77] i386: allow to load initrd below 4 GB for recent linux Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 40/77] docker: adjust Xen repository for CentOS 7 Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 41/77] i386: hvf: Don't miss 16-bit displacement Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 42/77] gdbstub: Fix i386/x86_64 machine description and add control registers Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 43/77] scsi-generic: avoid possible out-of-bounds access to r->buf Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 44/77] Remove deprecated -enable-hax option Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 45/77] qemu-options: Remove deprecated "-virtioconsole" option Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 46/77] arm: disable CONFIG_SERIAL_ISA Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 47/77] ide: split ioport registration to a separate file Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 48/77] vfio: move conditional up to hw/Makefile.objs Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 49/77] hw/pci-host/Makefile.objs: make CONFIGS clear for PCI EXPRESS Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 50/77] build: actually use CONFIG_PAM Paolo Bonzini
2019-02-04 19:34   ` Philippe Mathieu-Daudé
2019-02-04 18:35 ` [Qemu-devel] [PULL 51/77] hw/i386/Makefile.objs: Build pc_piix* and pc_q35 boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 52/77] hw/arm/Makefile.objs: CONFIG_ARM_VIRT created for virt board Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 53/77] hw/m68k/Makefile.objs: Conditionally build boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 54/77] hw/microblaze/Makefile.objs: Create configs for petalogix and xilinx boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 55/77] hw/mips/Makefile.objs: Create CONFIG_* for r4k, malta, mipssim boards Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 56/77] hw/ppc/Makefile.objs: Build all boards conditinally with CONFIG_* Paolo Bonzini
2019-02-04 18:35 ` [Qemu-devel] [PULL 57/77] hw/sh4/Makefile.objs: New CONFIG_* varibales created for sh4 boards and device Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 58/77] hw/s390/Makefile.objs: Create new CONFIG_* variables for s390x boards and devices Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 59/77] hw/sparc/Makefile.objs: CONFIG_* for sun4m and leon3 created Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 60/77] hw/lm32/Makefile.objs: Conditionally build lm32 and milkmyst Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 61/77] hw/xtensa/Makefile.objs: Build xtensa_sim and xtensa_fpga conditionally Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 62/77] hw/nios2/Makefile.objs: Conditionally build nios2 Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 63/77] hw/riscv/Makefile.objs: Create CONFIG_* for riscv boards Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 64/77] hw/sparc64/Makefile.objs: Create CONFIG_* for sparc64 Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 65/77] hw/alpha/Makefile.objs: Create CONFIG_* for alpha Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 66/77] hw/cris/Makefile.objs: Create CONFIG_* for cris Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 67/77] hw/hppa/Makefile.objs: Create CONFIG_* for hppa Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 68/77] hw/moxie/Makefile.objs: Conditionally build moxie Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 69/77] hw/openrisc/Makefile.objs: Create CONFIG_* for openrisc Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 70/77] hw/tricore/Makefile.objs: Create CONFIG_* for tricore Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 71/77] hw/i2c/Makefile.objs: Create new CONFIG_* variables for EEPROM and ACPI controller Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 72/77] hw/vfio/Makefile.objs: Create new CONFIG_* variables for VFIO core and PCI Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 73/77] i386: hvf: Fix smp boot hangs Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 74/77] pc: Use hotplug_handler_(plug|unplug|unplug_request) Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 75/77] scsi-disk: Convert from DPRINTF() macro to trace events Paolo Bonzini
2019-02-04 18:36 ` [Qemu-devel] [PULL 77/77] queue: fix QTAILQ_FOREACH_REVERSE_SAFE Paolo Bonzini
2019-02-05  9:35 ` [Qemu-devel] [PULL 00/77] Misc patches for 2019-02-04 Peter Maydell
2019-02-05 11:27   ` Paolo Bonzini
2019-02-05 12:45     ` Peter Maydell
2019-02-05 14:34       ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1549305379-51117-30-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=viktor.prutyanov@phystech.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).