mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
linux-user: introduce functions to detect CPU type
Add a function to return ELF e_flags and use it to select the CPU model. Signed-off-by: YunQiang Su <syq@debian.org> [lv: split the patch and some cleanup in get_elf_eflags()] Signed-off-by: Laurent Vivier <laurent@vivier.eu> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20180220173307.25125-3-laurent@vivier.eu>
This commit is contained in:
parent
542ca43498
commit
768fe76e92
3 changed files with 46 additions and 10 deletions
|
@ -2396,6 +2396,41 @@ give_up:
|
|||
g_free(syms);
|
||||
}
|
||||
|
||||
uint32_t get_elf_eflags(int fd)
|
||||
{
|
||||
struct elfhdr ehdr;
|
||||
off_t offset;
|
||||
int ret;
|
||||
|
||||
/* Read ELF header */
|
||||
offset = lseek(fd, 0, SEEK_SET);
|
||||
if (offset == (off_t) -1) {
|
||||
return 0;
|
||||
}
|
||||
ret = read(fd, &ehdr, sizeof(ehdr));
|
||||
if (ret < sizeof(ehdr)) {
|
||||
return 0;
|
||||
}
|
||||
offset = lseek(fd, offset, SEEK_SET);
|
||||
if (offset == (off_t) -1) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Check ELF signature */
|
||||
if (!elf_check_ident(&ehdr)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check header */
|
||||
bswap_ehdr(&ehdr);
|
||||
if (!elf_check_ehdr(&ehdr)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* return architecture id */
|
||||
return ehdr.e_flags;
|
||||
}
|
||||
|
||||
int load_elf_binary(struct linux_binprm *bprm, struct image_info *info)
|
||||
{
|
||||
struct image_info interp_info;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue