Commit df570b9c authored by Kyle McMartin's avatar Kyle McMartin Committed by Matthew Wilcox
Browse files

[PARISC] Switch is_compat_task to use TIF_32BIT



Stop using PER_LINUX32 to designate processes needing
compaterizing. Convert is_compat_task to use TIF_32BIT and
set TIF_32BIT in binfmt_elf32.c

Signed-off-by: default avatarKyle McMartin <kyle@parisc-linux.org>
parent 8f611c45
Loading
Loading
Loading
Loading
+1 −23
Original line number Diff line number Diff line
@@ -87,7 +87,7 @@ struct elf_prpsinfo32
 */

#define SET_PERSONALITY(ex, ibcs2) \
	current->personality = PER_LINUX32; \
	set_thread_flag(TIF_32BIT); \
	current->thread.map_base = DEFAULT_MAP_BASE32; \
	current->thread.task_size = DEFAULT_TASK_SIZE32 \

@@ -102,25 +102,3 @@ cputime_to_compat_timeval(const cputime_t cputime, struct compat_timeval *value)
}

#include "../../../fs/binfmt_elf.c"

/* Set up a separate execution domain for ELF32 binaries running
 * on an ELF64 kernel */

static struct exec_domain parisc32_exec_domain = { 
	.name = "Linux/ELF32",
	.pers_low = PER_LINUX32,
	.pers_high = PER_LINUX32,
};      

static int __init parisc32_exec_init(void)
{
	/* steal the identity signal mappings from the default domain */
	parisc32_exec_domain.signal_map = default_exec_domain.signal_map;
	parisc32_exec_domain.signal_invmap = default_exec_domain.signal_invmap;

	register_exec_domain(&parisc32_exec_domain);

	return 0;
}

__initcall(parisc32_exec_init);
+2 −3
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
#include <linux/stddef.h>
#include <linux/compat.h>
#include <linux/elf.h>
#include <linux/personality.h>
#include <asm/ucontext.h>
#include <asm/rt_sigframe.h>
#include <asm/uaccess.h>
@@ -433,13 +432,13 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
	if (in_syscall) {
		regs->gr[31] = haddr;
#ifdef __LP64__
		if (personality(current->personality) == PER_LINUX)
		if (!test_thread_flag(TIF_32BIT))
			sigframe_size |= 1;
#endif
	} else {
		unsigned long psw = USER_PSW;
#ifdef __LP64__
		if (personality(current->personality) == PER_LINUX)
		if (!test_thread_flag(TIF_32BIT))
			psw |= PSW_W;
#endif

+2 −2
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
 */
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/personality.h>
#include <linux/thread_info.h>

#define COMPAT_USER_HZ 100

@@ -152,7 +152,7 @@ static __inline__ void __user *compat_alloc_user_space(long len)

static inline int __is_compat_task(struct task_struct *t)
{
	return personality(t->personality) == PER_LINUX32;
	return test_ti_thread_flag(t->thread_info, TIF_32BIT);
}

static inline int is_compat_task(void)
+1 −1
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ on downward growing arches, it looks like this:
 */

#ifdef __LP64__
#define USER_WIDE_MODE	(personality(current->personality) == PER_LINUX)
#define USER_WIDE_MODE	(!test_thread_flag(TIF_32BIT))
#else
#define USER_WIDE_MODE	0
#endif