Index: linux-2.4.35.4/arch/mips/kernel/signal.c =================================================================== --- linux-2.4.35.4.orig/arch/mips/kernel/signal.c 2007-12-15 05:19:39.146651877 +0100 +++ linux-2.4.35.4/arch/mips/kernel/signal.c 2007-12-15 05:19:59.787828152 +0100 @@ -6,8 +6,10 @@ * Copyright (C) 1991, 1992 Linus Torvalds * Copyright (C) 1994 - 1999 Ralf Baechle * Copyright (C) 1999 Silicon Graphics, Inc. + * Copyright (C) 2004 Maciej W. Rozycki */ #include +#include #include #include #include @@ -76,7 +78,9 @@ * Atomically swap in the new signal mask, and wait for a signal. */ save_static_function(sys_sigsuspend); -static_unused int _sys_sigsuspend(struct pt_regs regs) +static int _sys_sigsuspend(struct pt_regs regs) + __asm__("_sys_sigsuspend") __attribute_used__; +static int _sys_sigsuspend(struct pt_regs regs) { sigset_t *uset, saveset, newset; @@ -102,7 +106,9 @@ } save_static_function(sys_rt_sigsuspend); -static_unused int _sys_rt_sigsuspend(struct pt_regs regs) +static int _sys_rt_sigsuspend(struct pt_regs regs) + __asm__("_sys_rt_sigsuspend") __attribute_used__; +static int _sys_rt_sigsuspend(struct pt_regs regs) { sigset_t *unewset, saveset, newset; size_t sigsetsize; Index: linux-2.4.35.4/arch/mips/kernel/syscall.c =================================================================== --- linux-2.4.35.4.orig/arch/mips/kernel/syscall.c 2007-12-15 05:19:39.154652335 +0100 +++ linux-2.4.35.4/arch/mips/kernel/syscall.c 2007-12-15 05:19:59.795828608 +0100 @@ -5,6 +5,7 @@ * * Copyright (C) 1995 - 2000 by Ralf Baechle * Copyright (C) 2000 Silicon Graphics, Inc. + * Copyright (C) 2004 Maciej W. Rozycki * * TODO: Implement the compatibility syscalls. * Don't waste that much memory for empty entries in the syscall @@ -158,7 +159,9 @@ } save_static_function(sys_fork); -static_unused int _sys_fork(struct pt_regs regs) +static int _sys_fork(struct pt_regs regs) + __asm__("_sys_fork") __attribute_used__; +static int _sys_fork(struct pt_regs regs) { int res; @@ -168,7 +171,9 @@ save_static_function(sys_clone); -static_unused int _sys_clone(struct pt_regs regs) +static int _sys_clone(struct pt_regs regs) + __asm__("_sys_clone") __attribute_used__; +static int _sys_clone(struct pt_regs regs) { unsigned long clone_flags; unsigned long newsp; Index: linux-2.4.35.4/arch/mips/ld.script.in =================================================================== --- linux-2.4.35.4.orig/arch/mips/ld.script.in 2007-12-15 05:19:39.162652791 +0100 +++ linux-2.4.35.4/arch/mips/ld.script.in 2007-12-15 05:19:59.799828834 +0100 @@ -9,6 +9,7 @@ { _ftext = . ; *(.text) + *(.fixup) *(.rodata) *(.rodata.*) *(.rodata1) Index: linux-2.4.35.4/arch/mips64/kernel/signal.c =================================================================== --- linux-2.4.35.4.orig/arch/mips64/kernel/signal.c 2007-12-15 05:19:39.170653246 +0100 +++ linux-2.4.35.4/arch/mips64/kernel/signal.c 2007-12-15 05:19:59.803829063 +0100 @@ -6,8 +6,10 @@ * Copyright (C) 1991, 1992 Linus Torvalds * Copyright (C) 1994 - 2000 Ralf Baechle * Copyright (C) 1999, 2000 Silicon Graphics, Inc. + * Copyright (C) 2004 Maciej W. Rozycki */ #include +#include #include #include #include @@ -75,7 +77,9 @@ * Atomically swap in the new signal mask, and wait for a signal. */ save_static_function(sys_rt_sigsuspend); -static_unused int _sys_rt_sigsuspend(abi64_no_regargs, struct pt_regs regs) +static int _sys_rt_sigsuspend(abi64_no_regargs, struct pt_regs regs) + __asm__("_sys_rt_sigsuspend") __attribute_used__; +static int _sys_rt_sigsuspend(abi64_no_regargs, struct pt_regs regs) { sigset_t *unewset, saveset, newset; size_t sigsetsize; Index: linux-2.4.35.4/arch/mips64/kernel/signal32.c =================================================================== --- linux-2.4.35.4.orig/arch/mips64/kernel/signal32.c 2007-12-15 05:19:39.174653475 +0100 +++ linux-2.4.35.4/arch/mips64/kernel/signal32.c 2007-12-15 05:19:59.807829292 +0100 @@ -6,7 +6,9 @@ * Copyright (C) 1991, 1992 Linus Torvalds * Copyright (C) 1994 - 2000 Ralf Baechle * Copyright (C) 1999, 2000 Silicon Graphics, Inc. + * Copyright (C) 2004 Maciej W. Rozycki */ +#include #include #include #include @@ -192,7 +194,9 @@ * Atomically swap in the new signal mask, and wait for a signal. */ save_static_function(sys32_sigsuspend); -static_unused int _sys32_sigsuspend(abi64_no_regargs, struct pt_regs regs) +static int _sys32_sigsuspend(abi64_no_regargs, struct pt_regs regs) + __asm__("_sys32_sigsuspend") __attribute_used__; +static int _sys32_sigsuspend(abi64_no_regargs, struct pt_regs regs) { sigset32_t *uset; sigset_t newset, saveset; @@ -219,7 +223,9 @@ } save_static_function(sys32_rt_sigsuspend); -static_unused int _sys32_rt_sigsuspend(abi64_no_regargs, struct pt_regs regs) +static int _sys32_rt_sigsuspend(abi64_no_regargs, struct pt_regs regs) + __asm__("_sys32_rt_sigsuspend") __attribute_used__; +static int _sys32_rt_sigsuspend(abi64_no_regargs, struct pt_regs regs) { sigset32_t *uset; sigset_t newset, saveset; Index: linux-2.4.35.4/arch/mips64/kernel/syscall.c =================================================================== --- linux-2.4.35.4.orig/arch/mips64/kernel/syscall.c 2007-12-15 05:19:39.186654157 +0100 +++ linux-2.4.35.4/arch/mips64/kernel/syscall.c 2007-12-15 05:19:59.811829522 +0100 @@ -6,7 +6,9 @@ * Copyright (C) 1995 - 2000, 2001 by Ralf Baechle * Copyright (C) 1999, 2000 Silicon Graphics, Inc. * Copyright (C) 2001 MIPS Technologies, Inc. + * Copyright (C) 2004 Maciej W. Rozycki */ +#include #include #include #include @@ -151,7 +153,9 @@ } save_static_function(sys_fork); -static_unused int _sys_fork(abi64_no_regargs, struct pt_regs regs) +static int _sys_fork(abi64_no_regargs, struct pt_regs regs) + __asm__("_sys_fork") __attribute_used__; +static int _sys_fork(abi64_no_regargs, struct pt_regs regs) { int res; @@ -160,7 +164,9 @@ } save_static_function(sys_clone); -static_unused int _sys_clone(abi64_no_regargs, struct pt_regs regs) +static int _sys_clone(abi64_no_regargs, struct pt_regs regs) + __asm__("_sys_clone") __attribute_used__; +static int _sys_clone(abi64_no_regargs, struct pt_regs regs) { unsigned long clone_flags; unsigned long newsp; Index: linux-2.4.35.4/include/asm-mips/ptrace.h =================================================================== --- linux-2.4.35.4.orig/include/asm-mips/ptrace.h 2007-12-15 05:19:39.194654615 +0100 +++ linux-2.4.35.4/include/asm-mips/ptrace.h 2007-12-15 05:19:59.815829748 +0100 @@ -4,6 +4,7 @@ * for more details. * * Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000 by Ralf Baechle + * Copyright (C) 2004 Maciej W. Rozycki * * Machine dependent structs and defines to help the user use * the ptrace system call. @@ -64,12 +65,10 @@ "sw\t$22,"__str(PT_R22)"($29)\n\t" \ "sw\t$23,"__str(PT_R23)"($29)\n\t" \ "sw\t$30,"__str(PT_R30)"($29)\n\t" \ + "j\t_" #symbol "\n\t" \ ".end\t" #symbol "\n\t" \ ".size\t" #symbol",. - " #symbol) -/* Used in declaration of save_static functions. */ -#define static_unused static __attribute__((unused)) - #endif /* !__ASSEMBLY__ */ /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ Index: linux-2.4.35.4/include/asm-mips64/ptrace.h =================================================================== --- linux-2.4.35.4.orig/include/asm-mips64/ptrace.h 2007-12-15 05:19:39.202655071 +0100 +++ linux-2.4.35.4/include/asm-mips64/ptrace.h 2007-12-15 05:19:59.815829748 +0100 @@ -5,6 +5,7 @@ * * Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 by Ralf Baechle * Copyright (C) 1999, 2000 Silicon Graphics, Inc. + * Copyright (C) 2004 Maciej W. Rozycki */ #ifndef _ASM_PTRACE_H #define _ASM_PTRACE_H @@ -61,12 +62,10 @@ "sd\t$22,"__str(PT_R22)"($29)\n\t" \ "sd\t$23,"__str(PT_R23)"($29)\n\t" \ "sd\t$30,"__str(PT_R30)"($29)\n\t" \ + "j\t_" #symbol "\n\t" \ ".end\t" #symbol "\n\t" \ ".size\t" #symbol",. - " #symbol) -/* Used in declaration of save_static functions. */ -#define static_unused static __attribute__((unused)) - #define abi64_no_regargs \ unsigned long __dummy0, \ unsigned long __dummy1, \