mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 07:02:03 -06:00
dump: Consolidate phdr note writes
There's no need to have two write functions. Let's rather have two functions that set the data for elf 32/64 and then write it in a common function. Signed-off-by: Janosch Frank <frankja@linux.ibm.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20220330123603.107120-8-frankja@linux.ibm.com>
This commit is contained in:
parent
05bbaa5040
commit
bc7d558017
1 changed files with 48 additions and 46 deletions
86
dump/dump.c
86
dump/dump.c
|
@ -245,24 +245,15 @@ static void write_elf32_load(DumpState *s, MemoryMapping *memory_mapping,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_elf64_note(DumpState *s, Error **errp)
|
static void write_elf64_phdr_note(DumpState *s, Elf64_Phdr *phdr)
|
||||||
{
|
{
|
||||||
Elf64_Phdr phdr;
|
memset(phdr, 0, sizeof(*phdr));
|
||||||
int ret;
|
phdr->p_type = cpu_to_dump32(s, PT_NOTE);
|
||||||
|
phdr->p_offset = cpu_to_dump64(s, s->note_offset);
|
||||||
memset(&phdr, 0, sizeof(Elf64_Phdr));
|
phdr->p_paddr = 0;
|
||||||
phdr.p_type = cpu_to_dump32(s, PT_NOTE);
|
phdr->p_filesz = cpu_to_dump64(s, s->note_size);
|
||||||
phdr.p_offset = cpu_to_dump64(s, s->note_offset);
|
phdr->p_memsz = cpu_to_dump64(s, s->note_size);
|
||||||
phdr.p_paddr = 0;
|
phdr->p_vaddr = 0;
|
||||||
phdr.p_filesz = cpu_to_dump64(s, s->note_size);
|
|
||||||
phdr.p_memsz = cpu_to_dump64(s, s->note_size);
|
|
||||||
phdr.p_vaddr = 0;
|
|
||||||
|
|
||||||
ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s);
|
|
||||||
if (ret < 0) {
|
|
||||||
error_setg_errno(errp, -ret,
|
|
||||||
"dump: failed to write program header table");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int cpu_index(CPUState *cpu)
|
static inline int cpu_index(CPUState *cpu)
|
||||||
|
@ -310,24 +301,15 @@ static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s,
|
||||||
write_guest_note(f, s, errp);
|
write_guest_note(f, s, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_elf32_note(DumpState *s, Error **errp)
|
static void write_elf32_phdr_note(DumpState *s, Elf32_Phdr *phdr)
|
||||||
{
|
{
|
||||||
Elf32_Phdr phdr;
|
memset(phdr, 0, sizeof(*phdr));
|
||||||
int ret;
|
phdr->p_type = cpu_to_dump32(s, PT_NOTE);
|
||||||
|
phdr->p_offset = cpu_to_dump32(s, s->note_offset);
|
||||||
memset(&phdr, 0, sizeof(Elf32_Phdr));
|
phdr->p_paddr = 0;
|
||||||
phdr.p_type = cpu_to_dump32(s, PT_NOTE);
|
phdr->p_filesz = cpu_to_dump32(s, s->note_size);
|
||||||
phdr.p_offset = cpu_to_dump32(s, s->note_offset);
|
phdr->p_memsz = cpu_to_dump32(s, s->note_size);
|
||||||
phdr.p_paddr = 0;
|
phdr->p_vaddr = 0;
|
||||||
phdr.p_filesz = cpu_to_dump32(s, s->note_size);
|
|
||||||
phdr.p_memsz = cpu_to_dump32(s, s->note_size);
|
|
||||||
phdr.p_vaddr = 0;
|
|
||||||
|
|
||||||
ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s);
|
|
||||||
if (ret < 0) {
|
|
||||||
error_setg_errno(errp, -ret,
|
|
||||||
"dump: failed to write program header table");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s,
|
static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s,
|
||||||
|
@ -357,6 +339,32 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s,
|
||||||
write_guest_note(f, s, errp);
|
write_guest_note(f, s, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void write_elf_phdr_note(DumpState *s, Error **errp)
|
||||||
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
|
Elf32_Phdr phdr32;
|
||||||
|
Elf64_Phdr phdr64;
|
||||||
|
void *phdr;
|
||||||
|
size_t size;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (dump_is_64bit(s)) {
|
||||||
|
write_elf64_phdr_note(s, &phdr64);
|
||||||
|
size = sizeof(phdr64);
|
||||||
|
phdr = &phdr64;
|
||||||
|
} else {
|
||||||
|
write_elf32_phdr_note(s, &phdr32);
|
||||||
|
size = sizeof(phdr32);
|
||||||
|
phdr = &phdr32;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = fd_write_vmcore(phdr, size, s);
|
||||||
|
if (ret < 0) {
|
||||||
|
error_setg_errno(errp, -ret,
|
||||||
|
"dump: failed to write program header table");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void write_elf_section(DumpState *s, int type, Error **errp)
|
static void write_elf_section(DumpState *s, int type, Error **errp)
|
||||||
{
|
{
|
||||||
Elf32_Shdr shdr32;
|
Elf32_Shdr shdr32;
|
||||||
|
@ -550,13 +558,13 @@ static void dump_begin(DumpState *s, Error **errp)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dump_is_64bit(s)) {
|
|
||||||
/* write PT_NOTE to vmcore */
|
/* write PT_NOTE to vmcore */
|
||||||
write_elf64_note(s, errp);
|
write_elf_phdr_note(s, errp);
|
||||||
if (*errp) {
|
if (*errp) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dump_is_64bit(s)) {
|
||||||
/* write all PT_LOAD to vmcore */
|
/* write all PT_LOAD to vmcore */
|
||||||
write_elf_loads(s, errp);
|
write_elf_loads(s, errp);
|
||||||
if (*errp) {
|
if (*errp) {
|
||||||
|
@ -577,12 +585,6 @@ static void dump_begin(DumpState *s, Error **errp)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* write PT_NOTE to vmcore */
|
|
||||||
write_elf32_note(s, errp);
|
|
||||||
if (*errp) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* write all PT_LOAD to vmcore */
|
/* write all PT_LOAD to vmcore */
|
||||||
write_elf_loads(s, errp);
|
write_elf_loads(s, errp);
|
||||||
if (*errp) {
|
if (*errp) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue