aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2025-07-29 11:43:27 -1000
committerRichard Henderson <richard.henderson@linaro.org>2025-08-30 07:04:04 +1000
commit8218eb6f52abd08c9e89baafdddec6f0d9234768 (patch)
tree8bf3ffca812249aa596e703c0c40834d72999bd2
parentdd1d0239a79c4e7947c901fcb1f232ecc0428a96 (diff)
downloadqemu-8218eb6f52abd08c9e89baafdddec6f0d9234768.zip
qemu-8218eb6f52abd08c9e89baafdddec6f0d9234768.tar.gz
qemu-8218eb6f52abd08c9e89baafdddec6f0d9234768.tar.bz2
linux-user: Move arch_parse_elf_property to aarch64/elfload.c
Rename the controlling macro to HAVE_ELF_GNU_PROPERTY to match the other HAVE_* macros. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--linux-user/aarch64/elfload.c18
-rw-r--r--linux-user/aarch64/target_elf.h1
-rw-r--r--linux-user/elfload.c39
-rw-r--r--linux-user/loader.h5
4 files changed, 32 insertions, 31 deletions
diff --git a/linux-user/aarch64/elfload.c b/linux-user/aarch64/elfload.c
index 07a0c3f..8076968 100644
--- a/linux-user/aarch64/elfload.c
+++ b/linux-user/aarch64/elfload.c
@@ -1,10 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "qemu/osdep.h"
+#include "qapi/error.h"
#include "qemu.h"
#include "loader.h"
#include "target/arm/cpu-features.h"
#include "target_elf.h"
+#include "elf.h"
const char *get_elf_cpu_model(uint32_t eflags)
@@ -349,6 +351,22 @@ const char *get_elf_platform(CPUState *cs)
return TARGET_BIG_ENDIAN ? "aarch64_be" : "aarch64";
}
+bool arch_parse_elf_property(uint32_t pr_type, uint32_t pr_datasz,
+ const uint32_t *data,
+ struct image_info *info,
+ Error **errp)
+{
+ if (pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND) {
+ if (pr_datasz != sizeof(uint32_t)) {
+ error_setg(errp, "Ill-formed GNU_PROPERTY_AARCH64_FEATURE_1_AND");
+ return false;
+ }
+ /* We will extract GNU_PROPERTY_AARCH64_FEATURE_1_BTI later. */
+ info->note_flags = *data;
+ }
+ return true;
+}
+
void elf_core_copy_regs(target_elf_gregset_t *r, const CPUARMState *env)
{
for (int i = 0; i < 31; i++) {
diff --git a/linux-user/aarch64/target_elf.h b/linux-user/aarch64/target_elf.h
index 9ec51f6..4cdeb64 100644
--- a/linux-user/aarch64/target_elf.h
+++ b/linux-user/aarch64/target_elf.h
@@ -17,6 +17,7 @@
#define HAVE_ELF_HWCAP2 1
#define HAVE_ELF_PLATFORM 1
#define HAVE_ELF_CORE_DUMP 1
+#define HAVE_ELF_GNU_PROPERTY 1
/*
* See linux kernel: arch/arm64/include/asm/elf.h, where
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 8b92fba..12d4873 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -166,41 +166,18 @@ const char *get_elf_platform(CPUState *cs) { return NULL; }
const char *get_elf_base_platform(CPUState *cs) { return NULL; }
#endif
-#include "elf.h"
-
-/* We must delay the following stanzas until after "elf.h". */
-#if defined(TARGET_AARCH64)
-
-static bool arch_parse_elf_property(uint32_t pr_type, uint32_t pr_datasz,
- const uint32_t *data,
- struct image_info *info,
- Error **errp)
-{
- if (pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND) {
- if (pr_datasz != sizeof(uint32_t)) {
- error_setg(errp, "Ill-formed GNU_PROPERTY_AARCH64_FEATURE_1_AND");
- return false;
- }
- /* We will extract GNU_PROPERTY_AARCH64_FEATURE_1_BTI later. */
- info->note_flags = *data;
- }
- return true;
-}
-#define ARCH_USE_GNU_PROPERTY 1
-
-#else
-
-static bool arch_parse_elf_property(uint32_t pr_type, uint32_t pr_datasz,
- const uint32_t *data,
- struct image_info *info,
- Error **errp)
+#ifndef HAVE_ELF_GNU_PROPERTY
+bool arch_parse_elf_property(uint32_t pr_type, uint32_t pr_datasz,
+ const uint32_t *data, struct image_info *info,
+ Error **errp)
{
g_assert_not_reached();
}
-#define ARCH_USE_GNU_PROPERTY 0
-
+#define HAVE_ELF_GNU_PROPERTY 0
#endif
+#include "elf.h"
+
struct exec
{
unsigned int a_info; /* Use macros N_MAGIC, etc for access */
@@ -1233,7 +1210,7 @@ static bool parse_elf_properties(const ImageSource *src,
uint32_t prev_type;
/* Unless the arch requires properties, ignore them. */
- if (!ARCH_USE_GNU_PROPERTY) {
+ if (!HAVE_ELF_GNU_PROPERTY) {
return true;
}
diff --git a/linux-user/loader.h b/linux-user/loader.h
index 2175dd4..e42b8fa 100644
--- a/linux-user/loader.h
+++ b/linux-user/loader.h
@@ -122,4 +122,9 @@ typedef struct {
/* Note that both Elf32_Word and Elf64_Word are uint32_t. */
const VdsoImageInfo *get_vdso_image_info(uint32_t elf_flags);
+bool arch_parse_elf_property(uint32_t pr_type, uint32_t pr_datasz,
+ const uint32_t *data,
+ struct image_info *info,
+ Error **errp);
+
#endif /* LINUX_USER_LOADER_H */