[BranchAlign] Fix bug w/nop padding for SS manipulation
authorPhilip Reames <listmail@philipreames.com>
Mon, 2 Mar 2020 21:21:53 +0000 (13:21 -0800)
committerPhilip Reames <listmail@philipreames.com>
Mon, 2 Mar 2020 22:40:25 +0000 (14:40 -0800)
commit7049cf6496c9aa8e355345a3fbea30861e4d2da8
treed56252823a37d4e1bebb5d07d5b740e6f76e28fd
parent9897daa6bfcce044473f63e12492ec7748e8eb62
[BranchAlign] Fix bug w/nop padding for SS manipulation

X86 has several instructions which are documented as enabling interrupts exactly one instruction *after* the one which changes the SS segment register. Inserting a nop between these two instructions allows an interrupt to arrive before the execution of the following instruction which changes semantic behaviour.

The list of instructions is documented in "Table 24-3. Format of Interruptibility State" in Volume 3c of the Intel manual. They basically all come down to different ways to write to the SS register.

Differential Revision: https://reviews.llvm.org/D75359
llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
llvm/test/MC/X86/align-branch-64-system.s [new file with mode: 0644]