diff options
author | Maciej W. Rozycki <macro@codesourcery.com> | 2014-11-15 17:09:31 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-11-24 01:45:36 -0500 |
commit | 0e525e48f73cc8a4df8da0be77e4146bea85e1a5 (patch) | |
tree | 44d3ac8b6859b5b45ea9d58a71f7ac9f7a70336b /arch/mips/kernel/syscall.c | |
parent | b0984c43702f0fe2dbb0c344843e36c8b2cd13f1 (diff) |
MIPS: Apply `.insn' to fixup labels throughout
Fix the issue with the ISA bit being lost in fixups that jump to labels
placed just before a section switch. Such a switch leads to the ISA bit
being lost, because GAS concludes there is no code that follows and
therefore the label refers to data. Use the `.insn' pseudo-op to
convince the tool this is not the case.
This lack of label annotation leads to microMIPS compilation errors
like:
mips-linux-gnu-ld: arch/mips/built-in.o: .fixup+0x3b8: Unsupported jump between ISA modes; consider recompiling with interlinking enabled.
mips-linux-gnu-ld: final link failed: Bad value
Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com>
Signed-off-by: Steven J. Hill <Steven.Hill@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/8483/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/syscall.c')
-rw-r--r-- | arch/mips/kernel/syscall.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 4a4f9dda5658..604b558809c4 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -117,6 +117,7 @@ static inline int mips_atomic_set(unsigned long addr, unsigned long new) | |||
117 | "2: sc %[tmp], (%[addr]) \n" | 117 | "2: sc %[tmp], (%[addr]) \n" |
118 | " beqzl %[tmp], 1b \n" | 118 | " beqzl %[tmp], 1b \n" |
119 | "3: \n" | 119 | "3: \n" |
120 | " .insn \n" | ||
120 | " .section .fixup,\"ax\" \n" | 121 | " .section .fixup,\"ax\" \n" |
121 | "4: li %[err], %[efault] \n" | 122 | "4: li %[err], %[efault] \n" |
122 | " j 3b \n" | 123 | " j 3b \n" |
@@ -142,6 +143,7 @@ static inline int mips_atomic_set(unsigned long addr, unsigned long new) | |||
142 | "2: sc %[tmp], (%[addr]) \n" | 143 | "2: sc %[tmp], (%[addr]) \n" |
143 | " bnez %[tmp], 4f \n" | 144 | " bnez %[tmp], 4f \n" |
144 | "3: \n" | 145 | "3: \n" |
146 | " .insn \n" | ||
145 | " .subsection 2 \n" | 147 | " .subsection 2 \n" |
146 | "4: b 1b \n" | 148 | "4: b 1b \n" |
147 | " .previous \n" | 149 | " .previous \n" |