mirror of https://github.com/xqemu/xqemu.git
dump: Set correct vaddr for ELF dump
vaddr needs to be equal to the paddr since the dump file represents the physical memory image. Without setting vaddr correctly, GDB would load all the different memory regions on top of each other to vaddr 0, thus making GDB showing the wrong memory data for a given address. Signed-off-by: Jon Doron <arilou@gmail.com> Message-Id: <20190109082203.27142-1-arilou@gmail.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Tested-by: Marc-André Lureau <marcandre.lureau@redhat.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
47994e16b1
commit
e17bebd049
5
dump.c
5
dump.c
|
@ -192,7 +192,7 @@ static void write_elf64_load(DumpState *s, MemoryMapping *memory_mapping,
|
|||
phdr.p_paddr = cpu_to_dump64(s, memory_mapping->phys_addr);
|
||||
phdr.p_filesz = cpu_to_dump64(s, filesz);
|
||||
phdr.p_memsz = cpu_to_dump64(s, memory_mapping->length);
|
||||
phdr.p_vaddr = cpu_to_dump64(s, memory_mapping->virt_addr);
|
||||
phdr.p_vaddr = cpu_to_dump64(s, memory_mapping->virt_addr) ?: phdr.p_paddr;
|
||||
|
||||
assert(memory_mapping->length >= filesz);
|
||||
|
||||
|
@ -216,7 +216,8 @@ static void write_elf32_load(DumpState *s, MemoryMapping *memory_mapping,
|
|||
phdr.p_paddr = cpu_to_dump32(s, memory_mapping->phys_addr);
|
||||
phdr.p_filesz = cpu_to_dump32(s, filesz);
|
||||
phdr.p_memsz = cpu_to_dump32(s, memory_mapping->length);
|
||||
phdr.p_vaddr = cpu_to_dump32(s, memory_mapping->virt_addr);
|
||||
phdr.p_vaddr =
|
||||
cpu_to_dump32(s, memory_mapping->virt_addr) ?: phdr.p_paddr;
|
||||
|
||||
assert(memory_mapping->length >= filesz);
|
||||
|
||||
|
|
|
@ -163,6 +163,7 @@ class ELF(object):
|
|||
phdr = get_arch_phdr(self.endianness, self.elfclass)
|
||||
phdr.p_type = p_type
|
||||
phdr.p_paddr = p_paddr
|
||||
phdr.p_vaddr = p_paddr
|
||||
phdr.p_filesz = p_size
|
||||
phdr.p_memsz = p_size
|
||||
self.segments.append(phdr)
|
||||
|
|
Loading…
Reference in New Issue