elfload.c (aa8e26de9617756febcbf794dda965df307fdaaa) | elfload.c (962fcbf2efe57231a9f5df0ae0f40c05e35628ba) |
---|---|
1/* This is the Linux kernel elf-loading code, ported into user space */ 2#include "qemu/osdep.h" 3#include <sys/param.h> 4 5#include <sys/resource.h> 6 7#include "qemu.h" 8#include "disas/disas.h" --- 444 unchanged lines hidden (view full) --- 453 hwcaps |= ARM_HWCAP_ARM_SWP; 454 hwcaps |= ARM_HWCAP_ARM_HALF; 455 hwcaps |= ARM_HWCAP_ARM_THUMB; 456 hwcaps |= ARM_HWCAP_ARM_FAST_MULT; 457 458 /* probe for the extra features */ 459#define GET_FEATURE(feat, hwcap) \ 460 do { if (arm_feature(&cpu->env, feat)) { hwcaps |= hwcap; } } while (0) | 1/* This is the Linux kernel elf-loading code, ported into user space */ 2#include "qemu/osdep.h" 3#include <sys/param.h> 4 5#include <sys/resource.h> 6 7#include "qemu.h" 8#include "disas/disas.h" --- 444 unchanged lines hidden (view full) --- 453 hwcaps |= ARM_HWCAP_ARM_SWP; 454 hwcaps |= ARM_HWCAP_ARM_HALF; 455 hwcaps |= ARM_HWCAP_ARM_THUMB; 456 hwcaps |= ARM_HWCAP_ARM_FAST_MULT; 457 458 /* probe for the extra features */ 459#define GET_FEATURE(feat, hwcap) \ 460 do { if (arm_feature(&cpu->env, feat)) { hwcaps |= hwcap; } } while (0) |
461 462#define GET_FEATURE_ID(feat, hwcap) \ 463 do { if (cpu_isar_feature(feat, cpu)) { hwcaps |= hwcap; } } while (0) 464 |
|
461 /* EDSP is in v5TE and above, but all our v5 CPUs are v5TE */ 462 GET_FEATURE(ARM_FEATURE_V5, ARM_HWCAP_ARM_EDSP); 463 GET_FEATURE(ARM_FEATURE_VFP, ARM_HWCAP_ARM_VFP); 464 GET_FEATURE(ARM_FEATURE_IWMMXT, ARM_HWCAP_ARM_IWMMXT); 465 GET_FEATURE(ARM_FEATURE_THUMB2EE, ARM_HWCAP_ARM_THUMBEE); 466 GET_FEATURE(ARM_FEATURE_NEON, ARM_HWCAP_ARM_NEON); 467 GET_FEATURE(ARM_FEATURE_VFP3, ARM_HWCAP_ARM_VFPv3); 468 GET_FEATURE(ARM_FEATURE_V6K, ARM_HWCAP_ARM_TLS); --- 11 unchanged lines hidden (view full) --- 480 return hwcaps; 481} 482 483static uint32_t get_elf_hwcap2(void) 484{ 485 ARMCPU *cpu = ARM_CPU(thread_cpu); 486 uint32_t hwcaps = 0; 487 | 465 /* EDSP is in v5TE and above, but all our v5 CPUs are v5TE */ 466 GET_FEATURE(ARM_FEATURE_V5, ARM_HWCAP_ARM_EDSP); 467 GET_FEATURE(ARM_FEATURE_VFP, ARM_HWCAP_ARM_VFP); 468 GET_FEATURE(ARM_FEATURE_IWMMXT, ARM_HWCAP_ARM_IWMMXT); 469 GET_FEATURE(ARM_FEATURE_THUMB2EE, ARM_HWCAP_ARM_THUMBEE); 470 GET_FEATURE(ARM_FEATURE_NEON, ARM_HWCAP_ARM_NEON); 471 GET_FEATURE(ARM_FEATURE_VFP3, ARM_HWCAP_ARM_VFPv3); 472 GET_FEATURE(ARM_FEATURE_V6K, ARM_HWCAP_ARM_TLS); --- 11 unchanged lines hidden (view full) --- 484 return hwcaps; 485} 486 487static uint32_t get_elf_hwcap2(void) 488{ 489 ARMCPU *cpu = ARM_CPU(thread_cpu); 490 uint32_t hwcaps = 0; 491 |
488 GET_FEATURE(ARM_FEATURE_V8_AES, ARM_HWCAP2_ARM_AES); 489 GET_FEATURE(ARM_FEATURE_V8_PMULL, ARM_HWCAP2_ARM_PMULL); 490 GET_FEATURE(ARM_FEATURE_V8_SHA1, ARM_HWCAP2_ARM_SHA1); 491 GET_FEATURE(ARM_FEATURE_V8_SHA256, ARM_HWCAP2_ARM_SHA2); 492 GET_FEATURE(ARM_FEATURE_CRC, ARM_HWCAP2_ARM_CRC32); | 492 GET_FEATURE_ID(aa32_aes, ARM_HWCAP2_ARM_AES); 493 GET_FEATURE_ID(aa32_pmull, ARM_HWCAP2_ARM_PMULL); 494 GET_FEATURE_ID(aa32_sha1, ARM_HWCAP2_ARM_SHA1); 495 GET_FEATURE_ID(aa32_sha2, ARM_HWCAP2_ARM_SHA2); 496 GET_FEATURE_ID(aa32_crc32, ARM_HWCAP2_ARM_CRC32); |
493 return hwcaps; 494} 495 496#undef GET_FEATURE | 497 return hwcaps; 498} 499 500#undef GET_FEATURE |
501#undef GET_FEATURE_ID |
|
497 498#else 499/* 64 bit ARM definitions */ 500#define ELF_START_MMAP 0x80000000 501 502#define ELF_ARCH EM_AARCH64 503#define ELF_CLASS ELFCLASS64 504#define ELF_PLATFORM "aarch64" --- 60 unchanged lines hidden (view full) --- 565 uint32_t hwcaps = 0; 566 567 hwcaps |= ARM_HWCAP_A64_FP; 568 hwcaps |= ARM_HWCAP_A64_ASIMD; 569 570 /* probe for the extra features */ 571#define GET_FEATURE(feat, hwcap) \ 572 do { if (arm_feature(&cpu->env, feat)) { hwcaps |= hwcap; } } while (0) | 502 503#else 504/* 64 bit ARM definitions */ 505#define ELF_START_MMAP 0x80000000 506 507#define ELF_ARCH EM_AARCH64 508#define ELF_CLASS ELFCLASS64 509#define ELF_PLATFORM "aarch64" --- 60 unchanged lines hidden (view full) --- 570 uint32_t hwcaps = 0; 571 572 hwcaps |= ARM_HWCAP_A64_FP; 573 hwcaps |= ARM_HWCAP_A64_ASIMD; 574 575 /* probe for the extra features */ 576#define GET_FEATURE(feat, hwcap) \ 577 do { if (arm_feature(&cpu->env, feat)) { hwcaps |= hwcap; } } while (0) |
573 GET_FEATURE(ARM_FEATURE_V8_AES, ARM_HWCAP_A64_AES); 574 GET_FEATURE(ARM_FEATURE_V8_PMULL, ARM_HWCAP_A64_PMULL); 575 GET_FEATURE(ARM_FEATURE_V8_SHA1, ARM_HWCAP_A64_SHA1); 576 GET_FEATURE(ARM_FEATURE_V8_SHA256, ARM_HWCAP_A64_SHA2); 577 GET_FEATURE(ARM_FEATURE_CRC, ARM_HWCAP_A64_CRC32); 578 GET_FEATURE(ARM_FEATURE_V8_SHA3, ARM_HWCAP_A64_SHA3); 579 GET_FEATURE(ARM_FEATURE_V8_SM3, ARM_HWCAP_A64_SM3); 580 GET_FEATURE(ARM_FEATURE_V8_SM4, ARM_HWCAP_A64_SM4); 581 GET_FEATURE(ARM_FEATURE_V8_SHA512, ARM_HWCAP_A64_SHA512); | 578#define GET_FEATURE_ID(feat, hwcap) \ 579 do { if (cpu_isar_feature(feat, cpu)) { hwcaps |= hwcap; } } while (0) 580 581 GET_FEATURE_ID(aa64_aes, ARM_HWCAP_A64_AES); 582 GET_FEATURE_ID(aa64_pmull, ARM_HWCAP_A64_PMULL); 583 GET_FEATURE_ID(aa64_sha1, ARM_HWCAP_A64_SHA1); 584 GET_FEATURE_ID(aa64_sha256, ARM_HWCAP_A64_SHA2); 585 GET_FEATURE_ID(aa64_sha512, ARM_HWCAP_A64_SHA512); 586 GET_FEATURE_ID(aa64_crc32, ARM_HWCAP_A64_CRC32); 587 GET_FEATURE_ID(aa64_sha3, ARM_HWCAP_A64_SHA3); 588 GET_FEATURE_ID(aa64_sm3, ARM_HWCAP_A64_SM3); 589 GET_FEATURE_ID(aa64_sm4, ARM_HWCAP_A64_SM4); |
582 GET_FEATURE(ARM_FEATURE_V8_FP16, 583 ARM_HWCAP_A64_FPHP | ARM_HWCAP_A64_ASIMDHP); | 590 GET_FEATURE(ARM_FEATURE_V8_FP16, 591 ARM_HWCAP_A64_FPHP | ARM_HWCAP_A64_ASIMDHP); |
584 GET_FEATURE(ARM_FEATURE_V8_ATOMICS, ARM_HWCAP_A64_ATOMICS); 585 GET_FEATURE(ARM_FEATURE_V8_RDM, ARM_HWCAP_A64_ASIMDRDM); 586 GET_FEATURE(ARM_FEATURE_V8_DOTPROD, ARM_HWCAP_A64_ASIMDDP); 587 GET_FEATURE(ARM_FEATURE_V8_FCMA, ARM_HWCAP_A64_FCMA); | 592 GET_FEATURE_ID(aa64_atomics, ARM_HWCAP_A64_ATOMICS); 593 GET_FEATURE_ID(aa64_rdm, ARM_HWCAP_A64_ASIMDRDM); 594 GET_FEATURE_ID(aa64_dp, ARM_HWCAP_A64_ASIMDDP); 595 GET_FEATURE_ID(aa64_fcma, ARM_HWCAP_A64_FCMA); |
588 GET_FEATURE(ARM_FEATURE_SVE, ARM_HWCAP_A64_SVE); | 596 GET_FEATURE(ARM_FEATURE_SVE, ARM_HWCAP_A64_SVE); |
597 |
|
589#undef GET_FEATURE | 598#undef GET_FEATURE |
599#undef GET_FEATURE_ID |
|
590 591 return hwcaps; 592} 593 594#endif /* not TARGET_AARCH64 */ 595#endif /* TARGET_ARM */ 596 597#ifdef TARGET_SPARC --- 2951 unchanged lines hidden --- | 600 601 return hwcaps; 602} 603 604#endif /* not TARGET_AARCH64 */ 605#endif /* TARGET_ARM */ 606 607#ifdef TARGET_SPARC --- 2951 unchanged lines hidden --- |