Skip to content
Snippets Groups Projects
Commit cb415fd6 authored by Janosch Frank's avatar Janosch Frank Committed by Marc-André Lureau
Browse files

dump: Write ELF section headers right after ELF header


Let's start bundling the writes of the headers and of the data so we
have a clear ordering between them. Since the ELF header uses offsets
to the headers we can freely order them.

Signed-off-by: default avatarJanosch Frank <frankja@linux.ibm.com>
Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20221017083822.43118-3-frankja@linux.ibm.com>
parent e41ed29b
No related branches found
No related tags found
No related merge requests found
......@@ -583,6 +583,8 @@ static void dump_begin(DumpState *s, Error **errp)
* --------------
* | elf header |
* --------------
* | sctn_hdr |
* --------------
* | PT_NOTE |
* --------------
* | PT_LOAD |
......@@ -591,8 +593,6 @@ static void dump_begin(DumpState *s, Error **errp)
* --------------
* | PT_LOAD |
* --------------
* | sec_hdr |
* --------------
* | elf note |
* --------------
* | memory |
......@@ -608,20 +608,20 @@ static void dump_begin(DumpState *s, Error **errp)
return;
}
/* write PT_NOTE to vmcore */
write_elf_phdr_note(s, errp);
/* write section headers to vmcore */
write_elf_section_headers(s, errp);
if (*errp) {
return;
}
/* write all PT_LOADs to vmcore */
write_elf_phdr_loads(s, errp);
/* write PT_NOTE to vmcore */
write_elf_phdr_note(s, errp);
if (*errp) {
return;
}
/* write section headers to vmcore */
write_elf_section_headers(s, errp);
/* write all PT_LOADs to vmcore */
write_elf_phdr_loads(s, errp);
if (*errp) {
return;
}
......@@ -1868,16 +1868,13 @@ static void dump_init(DumpState *s, int fd, bool has_format,
}
if (dump_is_64bit(s)) {
s->phdr_offset = sizeof(Elf64_Ehdr);
s->shdr_offset = s->phdr_offset + sizeof(Elf64_Phdr) * s->phdr_num;
s->note_offset = s->shdr_offset + sizeof(Elf64_Shdr) * s->shdr_num;
s->memory_offset = s->note_offset + s->note_size;
s->shdr_offset = sizeof(Elf64_Ehdr);
s->phdr_offset = s->shdr_offset + sizeof(Elf64_Shdr) * s->shdr_num;
s->note_offset = s->phdr_offset + sizeof(Elf64_Phdr) * s->phdr_num;
} else {
s->phdr_offset = sizeof(Elf32_Ehdr);
s->shdr_offset = s->phdr_offset + sizeof(Elf32_Phdr) * s->phdr_num;
s->note_offset = s->shdr_offset + sizeof(Elf32_Shdr) * s->shdr_num;
s->memory_offset = s->note_offset + s->note_size;
s->shdr_offset = sizeof(Elf32_Ehdr);
s->phdr_offset = s->shdr_offset + sizeof(Elf32_Shdr) * s->shdr_num;
s->note_offset = s->phdr_offset + sizeof(Elf32_Phdr) * s->phdr_num;
}
return;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment