From 819e1c53ac6410f0ffbc2ee36b7de96988cdcf32 Mon Sep 17 00:00:00 2001 From: David Howells Date: Tue, 16 Oct 2012 00:10:13 +0100 Subject: FRV: Fix VLIW packing constraint violation in entry.S Fix VLIW packing constraint violation in entry.S: arch/frv/kernel/entry.S: Assembler messages: arch/frv/kernel/entry.S:871: Error: VLIW packing constraint violation When packing CALLL with OR, CALLL must go in the first slot. The instructions are executed simultaneously, so it doesn't matter which way round they're packed from that point of view. Signed-off-by: David Howells Acked-by: Al Viro Signed-off-by: Linus Torvalds --- arch/frv/kernel/entry.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index 00273296031..ee0beb354e4 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S @@ -867,8 +867,8 @@ ret_from_fork: ret_from_kernel_thread: lddi.p @(gr28,#REG_GR(8)),gr20 call schedule_tail - or.p gr20,gr20,gr8 - calll @(gr21,gr0) + calll.p @(gr21,gr0) + or gr20,gr20,gr8 bra sys_exit .globl ret_from_kernel_execve -- cgit v1.2.3 From ce7bfc7cde0acd46a1d342fd64a0be15ad9e7930 Mon Sep 17 00:00:00 2001 From: David Howells Date: Tue, 16 Oct 2012 00:10:21 +0100 Subject: FRV: Fix incorrect symbol in copy_thread() Fix an incorrect symbol in copy_thread(): arch/frv/kernel/process.c: In function 'copy_thread': arch/frv/kernel/process.c:197: error: 'chilregs' undeclared (first use in this function) arch/frv/kernel/process.c:197: error: (Each undeclared identifier is reported only once arch/frv/kernel/process.c:197: error: for each function it appears in.) Reported-by: Geert Uytterhoeven Signed-off-by: David Howells Acked-by: Al Viro cc: Geert Uytterhoeven Signed-off-by: Linus Torvalds --- arch/frv/kernel/process.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/frv/kernel/process.c b/arch/frv/kernel/process.c index 655d90d20bb..e1e3aa196aa 100644 --- a/arch/frv/kernel/process.c +++ b/arch/frv/kernel/process.c @@ -194,7 +194,7 @@ int copy_thread(unsigned long clone_flags, memset(childregs, 0, sizeof(struct pt_regs)); childregs->gr9 = usp; /* function */ childregs->gr8 = arg; - chilregs->psr = PSR_S; + childregs->psr = PSR_S; p->thread.pc = (unsigned long) ret_from_kernel_thread; save_user_regs(p->thread.user); return 0; -- cgit v1.2.3 From b4b5087173d09507f425714bc8d270615e5800b1 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Tue, 16 Oct 2012 00:10:28 +0100 Subject: FRV: Fix const sections change Add __pminitconst to fix the build, otherwise the following error can occur: arch/frv/kernel/setup.c:187:47: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token arch/frv/kernel/setup.c:386:2: error: 'clock_cmodes' undeclared (first use in this function) arch/frv/kernel/setup.c:571:6: error: 'clock_cmodes' undeclared (first use in this function) make[2]: *** [arch/frv/kernel/setup.o] Error 1 http://kisskb.ellerman.id.au/kisskb/buildresult/7344691/ Reported-by: Geert Uytterhoeven Signed-off-by: Andi Kleen Signed-off-by: David Howells cc: Geert Uytterhoeven Signed-off-by: Linus Torvalds --- arch/frv/kernel/setup.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/frv/kernel/setup.c b/arch/frv/kernel/setup.c index 1f1e5efb338..b8993c87d3d 100644 --- a/arch/frv/kernel/setup.c +++ b/arch/frv/kernel/setup.c @@ -112,9 +112,11 @@ char __initdata redboot_command_line[COMMAND_LINE_SIZE]; #ifdef CONFIG_PM #define __pminit #define __pminitdata +#define __pminitconst #else #define __pminit __init #define __pminitdata __initdata +#define __pminitconst __initconst #endif struct clock_cmode { -- cgit v1.2.3 From 0c552e5fb9bec3d4942663a2a90e04a685fd8482 Mon Sep 17 00:00:00 2001 From: David Howells Date: Tue, 16 Oct 2012 00:10:35 +0100 Subject: FRV: Fix linux/elf-fdpic.h It seems I accidentally switched the guard on linux/elf-fdpic.h from #ifdef __KERNEL__ to #ifndef __KERNEL__ when attempting to expand the guarded region to cover the elf_fdpic_params struct when doing the UAPI split - with the result that the struct became unavailable to kernel code. Move incorrectly guarded bits back to the kernelspace header. Whilst we're at it, the __KERNEL__ guards can be deleted as they're no longer necessary. Reported-by: Fengguang Wu Reported-by: Lars-Peter Clausen Signed-off-by: David Howells cc: Fengguang Wu cc: Lars-Peter Clausen cc: uclinux-dev@uclinux.org Signed-off-by: Linus Torvalds --- include/linux/elf-fdpic.h | 51 ++++++++++++++++++++++++++++++++++++++++++ include/uapi/linux/elf-fdpic.h | 42 +++------------------------------- 2 files changed, 54 insertions(+), 39 deletions(-) create mode 100644 include/linux/elf-fdpic.h diff --git a/include/linux/elf-fdpic.h b/include/linux/elf-fdpic.h new file mode 100644 index 00000000000..386440317b0 --- /dev/null +++ b/include/linux/elf-fdpic.h @@ -0,0 +1,51 @@ +/* FDPIC ELF load map + * + * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#ifndef _LINUX_ELF_FDPIC_H +#define _LINUX_ELF_FDPIC_H + +#include + +/* + * binfmt binary parameters structure + */ +struct elf_fdpic_params { + struct elfhdr hdr; /* ref copy of ELF header */ + struct elf_phdr *phdrs; /* ref copy of PT_PHDR table */ + struct elf32_fdpic_loadmap *loadmap; /* loadmap to be passed to userspace */ + unsigned long elfhdr_addr; /* mapped ELF header user address */ + unsigned long ph_addr; /* mapped PT_PHDR user address */ + unsigned long map_addr; /* mapped loadmap user address */ + unsigned long entry_addr; /* mapped entry user address */ + unsigned long stack_size; /* stack size requested (PT_GNU_STACK) */ + unsigned long dynamic_addr; /* mapped PT_DYNAMIC user address */ + unsigned long load_addr; /* user address at which to map binary */ + unsigned long flags; +#define ELF_FDPIC_FLAG_ARRANGEMENT 0x0000000f /* PT_LOAD arrangement flags */ +#define ELF_FDPIC_FLAG_INDEPENDENT 0x00000000 /* PT_LOADs can be put anywhere */ +#define ELF_FDPIC_FLAG_HONOURVADDR 0x00000001 /* PT_LOAD.vaddr must be honoured */ +#define ELF_FDPIC_FLAG_CONSTDISP 0x00000002 /* PT_LOADs require constant + * displacement */ +#define ELF_FDPIC_FLAG_CONTIGUOUS 0x00000003 /* PT_LOADs should be contiguous */ +#define ELF_FDPIC_FLAG_EXEC_STACK 0x00000010 /* T if stack to be executable */ +#define ELF_FDPIC_FLAG_NOEXEC_STACK 0x00000020 /* T if stack not to be executable */ +#define ELF_FDPIC_FLAG_EXECUTABLE 0x00000040 /* T if this object is the executable */ +#define ELF_FDPIC_FLAG_PRESENT 0x80000000 /* T if this object is present */ +}; + +#ifdef CONFIG_MMU +extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params, + struct elf_fdpic_params *interp_params, + unsigned long *start_stack, + unsigned long *start_brk); +#endif + +#endif /* _LINUX_ELF_FDPIC_H */ diff --git a/include/uapi/linux/elf-fdpic.h b/include/uapi/linux/elf-fdpic.h index 1065078938f..3921e33aec8 100644 --- a/include/uapi/linux/elf-fdpic.h +++ b/include/uapi/linux/elf-fdpic.h @@ -9,8 +9,8 @@ * 2 of the License, or (at your option) any later version. */ -#ifndef _LINUX_ELF_FDPIC_H -#define _LINUX_ELF_FDPIC_H +#ifndef _UAPI_LINUX_ELF_FDPIC_H +#define _UAPI_LINUX_ELF_FDPIC_H #include @@ -31,40 +31,4 @@ struct elf32_fdpic_loadmap { #define ELF32_FDPIC_LOADMAP_VERSION 0x0000 -#ifndef __KERNEL__ -/* - * binfmt binary parameters structure - */ -struct elf_fdpic_params { - struct elfhdr hdr; /* ref copy of ELF header */ - struct elf_phdr *phdrs; /* ref copy of PT_PHDR table */ - struct elf32_fdpic_loadmap *loadmap; /* loadmap to be passed to userspace */ - unsigned long elfhdr_addr; /* mapped ELF header user address */ - unsigned long ph_addr; /* mapped PT_PHDR user address */ - unsigned long map_addr; /* mapped loadmap user address */ - unsigned long entry_addr; /* mapped entry user address */ - unsigned long stack_size; /* stack size requested (PT_GNU_STACK) */ - unsigned long dynamic_addr; /* mapped PT_DYNAMIC user address */ - unsigned long load_addr; /* user address at which to map binary */ - unsigned long flags; -#define ELF_FDPIC_FLAG_ARRANGEMENT 0x0000000f /* PT_LOAD arrangement flags */ -#define ELF_FDPIC_FLAG_INDEPENDENT 0x00000000 /* PT_LOADs can be put anywhere */ -#define ELF_FDPIC_FLAG_HONOURVADDR 0x00000001 /* PT_LOAD.vaddr must be honoured */ -#define ELF_FDPIC_FLAG_CONSTDISP 0x00000002 /* PT_LOADs require constant - * displacement */ -#define ELF_FDPIC_FLAG_CONTIGUOUS 0x00000003 /* PT_LOADs should be contiguous */ -#define ELF_FDPIC_FLAG_EXEC_STACK 0x00000010 /* T if stack to be executable */ -#define ELF_FDPIC_FLAG_NOEXEC_STACK 0x00000020 /* T if stack not to be executable */ -#define ELF_FDPIC_FLAG_EXECUTABLE 0x00000040 /* T if this object is the executable */ -#define ELF_FDPIC_FLAG_PRESENT 0x80000000 /* T if this object is present */ -}; - -#ifdef CONFIG_MMU -extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params, - struct elf_fdpic_params *interp_params, - unsigned long *start_stack, - unsigned long *start_brk); -#endif -#endif /* __KERNEL__ */ - -#endif /* _LINUX_ELF_FDPIC_H */ +#endif /* _UAPI_LINUX_ELF_FDPIC_H */ -- cgit v1.2.3