asm-tests/i386-pc: Check that movl is 5 bytes.
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
This commit is contained in:
parent
4e0f8f66e3
commit
a0bf403f66
1 changed files with 5 additions and 1 deletions
|
@ -1,12 +1,16 @@
|
||||||
/* on x86 old clang doesn't support .code16
|
/* on x86 old clang doesn't support .code16
|
||||||
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
||||||
which makes us go over boot sector size. */
|
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
|
.code16
|
||||||
jmp far
|
jmp far
|
||||||
.org 4
|
.org 4
|
||||||
jmp nearer
|
jmp nearer
|
||||||
.org 6
|
.org 6
|
||||||
|
movl nearer, %ebx
|
||||||
|
.org 11
|
||||||
.space 100
|
.space 100
|
||||||
nearer:
|
nearer:
|
||||||
.space 200
|
.space 200
|
||||||
|
|
Loading…
Reference in a new issue