[PATCH 06/14] arm64: compat: add support for big-endian (BE8) AArch32 binaries

Mark Rutland mark.rutland at arm.com
Fri Oct 11 10:36:22 EDT 2013


Hi Matt, Will,

On Fri, Oct 11, 2013 at 02:52:12PM +0100, Matthew Leach wrote:
> From: Will Deacon <will.deacon at arm.com>
> 
> This patch adds support for BE8 AArch32 tasks to the compat layer.
> 
> Signed-off-by: Will Deacon <will.deacon at arm.com>
> ---
>  arch/arm64/include/asm/compat.h    |   14 ++++++++++++++
>  arch/arm64/include/asm/elf.h       |    5 +++++
>  arch/arm64/include/asm/processor.h |    5 +++++
>  arch/arm64/include/asm/ptrace.h    |    1 +
>  4 files changed, 25 insertions(+)
> 
> diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
> index 899af80..93bd6b7 100644
> --- a/arch/arm64/include/asm/compat.h
> +++ b/arch/arm64/include/asm/compat.h
> @@ -26,7 +26,11 @@
>  #include <linux/ptrace.h>
>  
>  #define COMPAT_USER_HZ		100
> +#ifdef __AARCH64EB__
> +#define COMPAT_UTS_MACHINE      "armv8b\0\0"

There's space damage here    ^

> +#else
>  #define COMPAT_UTS_MACHINE	"armv8l\0\0"
> +#endif
>  
>  typedef u32		compat_size_t;
>  typedef s32		compat_ssize_t;
> @@ -73,13 +77,23 @@ struct compat_timeval {
>  };
>  
>  struct compat_stat {
> +#ifdef __AARCH64EB__
> +	short		st_dev;
> +	short		__pad1;
> +#else
>  	compat_dev_t	st_dev;
> +#endif

I was going to ask why this was different across BE and LE, but I see it
matches arch/arm/include/uapi/asm/stat.h.

> diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
> index a3e4a55..d42b82f 100644
> --- a/arch/arm64/include/asm/elf.h
> +++ b/arch/arm64/include/asm/elf.h
> @@ -162,7 +162,12 @@ extern unsigned long arch_randomize_brk(struct mm_struct *mm);
>  #define arch_randomize_brk arch_randomize_brk
>  
>  #ifdef CONFIG_COMPAT
> +
> +#ifdef __AARCH64EB__
> +#define COMPAT_ELF_PLATFORM             ("v8b")

Space damage here too         ^

> +#else
>  #define COMPAT_ELF_PLATFORM		("v8l")
> +#endif
>  
>  #define COMPAT_ELF_ET_DYN_BASE		(randomize_et_dyn(2 * TASK_SIZE_32 / 3))
>  
> diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
> index ab239b2..4ad8fec 100644
> --- a/arch/arm64/include/asm/processor.h
> +++ b/arch/arm64/include/asm/processor.h
> @@ -107,6 +107,11 @@ static inline void compat_start_thread(struct pt_regs *regs, unsigned long pc,
>  	regs->pstate = COMPAT_PSR_MODE_USR;
>  	if (pc & 1)
>  		regs->pstate |= COMPAT_PSR_T_BIT;
> +
> +#ifdef __AARCH64EB__
> +        regs->pstate |= COMPAT_PSR_E_BIT;

   ^ More space damage.

Cheers,
Mark.



More information about the linux-arm-kernel mailing list