提交 99728ba3 编写于 作者: P Peter Maydell

Merge remote-tracking branch 'remotes/elmarco/tags/dump-pull-request' into staging

Pull request

# gpg: Signature made Wed 21 Mar 2018 14:37:05 GMT
# gpg:                using RSA key DAE8E10975969CE5
# gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com>"
# gpg:                 aka "Marc-André Lureau <marcandre.lureau@gmail.com>"
# Primary key fingerprint: 87A9 BD93 3F87 C606 D276  F62D DAE8 E109 7596 9CE5

* remotes/elmarco/tags/dump-pull-request:
  dump-guest-memory: more descriptive lookup_type failure
  dump.c: allow fd_write_vmcore to return errno on failure
Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
...@@ -107,7 +107,7 @@ static int fd_write_vmcore(const void *buf, size_t size, void *opaque) ...@@ -107,7 +107,7 @@ static int fd_write_vmcore(const void *buf, size_t size, void *opaque)
written_size = qemu_write_full(s->fd, buf, size); written_size = qemu_write_full(s->fd, buf, size);
if (written_size != size) { if (written_size != size) {
return -1; return -errno;
} }
return 0; return 0;
...@@ -140,7 +140,7 @@ static void write_elf64_header(DumpState *s, Error **errp) ...@@ -140,7 +140,7 @@ static void write_elf64_header(DumpState *s, Error **errp)
ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to write elf header"); error_setg_errno(errp, -ret, "dump: failed to write elf header");
} }
} }
...@@ -171,7 +171,7 @@ static void write_elf32_header(DumpState *s, Error **errp) ...@@ -171,7 +171,7 @@ static void write_elf32_header(DumpState *s, Error **errp)
ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to write elf header"); error_setg_errno(errp, -ret, "dump: failed to write elf header");
} }
} }
...@@ -194,7 +194,8 @@ static void write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, ...@@ -194,7 +194,8 @@ static void write_elf64_load(DumpState *s, MemoryMapping *memory_mapping,
ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to write program header table"); error_setg_errno(errp, -ret,
"dump: failed to write program header table");
} }
} }
...@@ -217,7 +218,8 @@ static void write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, ...@@ -217,7 +218,8 @@ static void write_elf32_load(DumpState *s, MemoryMapping *memory_mapping,
ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to write program header table"); error_setg_errno(errp, -ret,
"dump: failed to write program header table");
} }
} }
...@@ -237,7 +239,8 @@ static void write_elf64_note(DumpState *s, Error **errp) ...@@ -237,7 +239,8 @@ static void write_elf64_note(DumpState *s, Error **errp)
ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to write program header table"); error_setg_errno(errp, -ret,
"dump: failed to write program header table");
} }
} }
...@@ -302,7 +305,8 @@ static void write_elf32_note(DumpState *s, Error **errp) ...@@ -302,7 +305,8 @@ static void write_elf32_note(DumpState *s, Error **errp)
ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to write program header table"); error_setg_errno(errp, -ret,
"dump: failed to write program header table");
} }
} }
...@@ -355,7 +359,8 @@ static void write_elf_section(DumpState *s, int type, Error **errp) ...@@ -355,7 +359,8 @@ static void write_elf_section(DumpState *s, int type, Error **errp)
ret = fd_write_vmcore(&shdr, shdr_size, s); ret = fd_write_vmcore(&shdr, shdr_size, s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to write section header table"); error_setg_errno(errp, -ret,
"dump: failed to write section header table");
} }
} }
...@@ -365,7 +370,7 @@ static void write_data(DumpState *s, void *buf, int length, Error **errp) ...@@ -365,7 +370,7 @@ static void write_data(DumpState *s, void *buf, int length, Error **errp)
ret = fd_write_vmcore(buf, length, s); ret = fd_write_vmcore(buf, length, s);
if (ret < 0) { if (ret < 0) {
error_setg(errp, "dump: failed to save memory"); error_setg_errno(errp, -ret, "dump: failed to save memory");
} else { } else {
s->written_size += length; s->written_size += length;
} }
......
...@@ -16,7 +16,12 @@ the COPYING file in the top-level directory. ...@@ -16,7 +16,12 @@ the COPYING file in the top-level directory.
import ctypes import ctypes
import struct import struct
UINTPTR_T = gdb.lookup_type("uintptr_t") try:
UINTPTR_T = gdb.lookup_type("uintptr_t")
except Exception as inst:
raise gdb.GdbError("Symbols must be loaded prior to sourcing dump-guest-memory.\n"
"Symbols may be loaded by 'attach'ing a QEMU process id or by "
"'load'ing a QEMU binary.")
TARGET_PAGE_SIZE = 0x1000 TARGET_PAGE_SIZE = 0x1000
TARGET_PAGE_MASK = 0xFFFFFFFFFFFFF000 TARGET_PAGE_MASK = 0xFFFFFFFFFFFFF000
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册