Skip to content

Commit

Permalink
asm-tests/i386-pc: Check that movl is 5 bytes.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
arvidjaar committed Sep 28, 2016
1 parent 4e0f8f6 commit a0bf403
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion 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
Expand Down

0 comments on commit a0bf403

Please sign in to comment.