aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorMichał Górny <mgorny@moritz.systems>2020-11-15 14:55:40 +0100
committerMichał Górny <mgorny@moritz.systems>2020-11-19 13:23:12 +0100
commitd8ff269f677621a773d75c79d50bb3f59a6b052e (patch)
treea7a1e0e44798ad570a1a47f030b2020af40ed15a /clang/lib/CodeGen/CodeGenModule.cpp
parent14ae02fb3397961bb5f99a0df60622375fc1976d (diff)
downloadllvm-d8ff269f677621a773d75c79d50bb3f59a6b052e.zip
llvm-d8ff269f677621a773d75c79d50bb3f59a6b052e.tar.gz
llvm-d8ff269f677621a773d75c79d50bb3f59a6b052e.tar.bz2
[lldb] Add explicit 64-bit fip/fdp registers on x86_64
The FXSAVE/XSAVE data can have two different layouts on x86_64. When called as FXSAVE/XSAVE..., the Instruction Pointer and Address Pointer registers are reported using a 16-bit segment identifier and a 32-bit offset. When called as FXSAVE64/XSAVE64..., they are reported using a complete 64-bit offsets instead. LLDB has historically followed GDB and unconditionally used to assume the 32-bit layout, with the slight modification of possibly using a 32-bit segment register (i.e. extending the register into the reserved 16 upper bits). When the underlying operating system used FXSAVE64/XSAVE64..., the pointer was split into two halves, with the upper half repored as the segment registers. While reconstructing the full address was possible on the user end (and e.g. the FPU register tests did that), it certainly was not the most convenient option. Introduce a two additional 'fip' and 'fdp' registers that overlap with 'fiseg'/'fioff' and 'foseg'/'foff' respectively, and report the complete 64-bit address. Differential Revision: https://reviews.llvm.org/D91497
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions