[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 07/14] dump: Swap segment and section header locations
From: |
Janosch Frank |
Subject: |
[PATCH v3 07/14] dump: Swap segment and section header locations |
Date: |
Thu, 21 Jul 2022 13:22:49 +0000 |
For the upcoming string table and arch section support we need to
modify the elf layout a bit. Instead of the segments, i.e. the guest's
memory contents, beeing the last area the section data will live at
the end of the file. This will allow us to write the section data
after all guest memory has been dumped which is important for the s390
PV dump support.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
dump/dump.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/dump/dump.c b/dump/dump.c
index 980702d476..6f3274c5af 100644
--- a/dump/dump.c
+++ b/dump/dump.c
@@ -590,6 +590,9 @@ static void dump_begin(DumpState *s, Error **errp)
* --------------
* | memory |
* --------------
+ * | sectn data |
+ * --------------
+
*
* we only know where the memory is saved after we write elf note into
* vmcore.
@@ -1817,18 +1820,18 @@ static void dump_init(DumpState *s, int fd, bool
has_format,
}
}
+ tmp = (s->phdr_num == PN_XNUM) ? s->sh_info : s->phdr_num;
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) * tmp;
} 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) * tmp;
}
+ s->memory_offset = s->note_offset + s->note_size;
+ s->section_offset = s->memory_offset + s->total_size;
return;
--
2.34.1
- [PATCH v3 03/14] dump: Convert GuestPhysBlock iterators and use the filter functions, (continued)
- [PATCH v3 03/14] dump: Convert GuestPhysBlock iterators and use the filter functions, Janosch Frank, 2022/07/21
- [PATCH v3 04/14] dump: Allocate header, Janosch Frank, 2022/07/21
- [PATCH v3 05/14] dump: Split write of section headers and data and add a prepare step, Janosch Frank, 2022/07/21
- [PATCH v3 06/14] dump: Reorder struct DumpState, Janosch Frank, 2022/07/21
- [PATCH v3 07/14] dump: Swap segment and section header locations,
Janosch Frank <=
- [PATCH v3 08/14] dump/dump: Add section string table support, Janosch Frank, 2022/07/21
- [PATCH v3 09/14] dump/dump: Add arch section support, Janosch Frank, 2022/07/21
- [PATCH v3 11/14] s390x: Add protected dump cap, Janosch Frank, 2022/07/21
- [PATCH v3 12/14] s390x: Introduce PV query interface, Janosch Frank, 2022/07/21
- [PATCH v3 10/14] linux header sync, Janosch Frank, 2022/07/21