a0bf403f66
LLVM 3.9 now emits short form of jump instructions, but it is still using 32 bit addresses for some movl instructions. Fortunately it was caught early: clang ... boot/i386/pc/boot.S clang -cc1as: fatal error: error in backend: invalid .org offset '440' (at offset '441') Add additional check to catch it during configure run and force -no-integrated-as. Closes: 49200 More details in https://lists.gnu.org/archive/html/grub-devel/2015-02/msg00099.html https://llvm.org/bugs/show_bug.cgi?id=22662
18 lines
417 B
ArmAsm
18 lines
417 B
ArmAsm
/* on x86 old clang doesn't support .code16
|
|
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
|
which makes us go over boot sector size.
|
|
Starting with 3.9 clang emits 3-byte jumps but still creates 8-bytes movl
|
|
instead of 5-bytes, so code overflows into data. */
|
|
|
|
.code16
|
|
jmp far
|
|
.org 4
|
|
jmp nearer
|
|
.org 6
|
|
movl nearer, %ebx
|
|
.org 11
|
|
.space 100
|
|
nearer:
|
|
.space 200
|
|
far:
|
|
.byte 0
|