mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-23 07:23:12 +02:00

[ Upstream commit b029628be2
]
Richard Henderson <richard.henderson@linaro.org> writes[1]:
> There was a Spec benchmark (I forget which) which was memory bound and ran
> twice as fast with 32-bit pointers.
>
> I copied the idea from DEC to the ELF abi, but never did all the other work
> to allow the toolchain to take advantage.
>
> Amusingly, a later Spec changed the benchmark data sets to not fit into a
> 32-bit address space, specifically because of this.
>
> I expect one could delete the ELF bit and personality and no one would
> notice. Not even the 10 remaining Alpha users.
In [2] it was pointed out that parts of setarch weren't working
properly on alpha because it has it's own SET_PERSONALITY
implementation. In the discussion that followed Richard Henderson
pointed out that the 32bit pointer support for alpha was never
completed.
Fix this by removing alpha's 32bit pointer support.
As a bit of paranoia refuse to execute any alpha binaries that have
the EF_ALPHA_32BIT flag set. Just in case someone somewhere has
binaries that try to use alpha's 32bit pointer support.
Link: https://lkml.kernel.org/r/CAFXwXrkgu=4Qn-v1PjnOR4SG0oUb9LSa0g6QXpBq4ttm52pJOQ@mail.gmail.com [1]
Link: https://lkml.kernel.org/r/20250103140148.370368-1-glaubitz@physik.fu-berlin.de [2]
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Link: https://lore.kernel.org/r/87y0zfs26i.fsf_-_@email.froward.int.ebiederm.org
Signed-off-by: Kees Cook <kees@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* include/asm-alpha/processor.h
|
|
*
|
|
* Copyright (C) 1994 Linus Torvalds
|
|
*/
|
|
|
|
#ifndef __ASM_ALPHA_PROCESSOR_H
|
|
#define __ASM_ALPHA_PROCESSOR_H
|
|
|
|
/*
|
|
* We have a 42-bit user address space: 4TB user VM...
|
|
*/
|
|
#define TASK_SIZE (0x40000000000UL)
|
|
|
|
#define STACK_TOP (0x00120000000UL)
|
|
|
|
#define STACK_TOP_MAX 0x00120000000UL
|
|
|
|
/* This decides where the kernel will search for a free chunk of vm
|
|
* space during mmap's.
|
|
*/
|
|
#define TASK_UNMAPPED_BASE (TASK_SIZE / 2)
|
|
|
|
/* This is dead. Everything has been moved to thread_info. */
|
|
struct thread_struct { };
|
|
#define INIT_THREAD { }
|
|
|
|
/* Do necessary setup to start up a newly executed thread. */
|
|
struct pt_regs;
|
|
extern void start_thread(struct pt_regs *, unsigned long, unsigned long);
|
|
|
|
/* Free all resources held by a thread. */
|
|
struct task_struct;
|
|
unsigned long __get_wchan(struct task_struct *p);
|
|
|
|
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)
|
|
|
|
#define KSTK_ESP(tsk) \
|
|
((tsk) == current ? rdusp() : task_thread_info(tsk)->pcb.usp)
|
|
|
|
#define cpu_relax() barrier()
|
|
|
|
#define ARCH_HAS_PREFETCH
|
|
#define ARCH_HAS_PREFETCHW
|
|
|
|
extern inline void prefetch(const void *ptr)
|
|
{
|
|
__builtin_prefetch(ptr, 0, 3);
|
|
}
|
|
|
|
extern inline void prefetchw(const void *ptr)
|
|
{
|
|
__builtin_prefetch(ptr, 1, 3);
|
|
}
|
|
|
|
#endif /* __ASM_ALPHA_PROCESSOR_H */
|