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 ---