Hello,
The exception-related sections appear to work with gcc 2.95 by accident
-- they lack appropriate alignment directives and just happen to be
properly aligned, at least most of the time.
With gcc 3.4, this is no longer true -- I get a quick death of the kernel
because of an unaligned trap on an instruction fetch from the ".fixup"
section. Here's a proposed solution that works for me. I decided to
request proper alignment explicitly in all bits that refer to one of the
".fixup", "__ex_table" and "__dbe_table" sections. This way a proper
alignment is set both for the main kernel binary and for modules, and also
of bits get removed in the future. It should also make no doubt whether
to add an alignment directive or not for one adding code making use of
these sections.
I've chosen ".p2align" as it has a well-defined platform-independent
semantics.
OK to apply?
Maciej
--
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
+--------------------------------------------------------------+
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
patch-mips-2.4.24-pre2-20040116-fixup-3
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/gdb-low.S
linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/gdb-low.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/gdb-low.S
2003-02-21 03:56:24.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/gdb-low.S 2004-02-15
04:28:37.000000000 +0000
@@ -336,6 +336,7 @@ LEAF(kgdb_read_byte)
li v0, 0
jr ra
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 4b, kgdbfault
.previous
END(kgdb_read_byte)
@@ -345,6 +346,7 @@ LEAF(kgdb_write_byte)
li v0, 0
jr ra
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 5b, kgdbfault
.previous
END(kgdb_write_byte)
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/r2300_fpu.S
linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/r2300_fpu.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/r2300_fpu.S
2001-04-12 04:25:48.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/r2300_fpu.S
2004-02-15 13:53:28.000000000 +0000
@@ -21,6 +21,7 @@
#define EX(a,b) \
9: a,##b; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b,bad_stack; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/r4k_fpu.S
linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/r4k_fpu.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/r4k_fpu.S
2001-04-12 04:25:48.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/r4k_fpu.S 2004-02-15
13:53:48.000000000 +0000
@@ -21,6 +21,7 @@
#define EX(a,b) \
9: a,b; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, fault; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/scall_o32.S
linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/scall_o32.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/scall_o32.S
2003-10-29 03:56:51.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/scall_o32.S
2004-02-15 04:14:30.000000000 +0000
@@ -189,6 +189,7 @@ stackargs:
j stack_done # go back
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 1b,bad_stack
PTR 2b,bad_stack
.previous
@@ -249,6 +250,7 @@ LEAF(mips_atomic_set)
beqz a0, 1b
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 1b, bad_stack
PTR 2b, bad_stack
.previous
@@ -272,6 +274,7 @@ LEAF(mips_atomic_set)
2: sw a2, (a1)
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 1b, no_mem
PTR 2b, no_mem
.previous
@@ -340,7 +343,8 @@ LEAF(sys_syscall)
2: lw t3, 20(t0)
3: lw t4, 24(t0)
- .section __ex_table, "a"
+ .section __ex_table, "a"
+ .p2align PTRLOG
.word 1b, efault
.word 2b, efault
.word 3b, efault
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/traps.c
linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/traps.c
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/traps.c
2004-01-10 03:56:33.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/traps.c 2004-02-15
04:01:00.000000000 +0000
@@ -9,7 +9,7 @@
* Copyright (C) 1999 Silicon Graphics, Inc.
* Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
* Copyright (C) 2000, 01 MIPS Technologies, Inc.
- * Copyright (C) 2002, 2003 Maciej W. Rozycki
+ * Copyright (C) 2002, 2003, 2004 Maciej W. Rozycki
*/
#include <linux/config.h>
#include <linux/init.h>
@@ -20,6 +20,7 @@
#include <linux/smp_lock.h>
#include <linux/spinlock.h>
+#include <asm/asm.h>
#include <asm/bootinfo.h>
#include <asm/branch.h>
#include <asm/cpu.h>
@@ -282,6 +283,7 @@ void __declare_dbe_table(void)
{
__asm__ __volatile__(
".section\t__dbe_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
".previous"
);
}
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/unaligned.c
linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/unaligned.c
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/kernel/unaligned.c
2004-01-03 03:56:37.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/kernel/unaligned.c
2004-02-15 04:16:00.000000000 +0000
@@ -85,9 +85,6 @@
#include <asm/uaccess.h>
#include <asm/system.h>
-#define STR(x) __STR(x)
-#define __STR(x) #x
-
#ifdef CONFIG_PROC_FS
unsigned long unaligned_instructions;
#endif
@@ -159,10 +156,12 @@ static inline int emulate_load_store_ins
"li\t%1, 0\n"
"3:\t.set\tat\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -189,10 +188,12 @@ static inline int emulate_load_store_ins
#endif
"li\t%1, 0\n"
"3:\t.section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -223,10 +224,12 @@ static inline int emulate_load_store_ins
"li\t%1, 0\n"
"3:\t.set\tat\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -263,10 +266,12 @@ static inline int emulate_load_store_ins
"dsrl\t%0, %0, 32\n\t"
"li\t%1, 0\n"
"3:\t.section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -305,10 +310,12 @@ static inline int emulate_load_store_ins
#endif
"li\t%1, 0\n"
"3:\t.section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -347,10 +354,12 @@ static inline int emulate_load_store_ins
"li\t%0, 0\n"
"3:\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%0, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -377,10 +386,12 @@ static inline int emulate_load_store_ins
"li\t%0, 0\n"
"3:\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%0, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -415,10 +426,12 @@ static inline int emulate_load_store_ins
"li\t%0, 0\n"
"3:\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%0, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/memcpy.S
linux-mips-2.4.24-pre2-20040116/arch/mips/lib/memcpy.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/memcpy.S
2003-06-28 02:56:51.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/lib/memcpy.S 2004-02-15
13:54:06.000000000 +0000
@@ -73,6 +73,7 @@
#define EXC(inst_reg,addr,handler) \
9: inst_reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/memset.S
linux-mips-2.4.24-pre2-20040116/arch/mips/lib/memset.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/memset.S
2002-08-06 02:57:18.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/lib/memset.S 2004-02-15
13:54:10.000000000 +0000
@@ -12,6 +12,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/strlen_user.S
linux-mips-2.4.24-pre2-20040116/arch/mips/lib/strlen_user.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/strlen_user.S
2002-07-02 02:57:21.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/lib/strlen_user.S 2004-02-15
13:54:15.000000000 +0000
@@ -14,6 +14,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/strncpy_user.S
linux-mips-2.4.24-pre2-20040116/arch/mips/lib/strncpy_user.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/strncpy_user.S
2001-09-07 04:26:28.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/lib/strncpy_user.S
2004-02-15 13:54:19.000000000 +0000
@@ -13,6 +13,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/strnlen_user.S
linux-mips-2.4.24-pre2-20040116/arch/mips/lib/strnlen_user.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips/lib/strnlen_user.S
2002-07-02 02:57:21.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips/lib/strnlen_user.S
2004-02-15 13:54:22.000000000 +0000
@@ -14,6 +14,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/gdb-low.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/gdb-low.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/gdb-low.S
2003-07-15 15:17:59.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/gdb-low.S
2004-02-15 04:21:15.000000000 +0000
@@ -336,6 +336,7 @@ LEAF(kgdb_read_byte)
li v0, 0
jr ra
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 4b, kgdbfault
.previous
END(kgdb_read_byte)
@@ -345,6 +346,7 @@ LEAF(kgdb_write_byte)
li v0, 0
jr ra
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 5b, kgdbfault
.previous
END(kgdb_write_byte)
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/r4k_fpu.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/r4k_fpu.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/r4k_fpu.S
2003-07-16 02:56:44.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/r4k_fpu.S
2004-02-15 04:21:53.000000000 +0000
@@ -25,6 +25,7 @@
.ex\@: \insn \reg, \src
.set pop
.section __ex_table,"a"
+ .p2align PTRLOG
PTR .ex\@, fault
.previous
.endm
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/scall_o32.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/scall_o32.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/scall_o32.S
2003-10-16 02:57:04.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/scall_o32.S
2004-02-15 04:22:31.000000000 +0000
@@ -176,6 +176,7 @@ stackargs:
j stack_done # go back
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 1b, bad_stack
PTR 2b, bad_stack
.previous
@@ -226,6 +227,7 @@ LEAF(mips_atomic_set)
beqz a0, 1b
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 1b, bad_stack
PTR 2b, bad_stack
.previous
@@ -292,6 +294,7 @@ LEAF(sys32_syscall)
3: lw t1, 24(t0)
.section __ex_table,"a"
+ .p2align PTRLOG
PTR 1b, efault
PTR 2b, efault
PTR 3b, efault
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/traps.c
linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/traps.c
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/traps.c
2003-12-16 03:57:14.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/traps.c 2004-02-15
04:01:06.000000000 +0000
@@ -9,7 +9,7 @@
* Copyright (C) 1999 Silicon Graphics, Inc.
* Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
* Copyright (C) 2000, 01 MIPS Technologies, Inc.
- * Copyright (C) 2002, 2003 Maciej W. Rozycki
+ * Copyright (C) 2002, 2003, 2004 Maciej W. Rozycki
*/
#include <linux/config.h>
#include <linux/init.h>
@@ -20,6 +20,7 @@
#include <linux/smp_lock.h>
#include <linux/spinlock.h>
+#include <asm/asm.h>
#include <asm/bootinfo.h>
#include <asm/branch.h>
#include <asm/cpu.h>
@@ -292,6 +293,7 @@ void __declare_dbe_table(void)
{
__asm__ __volatile__(
".section\t__dbe_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
".previous"
);
}
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/unaligned.c
linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/unaligned.c
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/kernel/unaligned.c
2004-01-03 03:56:46.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/kernel/unaligned.c
2004-02-15 04:16:20.000000000 +0000
@@ -85,9 +85,6 @@
#include <asm/uaccess.h>
#include <asm/system.h>
-#define STR(x) __STR(x)
-#define __STR(x) #x
-
#ifdef CONFIG_PROC_FS
unsigned long unaligned_instructions;
#endif
@@ -159,10 +156,12 @@ static inline int emulate_load_store_ins
"li\t%1, 0\n"
"3:\t.set\tat\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -189,10 +188,12 @@ static inline int emulate_load_store_ins
#endif
"li\t%1, 0\n"
"3:\t.section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -223,10 +224,12 @@ static inline int emulate_load_store_ins
"li\t%1, 0\n"
"3:\t.set\tat\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -263,10 +266,12 @@ static inline int emulate_load_store_ins
"dsrl\t%0, %0, 32\n\t"
"li\t%1, 0\n"
"3:\t.section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -305,10 +310,12 @@ static inline int emulate_load_store_ins
#endif
"li\t%1, 0\n"
"3:\t.section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%1, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -347,10 +354,12 @@ static inline int emulate_load_store_ins
"li\t%0, 0\n"
"3:\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%0, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -377,10 +386,12 @@ static inline int emulate_load_store_ins
"li\t%0, 0\n"
"3:\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%0, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
@@ -415,10 +426,12 @@ static inline int emulate_load_store_ins
"li\t%0, 0\n"
"3:\n\t"
".section\t.fixup,\"ax\"\n\t"
+ ".p2align\t2\n"
"4:\tli\t%0, %3\n\t"
"j\t3b\n\t"
".previous\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b, 4b\n\t"
STR(PTR)"\t2b, 4b\n\t"
".previous"
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/memcpy.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/memcpy.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/memcpy.S
2003-06-28 02:56:53.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/memcpy.S 2004-02-15
13:55:03.000000000 +0000
@@ -73,6 +73,7 @@
#define EXC(inst_reg,addr,handler) \
9: inst_reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/memset.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/memset.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/memset.S
2002-08-06 02:57:38.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/memset.S 2004-02-15
13:55:09.000000000 +0000
@@ -15,6 +15,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/strlen_user.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/strlen_user.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/strlen_user.S
2002-12-11 03:56:45.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/strlen_user.S
2004-02-15 13:55:13.000000000 +0000
@@ -14,6 +14,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/strncpy_user.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/strncpy_user.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/strncpy_user.S
2002-12-11 03:56:45.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/strncpy_user.S
2004-02-15 13:55:16.000000000 +0000
@@ -13,6 +13,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/strnlen_user.S
linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/strnlen_user.S
--- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/lib/strnlen_user.S
2002-12-11 03:56:45.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/arch/mips64/lib/strnlen_user.S
2004-02-15 13:55:20.000000000 +0000
@@ -14,6 +14,7 @@
#define EX(insn,reg,addr,handler) \
9: insn reg, addr; \
.section __ex_table,"a"; \
+ .p2align PTRLOG; \
PTR 9b, handler; \
.previous
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/asm.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips/asm.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/asm.h
2003-12-31 03:57:05.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips/asm.h 2004-02-15
04:01:41.000000000 +0000
@@ -29,6 +29,11 @@
#define CAT(str1,str2) __CAT(str1,str2)
#endif
+#ifndef STR
+#define STR(x) __STR(x)
+#define __STR(x) #x
+#endif
+
/*
* PIC specific declarations
* Not used for the kernel but here seems to be the right place.
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/paccess.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips/paccess.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/paccess.h
2002-07-06 23:48:37.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips/paccess.h 2004-02-15
05:18:36.000000000 +0000
@@ -14,6 +14,7 @@
#define _ASM_PACCESS_H
#include <linux/errno.h>
+#include <asm/asm.h>
#define put_dbe(x,ptr) __put_dbe((x),(ptr),sizeof(*(ptr)))
#define get_dbe(x,ptr) __get_dbe((x),(ptr),sizeof(*(ptr)))
@@ -45,13 +46,15 @@ __asm__ __volatile__( \
"1:\tmove\t%0,$0\n" \
".set\tpop\n\t" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0,%3\n\t" \
"move\t%1,$0\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__dbe_table,\"a\"\n\t" \
- ".word\t1b-4,3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b-4,3b\n\t" \
".previous" \
:"=r" (__gu_err), "=r" (__gu_val) \
:"o" (__mp(__gu_addr)), "i" (-EFAULT)); })
@@ -82,12 +85,14 @@ __asm__ __volatile__( \
"1:\tmove\t%0,$0\n" \
".set\tpop\n\t" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0,%3\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__dbe_table,\"a\"\n\t" \
- ".word\t1b-4,3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b-4,3b\n\t" \
".previous" \
:"=r" (__pu_err) \
:"r" (__pu_val), "o" (__mp(__pu_addr)), "i" (-EFAULT)); })
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/r4kcache.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips/r4kcache.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/r4kcache.h
2004-01-05 03:57:13.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips/r4kcache.h 2004-02-15
04:24:10.000000000 +0000
@@ -77,6 +77,7 @@ static inline void protected_flush_icach
"2:\t.set mips0\n\t"
".set reorder\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b,2b\n\t"
".previous"
:
@@ -98,6 +99,7 @@ static inline void protected_writeback_d
"2:\t.set mips0\n\t"
".set reorder\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b,2b\n\t"
".previous"
:
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/uaccess.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips/uaccess.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips/uaccess.h
2004-02-13 06:26:20.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips/uaccess.h 2004-02-15
05:19:03.000000000 +0000
@@ -13,8 +13,7 @@
#include <linux/errno.h>
#include <linux/sched.h>
-#define STR(x) __STR(x)
-#define __STR(x) #x
+#include <asm/asm.h>
/*
* The fs value determines whether argument validity checking should be
@@ -239,13 +238,15 @@ struct __large_struct { unsigned long bu
"1:\t" insn "\t%1,%2\n\t" \
"move\t%0,$0\n" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0,%3\n\t" \
"move\t%1,$0\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__ex_table,\"a\"\n\t" \
- ".word\t1b,3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,3b\n\t" \
".previous" \
:"=r" (__gu_err), "=r" (__gu_val) \
:"o" (__m(__gu_addr)), "i" (-EFAULT)); \
@@ -260,15 +261,18 @@ __asm__ __volatile__(
\
"1:\tlw\t%1,%2\n" \
"2:\tlw\t%D1,%3\n\t" \
"move\t%0,$0\n" \
- "3:\t.section\t.fixup,\"ax\"\n" \
+ "3:\n\t" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"4:\tli\t%0,%4\n\t" \
"move\t%1,$0\n\t" \
"move\t%D1,$0\n\t" \
"j\t3b\n\t" \
".previous\n\t" \
".section\t__ex_table,\"a\"\n\t" \
- ".word\t1b,4b\n\t" \
- ".word\t2b,4b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,4b\n\t" \
+ STR(PTR) "\t2b,4b\n\t" \
".previous" \
:"=r" (__gu_err), "=&r" (__gu_val) \
:"o" (__m(__gu_addr)), "o" (__m(__gu_addr + 4)), \
@@ -331,12 +335,14 @@ extern void __get_user_unknown(void);
"1:\t" insn "\t%z1, %2\t\t\t# __put_user_asm\n\t" \
"move\t%0, $0\n" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0, %3\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__ex_table,\"a\"\n\t" \
- ".word\t1b, 3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,3b\n\t" \
".previous" \
:"=r" (__pu_err) \
:"Jr" (__pu_val), "o" (__m(__pu_addr)), "i" (-EFAULT)); \
@@ -349,13 +355,15 @@ __asm__ __volatile__(
\
"2:\tsw\t%D1, %3\n" \
"move\t%0, $0\n" \
"3:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"4:\tli\t%0, %4\n\t" \
"j\t3b\n\t" \
".previous\n\t" \
".section\t__ex_table,\"a\"\n\t" \
- ".word\t1b,4b\n\t" \
- ".word\t2b,4b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,4b\n\t" \
+ STR(PTR) "\t2b,4b\n\t" \
".previous" \
:"=r" (__pu_err) \
:"r" (__pu_val), "o" (__m(__pu_addr)), "o" (__m(__pu_addr + 4)),\
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/asm.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips64/asm.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/asm.h
2003-12-31 03:57:06.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips64/asm.h 2004-02-15
04:02:27.000000000 +0000
@@ -29,6 +29,11 @@
#define CAT(str1,str2) __CAT(str1,str2)
#endif
+#ifndef STR
+#define STR(x) __STR(x)
+#define __STR(x) #x
+#endif
+
/*
* PIC specific declarations
* Not used for the kernel but here seems to be the right place.
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/paccess.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips64/paccess.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/paccess.h
2002-07-07 10:08:24.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips64/paccess.h
2004-02-15 05:18:41.000000000 +0000
@@ -14,6 +14,7 @@
#define _ASM_PACCESS_H
#include <linux/errno.h>
+#include <asm/asm.h>
#define put_dbe(x,ptr) __put_dbe((x),(ptr),sizeof(*(ptr)))
#define get_dbe(x,ptr) __get_dbe((x),(ptr),sizeof(*(ptr)))
@@ -42,13 +43,15 @@ __asm__ __volatile__( \
"1:\t" insn "\t%1,%2\n\t" \
"move\t%0,$0\n" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0,%3\n\t" \
"move\t%1,$0\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__dbe_table,\"a\"\n\t" \
- ".dword\t1b,3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,3b\n\t" \
".previous" \
:"=r" (__gu_err), "=r" (__gu_val) \
:"o" (__mp(__gu_addr)), "i" (-EFAULT)); })
@@ -76,12 +79,14 @@ __asm__ __volatile__( \
"1:\t" insn "\t%1,%2\n\t" \
"move\t%0,$0\n" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0,%3\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__dbe_table,\"a\"\n\t" \
- ".dword\t1b,3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,3b\n\t" \
".previous" \
:"=r" (__pu_err) \
:"r" (__pu_val), "o" (__mp(__pu_addr)), "i" (-EFAULT)); })
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/r4kcache.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips64/r4kcache.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/r4kcache.h
2004-01-05 03:57:15.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips64/r4kcache.h
2004-02-15 04:24:26.000000000 +0000
@@ -77,6 +77,7 @@ static inline void protected_flush_icach
"2:\t.set mips0\n\t"
".set reorder\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b,2b\n\t"
".previous"
:
@@ -98,6 +99,7 @@ static inline void protected_writeback_d
"2:\t.set mips0\n\t"
".set reorder\n\t"
".section\t__ex_table,\"a\"\n\t"
+ ".p2align\t" STR(PTRLOG) "\n\t"
STR(PTR)"\t1b,2b\n\t"
".previous"
:
diff -up --recursive --new-file
linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/uaccess.h
linux-mips-2.4.24-pre2-20040116/include/asm-mips64/uaccess.h
--- linux-mips-2.4.24-pre2-20040116.macro/include/asm-mips64/uaccess.h
2003-09-15 02:57:28.000000000 +0000
+++ linux-mips-2.4.24-pre2-20040116/include/asm-mips64/uaccess.h
2004-02-15 05:18:54.000000000 +0000
@@ -13,8 +13,7 @@
#include <linux/errno.h>
#include <linux/sched.h>
-#define STR(x) __STR(x)
-#define __STR(x) #x
+#include <asm/asm.h>
/*
* The fs value determines whether argument validity checking should be
@@ -229,13 +228,15 @@ struct __large_struct { unsigned long bu
"1:\t" insn "\t%1,%2\n\t" \
"move\t%0,$0\n" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0,%3\n\t" \
"move\t%1,$0\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__ex_table,\"a\"\n\t" \
- ".dword\t1b,3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,3b\n\t" \
".previous" \
:"=r" (__gu_err), "=r" (__gu_val) \
:"o" (__m(__gu_addr)), "i" (-EFAULT)); \
@@ -287,12 +288,14 @@ extern void __get_user_unknown(void);
"1:\t" insn "\t%z1, %2\t\t\t# __put_user_asm\n\t" \
"move\t%0, $0\n" \
"2:\n\t" \
- ".section\t.fixup,\"ax\"\n" \
+ ".section\t.fixup,\"ax\"\n\t" \
+ ".p2align\t2\n" \
"3:\tli\t%0, %3\n\t" \
"j\t2b\n\t" \
".previous\n\t" \
".section\t__ex_table,\"a\"\n\t" \
- ".dword\t1b, 3b\n\t" \
+ ".p2align\t" STR(PTRLOG) "\n\t" \
+ STR(PTR) "\t1b,3b\n\t" \
".previous" \
:"=r" (__pu_err) \
:"Jr" (__pu_val), "o" (__m(__pu_addr)), "i" (-EFAULT)); \
|