Extract out the ELF note size function from i386 so we can use it from other targets.
Signed-off-by: Rabin Vincent <ra...@rab.in> --- dump.c | 15 +++++++++++++++ dump.h | 2 ++ target-i386/arch_dump.c | 14 ++------------ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/dump.c b/dump.c index be96c6c..d3ca953 100644 --- a/dump.c +++ b/dump.c @@ -468,6 +468,21 @@ static target_phys_addr_t get_offset(target_phys_addr_t phys_addr, return -1; } +size_t dump_get_note_size(int class, const char *name, size_t descsz) +{ + int name_size = strlen(name) + 1; + int note_head_size; + + if (class == ELFCLASS32) { + note_head_size = sizeof(Elf32_Nhdr); + } else { + note_head_size = sizeof(Elf64_Nhdr); + } + + return ((note_head_size + 3) / 4 + (name_size + 3) / 4 + + (descsz + 3) / 4) * 4; +} + int dump_write_elf_note(int class, const char *name, uint32_t type, void *desc, size_t descsz, write_core_dump_function f, void *opaque) diff --git a/dump.h b/dump.h index b07816a..a06b149 100644 --- a/dump.h +++ b/dump.h @@ -36,4 +36,6 @@ int dump_write_elf_note(int class, const char *name, uint32_t type, void *desc, size_t descsz, write_core_dump_function f, void *opaque); +size_t dump_get_note_size(int class, const char *name, size_t descsz); + #endif diff --git a/target-i386/arch_dump.c b/target-i386/arch_dump.c index dbc94bc..e2d18a0 100644 --- a/target-i386/arch_dump.c +++ b/target-i386/arch_dump.c @@ -305,18 +305,10 @@ int cpu_get_dump_info(ArchDumpInfo *info) ssize_t cpu_get_note_size(int class, int machine, int nr_cpus) { - int name_size = 5; /* "CORE" or "QEMU" */ size_t elf_note_size = 0; size_t qemu_note_size = 0; int elf_desc_size = 0; int qemu_desc_size = 0; - int note_head_size; - - if (class == ELFCLASS32) { - note_head_size = sizeof(Elf32_Nhdr); - } else { - note_head_size = sizeof(Elf64_Nhdr); - } if (machine == EM_386) { elf_desc_size = sizeof(x86_elf_prstatus); @@ -328,10 +320,8 @@ ssize_t cpu_get_note_size(int class, int machine, int nr_cpus) #endif qemu_desc_size = sizeof(QEMUCPUState); - elf_note_size = ((note_head_size + 3) / 4 + (name_size + 3) / 4 + - (elf_desc_size + 3) / 4) * 4; - qemu_note_size = ((note_head_size + 3) / 4 + (name_size + 3) / 4 + - (qemu_desc_size + 3) / 4) * 4; + elf_note_size = dump_get_note_size(class, "CORE", elf_desc_size); + qemu_note_size = dump_get_note_size(class, "QEMU", qemu_desc_size); return (elf_note_size + qemu_note_size) * nr_cpus; } -- 1.7.9.5