Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 373c76d6 authored by Rusty Russell's avatar Rusty Russell Committed by Benjamin Herrenschmidt
Browse files

powerpc: Add TIF_ELF2ABI flag.



Little endian ppc64 is getting an exciting new ABI.  This is reflected
by the bottom two bits of e_flags in the ELF header:

	0 == legacy binaries (v1 ABI)
	1 == binaries using the old ABI (compiled with a new toolchain)
	2 == binaries using the new ABI.

We store this in a thread flag, because we need to set it in core
dumps and for signal delivery.  Our chief concern is that it doesn't
use function descriptors.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent e844b1ee
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -86,6 +86,8 @@ typedef elf_vrregset_t elf_fpxregset_t;
#ifdef __powerpc64__
#ifdef __powerpc64__
# define SET_PERSONALITY(ex)					\
# define SET_PERSONALITY(ex)					\
do {								\
do {								\
	if (((ex).e_flags & 0x3) == 2)				\
		set_thread_flag(TIF_ELF2ABI);			\
	if ((ex).e_ident[EI_CLASS] == ELFCLASS32)		\
	if ((ex).e_ident[EI_CLASS] == ELFCLASS32)		\
		set_thread_flag(TIF_32BIT);			\
		set_thread_flag(TIF_32BIT);			\
	else							\
	else							\
+9 −0
Original line number Original line Diff line number Diff line
@@ -107,6 +107,9 @@ static inline struct thread_info *current_thread_info(void)
#define TIF_EMULATE_STACK_STORE	16	/* Is an instruction emulation
#define TIF_EMULATE_STACK_STORE	16	/* Is an instruction emulation
						for stack store? */
						for stack store? */
#define TIF_MEMDIE		17	/* is terminating due to OOM killer */
#define TIF_MEMDIE		17	/* is terminating due to OOM killer */
#if defined(CONFIG_PPC64)
#define TIF_ELF2ABI		18	/* function descriptors must die! */
#endif


/* as above, but as bit values */
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
#define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
@@ -185,6 +188,12 @@ static inline bool test_thread_local_flags(unsigned int flags)
#define is_32bit_task()	(1)
#define is_32bit_task()	(1)
#endif
#endif


#if defined(CONFIG_PPC64)
#define is_elf2_task() (test_thread_flag(TIF_ELF2ABI))
#else
#define is_elf2_task() (0)
#endif

#endif	/* !__ASSEMBLY__ */
#endif	/* !__ASSEMBLY__ */


#endif /* __KERNEL__ */
#endif /* __KERNEL__ */