forked from luck/tmp_suning_uos_patched
[SPARC64]: Fix linkage of enormous kernels.
This was found by make randconfig If the kernel .text is very large, the .fixup section branches are too far away to be relocated correctly. Use "sethi %hi(label), reg; jmpl reg + %lo(label); %g0" sequence instead of the branch to fix this. There is another case in switch_to() involving a branch, which is fixed similarly. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d6898556e9
commit
52eb053b71
|
@ -17,7 +17,8 @@
|
|||
"3:\n" \
|
||||
" .section .fixup,#alloc,#execinstr\n" \
|
||||
" .align 4\n" \
|
||||
"4: ba 3b\n" \
|
||||
"4: sethi %%hi(3b), %0\n" \
|
||||
" jmpl %0 + %%lo(3b), %%g0\n" \
|
||||
" mov %5, %0\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
|
@ -91,7 +92,8 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
|||
"2:\n"
|
||||
" .section .fixup,#alloc,#execinstr\n"
|
||||
" .align 4\n"
|
||||
"3: ba 2b\n"
|
||||
"3: sethi %%hi(2b), %0\n"
|
||||
" jmpl %0 + %%lo(2b), %%g0\n"
|
||||
" mov %4, %0\n"
|
||||
" .previous\n"
|
||||
" .section __ex_table,\"a\"\n"
|
||||
|
|
|
@ -178,7 +178,9 @@ do { if (test_thread_flag(TIF_PERFCTR)) { \
|
|||
"ldx [%%g6 + %9], %%g4\n\t" \
|
||||
"brz,pt %%o7, 1f\n\t" \
|
||||
" mov %%g7, %0\n\t" \
|
||||
"b,a ret_from_syscall\n\t" \
|
||||
"sethi %%hi(ret_from_syscall), %%g1\n\t" \
|
||||
"jmpl %%g1 + %%lo(ret_from_syscall), %%g0\n\t" \
|
||||
" nop\n\t" \
|
||||
"1:\n\t" \
|
||||
: "=&r" (last), "=r" (current), "=r" (current_thread_info_reg), \
|
||||
"=r" (__local_per_cpu_offset) \
|
||||
|
|
|
@ -123,7 +123,8 @@ __asm__ __volatile__( \
|
|||
".section .fixup,#alloc,#execinstr\n\t" \
|
||||
".align 4\n" \
|
||||
"3:\n\t" \
|
||||
"b 2b\n\t" \
|
||||
"sethi %%hi(2b), %0\n\t" \
|
||||
"jmpl %0 + %%lo(2b), %%g0\n\t" \
|
||||
" mov %3, %0\n\n\t" \
|
||||
".previous\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
|
@ -165,8 +166,9 @@ __asm__ __volatile__( \
|
|||
".section .fixup,#alloc,#execinstr\n\t" \
|
||||
".align 4\n" \
|
||||
"3:\n\t" \
|
||||
"sethi %%hi(2b), %0\n\t" \
|
||||
"clr %1\n\t" \
|
||||
"b 2b\n\t" \
|
||||
"jmpl %0 + %%lo(2b), %%g0\n\t" \
|
||||
" mov %3, %0\n\n\t" \
|
||||
".previous\n\t" \
|
||||
".section __ex_table,\"a\"\n\t" \
|
||||
|
|
Loading…
Reference in New Issue
Block a user