From a0bf403f66dbaca4edd8e667bfc397dd91c8d71c Mon Sep 17 00:00:00 2001 From: Andrei Borzenkov Date: Wed, 28 Sep 2016 20:31:04 +0300 Subject: [PATCH] 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 --- asm-tests/i386-pc.S | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/asm-tests/i386-pc.S b/asm-tests/i386-pc.S index f6f9a88be..d037744f9 100644 --- a/asm-tests/i386-pc.S +++ b/asm-tests/i386-pc.S @@ -1,12 +1,16 @@ /* 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. */ + 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