mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-12 15:05:06 +00:00
Even more explanation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93841 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6e3be14be4
commit
e1e0f485f9
@ -201,6 +201,18 @@ bool PPCTargetMachine::addSimpleCodeEmitter(PassManagerBase &PM,
|
||||
/// to bugs or other conditions. We will default to a 4-byte encoding unless the
|
||||
/// system tells us otherwise.
|
||||
///
|
||||
/// The issue is when the CIE says their is an LSDA. That mandates that every
|
||||
/// FDE have an LSDA slot. But if the function does not need an LSDA. There
|
||||
/// needs to be some way to signify there is none. The LSDA is encoded as
|
||||
/// pc-rel. But you don't look for some magic value after adding the pc. You
|
||||
/// have to look for a zero before adding the pc. The problem is that the size
|
||||
/// of the zero to look for depends on the encoding. The unwinder bug in SL is
|
||||
/// that it always checks for a pointer-size zero. So on x86_64 it looks for 8
|
||||
/// bytes of zero. If you have an LSDA, it works fine since the 8-bytes are
|
||||
/// non-zero so it goes ahead and then reads the value based on the encoding.
|
||||
/// But if you use sdata4 and there is no LSDA, then the test for zero gives a
|
||||
/// false negative and the unwinder thinks there is an LSDA.
|
||||
///
|
||||
/// FIXME: This call-back isn't good! We should be using the correct encoding
|
||||
/// regardless of the system. However, there are some systems which have bugs
|
||||
/// that prevent this from occuring.
|
||||
|
@ -257,6 +257,18 @@ void X86TargetMachine::setCodeModelForJIT() {
|
||||
/// to bugs or other conditions. We will default to a 4-byte encoding unless the
|
||||
/// system tells us otherwise.
|
||||
///
|
||||
/// The issue is when the CIE says their is an LSDA. That mandates that every
|
||||
/// FDE have an LSDA slot. But if the function does not need an LSDA. There
|
||||
/// needs to be some way to signify there is none. The LSDA is encoded as
|
||||
/// pc-rel. But you don't look for some magic value after adding the pc. You
|
||||
/// have to look for a zero before adding the pc. The problem is that the size
|
||||
/// of the zero to look for depends on the encoding. The unwinder bug in SL is
|
||||
/// that it always checks for a pointer-size zero. So on x86_64 it looks for 8
|
||||
/// bytes of zero. If you have an LSDA, it works fine since the 8-bytes are
|
||||
/// non-zero so it goes ahead and then reads the value based on the encoding.
|
||||
/// But if you use sdata4 and there is no LSDA, then the test for zero gives a
|
||||
/// false negative and the unwinder thinks there is an LSDA.
|
||||
///
|
||||
/// FIXME: This call-back isn't good! We should be using the correct encoding
|
||||
/// regardless of the system. However, there are some systems which have bugs
|
||||
/// that prevent this from occuring.
|
||||
|
Loading…
Reference in New Issue
Block a user