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

Commit 45b74a65 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull more parisc updates from Helge Deller:

 - fix boot failure of 64-bit kernel. It got broken by the unwind
   optimization commit in merge window.

 - fix 64-bit userspace support (static 64-bit applications only, e.g.
   we don't yet have 64-bit userspace support in glibc).

 - consolidate unwind initialization code.

 - add machine model description to stack trace.

* 'parisc-4.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Add hardware description to stack traces
  parisc: Fix boot failure of 64-bit kernel
  parisc: Consolidate unwind initialization calls
  parisc: Update comments in syscall.S regarding wide userland
  parisc: Fix ptraced 64-bit applications to call 64-bit syscalls
  parisc: Restore possibility to execute 64-bit applications
parents 433bcf67 dbf2a4b1
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -235,6 +235,7 @@ typedef unsigned long elf_greg_t;
#define SET_PERSONALITY(ex) \
#define SET_PERSONALITY(ex) \
({	\
({	\
	set_personality((current->personality & ~PER_MASK) | PER_LINUX); \
	set_personality((current->personality & ~PER_MASK) | PER_LINUX); \
	clear_thread_flag(TIF_32BIT); \
	current->thread.map_base = DEFAULT_MAP_BASE; \
	current->thread.map_base = DEFAULT_MAP_BASE; \
	current->thread.task_size = DEFAULT_TASK_SIZE; \
	current->thread.task_size = DEFAULT_TASK_SIZE; \
 })
 })
@@ -243,9 +244,11 @@ typedef unsigned long elf_greg_t;


#define COMPAT_SET_PERSONALITY(ex) \
#define COMPAT_SET_PERSONALITY(ex) \
({	\
({	\
	if ((ex).e_ident[EI_CLASS] == ELFCLASS32) { \
		set_thread_flag(TIF_32BIT); \
		set_thread_flag(TIF_32BIT); \
		current->thread.map_base = DEFAULT_MAP_BASE32; \
		current->thread.map_base = DEFAULT_MAP_BASE32; \
		current->thread.task_size = DEFAULT_TASK_SIZE32; \
		current->thread.task_size = DEFAULT_TASK_SIZE32; \
	} else clear_thread_flag(TIF_32BIT); \
 })
 })


/*
/*
+0 −9
Original line number Original line Diff line number Diff line
@@ -22,15 +22,6 @@
name:		ASM_NL\
name:		ASM_NL\
	.export name
	.export name


#ifdef CONFIG_64BIT
#define ENDPROC(name) \
	END(name)
#else
#define ENDPROC(name) \
	.type name, @function !\
	END(name)
#endif

#define ENTRY_CFI(name, ...) \
#define ENTRY_CFI(name, ...) \
	ENTRY(name)	ASM_NL\
	ENTRY(name)	ASM_NL\
	.proc		ASM_NL\
	.proc		ASM_NL\
+1 −5
Original line number Original line Diff line number Diff line
@@ -256,11 +256,7 @@ on downward growing arches, it looks like this:
 * it in here from the current->personality
 * it in here from the current->personality
 */
 */


#ifdef CONFIG_64BIT
#define USER_WIDE_MODE	(!is_32bit_task())
#define USER_WIDE_MODE	(!test_thread_flag(TIF_32BIT))
#else
#define USER_WIDE_MODE	0
#endif


#define start_thread(regs, new_pc, new_sp) do {		\
#define start_thread(regs, new_pc, new_sp) do {		\
	elf_addr_t *sp = (elf_addr_t *)new_sp;		\
	elf_addr_t *sp = (elf_addr_t *)new_sp;		\
+3 −1
Original line number Original line Diff line number Diff line
@@ -2,7 +2,9 @@
#ifndef __ASM_TRAPS_H
#ifndef __ASM_TRAPS_H
#define __ASM_TRAPS_H
#define __ASM_TRAPS_H


#ifdef __KERNEL__
#define PARISC_ITLB_TRAP	6 /* defined by architecture. Do not change. */

#if !defined(__ASSEMBLY__)
struct pt_regs;
struct pt_regs;


/* traps.c */
/* traps.c */
+4 −2
Original line number Original line Diff line number Diff line
@@ -73,8 +73,10 @@ unwind_table_remove(struct unwind_table *table);


void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t, 
void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t, 
		       struct pt_regs *regs);
		       struct pt_regs *regs);
void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t);
void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info,
void unwind_frame_init_running(struct unwind_frame_info *info, struct pt_regs *regs);
			struct task_struct *t);
void unwind_frame_init_task(struct unwind_frame_info *info,
			struct task_struct *task, struct pt_regs *regs);
int unwind_once(struct unwind_frame_info *info);
int unwind_once(struct unwind_frame_info *info);
int unwind_to_user(struct unwind_frame_info *info);
int unwind_to_user(struct unwind_frame_info *info);


Loading