Merge branch 'parisc-4.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
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
This commit is contained in:
@@ -235,6 +235,7 @@ typedef unsigned long elf_greg_t;
|
||||
#define SET_PERSONALITY(ex) \
|
||||
({ \
|
||||
set_personality((current->personality & ~PER_MASK) | PER_LINUX); \
|
||||
clear_thread_flag(TIF_32BIT); \
|
||||
current->thread.map_base = DEFAULT_MAP_BASE; \
|
||||
current->thread.task_size = DEFAULT_TASK_SIZE; \
|
||||
})
|
||||
@@ -243,9 +244,11 @@ typedef unsigned long elf_greg_t;
|
||||
|
||||
#define COMPAT_SET_PERSONALITY(ex) \
|
||||
({ \
|
||||
set_thread_flag(TIF_32BIT); \
|
||||
current->thread.map_base = DEFAULT_MAP_BASE32; \
|
||||
current->thread.task_size = DEFAULT_TASK_SIZE32; \
|
||||
if ((ex).e_ident[EI_CLASS] == ELFCLASS32) { \
|
||||
set_thread_flag(TIF_32BIT); \
|
||||
current->thread.map_base = DEFAULT_MAP_BASE32; \
|
||||
current->thread.task_size = DEFAULT_TASK_SIZE32; \
|
||||
} else clear_thread_flag(TIF_32BIT); \
|
||||
})
|
||||
|
||||
/*
|
||||
|
@@ -22,15 +22,6 @@
|
||||
name: ASM_NL\
|
||||
.export name
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#define ENDPROC(name) \
|
||||
END(name)
|
||||
#else
|
||||
#define ENDPROC(name) \
|
||||
.type name, @function !\
|
||||
END(name)
|
||||
#endif
|
||||
|
||||
#define ENTRY_CFI(name, ...) \
|
||||
ENTRY(name) ASM_NL\
|
||||
.proc ASM_NL\
|
||||
|
@@ -256,11 +256,7 @@ on downward growing arches, it looks like this:
|
||||
* it in here from the current->personality
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#define USER_WIDE_MODE (!test_thread_flag(TIF_32BIT))
|
||||
#else
|
||||
#define USER_WIDE_MODE 0
|
||||
#endif
|
||||
#define USER_WIDE_MODE (!is_32bit_task())
|
||||
|
||||
#define start_thread(regs, new_pc, new_sp) do { \
|
||||
elf_addr_t *sp = (elf_addr_t *)new_sp; \
|
||||
|
@@ -2,7 +2,9 @@
|
||||
#ifndef __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;
|
||||
|
||||
/* traps.c */
|
||||
|
@@ -73,8 +73,10 @@ unwind_table_remove(struct unwind_table *table);
|
||||
|
||||
void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t,
|
||||
struct pt_regs *regs);
|
||||
void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t);
|
||||
void unwind_frame_init_running(struct unwind_frame_info *info, struct pt_regs *regs);
|
||||
void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info,
|
||||
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_to_user(struct unwind_frame_info *info);
|
||||
|
||||
|
Reference in New Issue
Block a user