提交 0038ffb0 编写于 作者: W Wen Congyang 提交者: Luiz Capitulino

target-i386: Add API to get note's size

We should know where the note and memory is stored before writing
them to vmcore. If we know this, we can avoid using lseek() when
creating vmcore.
Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
上级 25ae9c1d
......@@ -553,6 +553,7 @@ int cpu_write_elf64_qemunote(write_core_dump_function f, CPUArchState *env,
int cpu_write_elf32_qemunote(write_core_dump_function f, CPUArchState *env,
void *opaque);
int cpu_get_dump_info(ArchDumpInfo *info);
size_t cpu_get_note_size(int class, int machine, int nr_cpus);
#else
static inline int cpu_write_elf64_note(write_core_dump_function f,
CPUArchState *env, int cpuid,
......@@ -586,6 +587,11 @@ static inline int cpu_get_dump_info(ArchDumpInfo *info)
{
return -1;
}
static inline int cpu_get_note_size(int class, int machine, int nr_cpus)
{
return -1;
}
#endif
#endif /* CPU_ALL_H */
......@@ -414,3 +414,36 @@ int cpu_get_dump_info(ArchDumpInfo *info)
return 0;
}
size_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);
}
#ifdef TARGET_X86_64
else {
elf_desc_size = sizeof(x86_64_elf_prstatus);
}
#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;
return (elf_note_size + qemu_note_size) * nr_cpus;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册