Skip to content

Commit

Permalink
avr32: fix out-of-range rjmp instruction on large kernels
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Haavard Skinnemoen committed Jan 16, 2009
1 parent 8d29b7b commit 61f3632
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions arch/avr32/include/asm/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -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" \
Expand Down Expand Up @@ -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" \
Expand Down

0 comments on commit 61f3632

Please sign in to comment.