On Mon, Oct 17, 2022 at 12:39 PM Janosch Frank <fran...@linux.ibm.com> wrote:
> 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: Janosch Frank <fran...@linux.ibm.com> > Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > dump/dump.c | 31 ++++++++++++++----------------- > 1 file changed, 14 insertions(+), 17 deletions(-) > > diff --git a/dump/dump.c b/dump/dump.c > index e7a3b54ebe..b168a25321 100644 > --- a/dump/dump.c > +++ b/dump/dump.c > @@ -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,6 +608,12 @@ static void dump_begin(DumpState *s, Error **errp) > return; > } > > + /* write section headers to vmcore */ > + write_elf_section_headers(s, errp); > + if (*errp) { > + return; > + } > + > /* write PT_NOTE to vmcore */ > write_elf_phdr_note(s, errp); > if (*errp) { > @@ -620,12 +626,6 @@ static void dump_begin(DumpState *s, Error **errp) > return; > } > > - /* write section headers to vmcore */ > - write_elf_section_headers(s, errp); > - if (*errp) { > - return; > - } > - > /* write notes to vmcore */ > write_elf_notes(s, errp); > } > @@ -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; > -- > 2.34.1 > >