[JITLink] Refer to FDE's CIE (not the most recent CIE) when parsing eh-frame.
authorLang Hames <lhames@gmail.com>
Wed, 24 Apr 2019 15:15:55 +0000 (15:15 +0000)
committerLang Hames <lhames@gmail.com>
Wed, 24 Apr 2019 15:15:55 +0000 (15:15 +0000)
commitb1ba4d8a8a332f3e24cea26be4dfc2c27177e38d
tree4176ec8a309851e72e44369ed474243a054fe026
parent98b15320e499a7f36d94d94a4bff32b6f1582287
[JITLink] Refer to FDE's CIE (not the most recent CIE) when parsing eh-frame.

Frame Descriptor Entries (FDEs) have a pointer back to a Common Information
Entry (CIE) that describes how the rest FDE should be parsed. JITLink had been
assuming that FDEs always referred to the most recent CIE encountered, but the
spec allows them to point back to any previously encountered CIE. This patch
fixes JITLink to look up the correct CIE for the FDE.

The testcase is a MachO binary with an FDE that refers to a CIE that is not the
one immediately proceeding it (the layout can be viewed wit
'dwarfdump --eh-frame <testcase>'. This test case had to be a binary as llvm-mc
now sorts FDEs (as of r356216) to ensure FDEs *do* point to the most recent CIE.

llvm-svn: 359105
llvm/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp
llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h
llvm/test/ExecutionEngine/JITLink/X86/Inputs/MachO_x86-64_ehframe.o [new file with mode: 0644]
llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_ehframe.test [new file with mode: 0644]
llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_relocations.s
llvm/tools/llvm-jitlink/llvm-jitlink.cpp