mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-14 15:25:25 +00:00
Classify functions by EH personality type rather than using the triple
This mostly reverts commit r222062 and replaces it with a new enum. At some point this enum will grow at least for other MSVC EH personalities. Also beefs up the way we were sniffing the personality function. Previously we would emit the Itanium LSDA despite using __C_specific_handler. Reviewers: majnemer Differential Revision: http://reviews.llvm.org/D6987 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226920 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -276,6 +276,7 @@ bool MachineModuleInfo::doInitialization(Module &M) {
|
||||
DbgInfoAvailable = UsesVAFloatArgument = UsesMorestackAddr = false;
|
||||
// Always emit some info, by default "no personality" info.
|
||||
Personalities.push_back(nullptr);
|
||||
PersonalityTypeCache = EHPersonality::None;
|
||||
AddrLabelSymbols = nullptr;
|
||||
TheModule = nullptr;
|
||||
|
||||
@@ -554,7 +555,21 @@ try_next:;
|
||||
|
||||
/// getPersonality - Return the personality function for the current function.
|
||||
const Function *MachineModuleInfo::getPersonality() const {
|
||||
return !LandingPads.empty() ? LandingPads[0].Personality : nullptr;
|
||||
for (const LandingPadInfo &LPI : LandingPads)
|
||||
if (LPI.Personality)
|
||||
return LPI.Personality;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
EHPersonality MachineModuleInfo::getPersonalityTypeSlow() {
|
||||
const Function *Per = getPersonality();
|
||||
if (!Per)
|
||||
PersonalityTypeCache = EHPersonality::None;
|
||||
else if (Per->getName() == "__C_specific_handler")
|
||||
PersonalityTypeCache = EHPersonality::Win64SEH;
|
||||
else // Assume everything else is Itanium.
|
||||
PersonalityTypeCache = EHPersonality::Itanium;
|
||||
return PersonalityTypeCache;
|
||||
}
|
||||
|
||||
/// getPersonalityIndex - Return unique index for current personality
|
||||
|
Reference in New Issue
Block a user