diff options
author | Lei Liu <lei.liu2@windriver.com> | 2018-08-13 06:06:53 +0000 |
---|---|---|
committer | Lei Liu <lei.liu2@windriver.com> | 2018-08-13 06:06:53 +0000 |
commit | 901a0a95885f2c2dcfb03e56dabd2b0b12350a15 (patch) | |
tree | 0c57f2dfb5ad8193d0785cd5b70b3d32d77da682 /llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | |
parent | 42e32117bb0afbbd40f34ea18e2884bb54d7c9be (diff) | |
download | bcm5719-llvm-901a0a95885f2c2dcfb03e56dabd2b0b12350a15.tar.gz bcm5719-llvm-901a0a95885f2c2dcfb03e56dabd2b0b12350a15.zip |
Restore correct x86_64 EH encodings in kernel code model
Fixes PR37524.
The exception handling encodings for x86_64 in kernel code model
has been changed with r309884. Restore it to correct ones. These
encodings include PersonalityEncoding, LSDAEncoding and
TTypeEncoding.
Differential Revision: https://reviews.llvm.org/D50490
llvm-svn: 339534
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 2b571a02b4d..7a5fd2985c7 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -96,7 +96,7 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx, TargetLoweringObjectFile::Initialize(Ctx, TgtM); TM = &TgtM; - bool Large = TgtM.getCodeModel() == CodeModel::Large; + CodeModel::Model CM = TgtM.getCodeModel(); switch (TgtM.getTargetTriple().getArch()) { case Triple::arm: @@ -124,18 +124,23 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx, break; case Triple::x86_64: if (isPositionIndependent()) { - PersonalityEncoding = - dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | - (Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4); + PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | + ((CM == CodeModel::Small || CM == CodeModel::Medium) + ? dwarf::DW_EH_PE_sdata4 : dwarf::DW_EH_PE_sdata8); LSDAEncoding = dwarf::DW_EH_PE_pcrel | - (Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4); + (CM == CodeModel::Small + ? dwarf::DW_EH_PE_sdata4 : dwarf::DW_EH_PE_sdata8); TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | - (Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4); + ((CM == CodeModel::Small || CM == CodeModel::Medium) + ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4); } else { PersonalityEncoding = - Large ? dwarf::DW_EH_PE_absptr : dwarf::DW_EH_PE_udata4; - LSDAEncoding = Large ? dwarf::DW_EH_PE_absptr : dwarf::DW_EH_PE_udata4; - TTypeEncoding = Large ? dwarf::DW_EH_PE_absptr : dwarf::DW_EH_PE_udata4; + (CM == CodeModel::Small || CM == CodeModel::Medium) + ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr; + LSDAEncoding = (CM == CodeModel::Small) + ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr; + TTypeEncoding = (CM == CodeModel::Small) + ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr; } break; case Triple::hexagon: |