summaryrefslogtreecommitdiffstats
path: root/arch/avr32/include
diff options
context:
space:
mode:
authorHaavard Skinnemoen2009-01-14 13:32:53 +0100
committerHaavard Skinnemoen2009-01-16 09:38:05 +0100
commit61f3632fdcdcf547f6487f56b45976d7964756c4 (patch)
treecc24f13be370659b43d0ef517bd24d779f70e574 /arch/avr32/include
parentavr32: Fix out-of-range rcalls in large kernels (diff)
downloadkernel-qcow2-linux-61f3632fdcdcf547f6487f56b45976d7964756c4.tar.gz
kernel-qcow2-linux-61f3632fdcdcf547f6487f56b45976d7964756c4.tar.xz
kernel-qcow2-linux-61f3632fdcdcf547f6487f56b45976d7964756c4.zip
avr32: fix out-of-range rjmp instruction on large kernels
Use .subsection to place fixups closer to their jump targets. This increases the maximum size of the kernel before we get link errors significantly. The problem here is that we don't have a "call"-ish pseudo-instruction to use instead of rjmp...we could add one, but that means we'll have to wait for a new toolchain release, wait until we're fairly sure most people are using it, etc... As an added bonus, it should decrease the RAM footprint slightly, though it might pollute the icache a bit more. Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Diffstat (limited to 'arch/avr32/include')
-rw-r--r--arch/avr32/include/asm/uaccess.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/avr32/include/asm/uaccess.h b/arch/avr32/include/asm/uaccess.h
index ed092395215e..245b2ee213c9 100644
--- a/arch/avr32/include/asm/uaccess.h
+++ b/arch/avr32/include/asm/uaccess.h
@@ -230,10 +230,10 @@ extern int __put_user_bad(void);
asm volatile( \
"1: ld." suffix " %1, %3 \n" \
"2: \n" \
- " .section .fixup, \"ax\" \n" \
+ " .subsection 1 \n" \
"3: mov %0, %4 \n" \
" rjmp 2b \n" \
- " .previous \n" \
+ " .subsection 0 \n" \
" .section __ex_table, \"a\" \n" \
" .long 1b, 3b \n" \
" .previous \n" \
@@ -295,10 +295,10 @@ extern int __put_user_bad(void);
asm volatile( \
"1: st." suffix " %1, %3 \n" \
"2: \n" \
- " .section .fixup, \"ax\" \n" \
+ " .subsection 1 \n" \
"3: mov %0, %4 \n" \
" rjmp 2b \n" \
- " .previous \n" \
+ " .subsection 0 \n" \
" .section __ex_table, \"a\" \n" \
" .long 1b, 3b \n" \
" .previous \n" \