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:
Andrei Borzenkov 2016-09-28 20:31:04 +03:00
parent 4e0f8f66e3
commit a0bf403f66

View file

@ -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