Commit 14b7a14d authored by Yury Norov's avatar Yury Norov Committed by Chen Jun
Browse files

arm64: change compat_elf_hwcap and compat_elf_hwcap2 prefix to a32

maillist inclusion
category: feature
bugzilla: 46790
CVE: NA

Reference: https://github.com/norov/linux/commits/ilp32-5.2



--------------------------------

ILP32 patch series introduces new type of binaries which is also compat.
So rename existung aarch32 compat_elf_hwcap's helps to avoid confusing.

Signed-off-by: default avatarYury Norov <ynorov@caviumnetworks.com>
Signed-off-by: default avatarYury Norov <ynorov@marvell.com>

 Conflicts:
	arch/arm64/kernel/cpuinfo.c
	drivers/clocksource/arm_arch_timer.c

Signed-off-by: default avatarXiongfeng Wang <wangxiongfeng2@huawei.com>
Acked-by: default avatarXie XiuQi <xiexiuqi@huawei.com>
Signed-off-by: default avatarChen Jun <chenjun102@huawei.com>
parent f1955f2f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -235,7 +235,7 @@ static inline void arch_timer_set_evtstrm_feature(void)
{
	cpu_set_named_feature(EVTSTRM);
#ifdef CONFIG_AARCH32_EL0
	compat_elf_hwcap |= COMPAT_HWCAP_EVTSTRM;
	a32_elf_hwcap |= COMPAT_HWCAP_EVTSTRM;
#endif
}

+1 −1
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@
#define ELF_HWCAP2		cpu_get_elf_hwcap2()

#ifdef CONFIG_AARCH32_EL0
extern unsigned int compat_elf_hwcap, compat_elf_hwcap2;
extern unsigned int a32_elf_hwcap, a32_elf_hwcap2;
#endif

enum {
+2 −2
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@
})

#define COMPAT_ARCH_DLINFO
#define COMPAT_ELF_HWCAP		(compat_elf_hwcap)
#define COMPAT_ELF_HWCAP2		(compat_elf_hwcap2)
#define COMPAT_ELF_HWCAP		(a32_elf_hwcap)
#define COMPAT_ELF_HWCAP2		(a32_elf_hwcap2)

#define compat_arch_setup_additional_pages \
					aarch32_setup_additional_pages
+7 −7
Original line number Diff line number Diff line
@@ -85,13 +85,13 @@
static unsigned long elf_hwcap __read_mostly;

#ifdef CONFIG_AARCH32_EL0
#define COMPAT_ELF_HWCAP_DEFAULT	\
#define AARCH32_EL0_ELF_HWCAP_DEFAULT	\
				(COMPAT_HWCAP_HALF|COMPAT_HWCAP_THUMB|\
				 COMPAT_HWCAP_FAST_MULT|COMPAT_HWCAP_EDSP|\
				 COMPAT_HWCAP_TLS|COMPAT_HWCAP_IDIV|\
				 COMPAT_HWCAP_LPAE)
unsigned int compat_elf_hwcap __read_mostly = COMPAT_ELF_HWCAP_DEFAULT;
unsigned int compat_elf_hwcap2 __read_mostly;
unsigned int a32_elf_hwcap __read_mostly = AARCH32_EL0_ELF_HWCAP_DEFAULT;
unsigned int a32_elf_hwcap2 __read_mostly;
#endif

DECLARE_BITMAP(cpu_hwcaps, ARM64_NCAPS);
@@ -2306,10 +2306,10 @@ static void __init cap_set_elf_hwcap(const struct arm64_cpu_capabilities *cap)
		break;
#ifdef CONFIG_AARCH32_EL0
	case CAP_COMPAT_HWCAP:
		compat_elf_hwcap |= (u32)cap->hwcap;
		a32_elf_hwcap |= (u32)cap->hwcap;
		break;
	case CAP_COMPAT_HWCAP2:
		compat_elf_hwcap2 |= (u32)cap->hwcap;
		a32_elf_hwcap2 |= (u32)cap->hwcap;
		break;
#endif
	default:
@@ -2329,10 +2329,10 @@ static bool cpus_have_elf_hwcap(const struct arm64_cpu_capabilities *cap)
		break;
#ifdef CONFIG_AARCH32_EL0
	case CAP_COMPAT_HWCAP:
		rc = (compat_elf_hwcap & (u32)cap->hwcap) != 0;
		rc = (a32_elf_hwcap & (u32)cap->hwcap) != 0;
		break;
	case CAP_COMPAT_HWCAP2:
		rc = (compat_elf_hwcap2 & (u32)cap->hwcap) != 0;
		rc = (a32_elf_hwcap2 & (u32)cap->hwcap) != 0;
		break;
#endif
	default:
+5 −5
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ static const char *const compat_hwcap2_str[] = {
static int c_show(struct seq_file *m, void *v)
{
	int i, j;
	bool compat = personality(current->personality) == PER_LINUX32;
	bool aarch32 = personality(current->personality) == PER_LINUX32;

	for_each_online_cpu(i) {
		struct cpuinfo_arm64 *cpuinfo = &per_cpu(cpu_data, i);
@@ -148,7 +148,7 @@ static int c_show(struct seq_file *m, void *v)
		 * "processor".  Give glibc what it expects.
		 */
		seq_printf(m, "processor\t: %d\n", i);
		if (compat)
		if (aarch32)
			seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n",
				   MIDR_REVISION(midr), COMPAT_ELF_PLATFORM);

@@ -163,10 +163,10 @@ static int c_show(struct seq_file *m, void *v)
		 * software which does already (at least for 32-bit).
		 */
		seq_puts(m, "Features\t:");
		if (compat) {
		if (aarch32) {
#ifdef CONFIG_AARCH32_EL0
			for (j = 0; j < ARRAY_SIZE(compat_hwcap_str); j++) {
				if (compat_elf_hwcap & (1 << j)) {
				if (a32_elf_hwcap & (1 << j)) {
					/*
					 * Warn once if any feature should not
					 * have been present on arm64 platform.
@@ -179,7 +179,7 @@ static int c_show(struct seq_file *m, void *v)
			}

			for (j = 0; j < ARRAY_SIZE(compat_hwcap2_str); j++)
				if (compat_elf_hwcap2 & (1 << j))
				if (a32_elf_hwcap2 & (1 << j))
					seq_printf(m, " %s", compat_hwcap2_str[j]);
#endif /* CONFIG_AARCH32_EL0 */
		} else {