mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-09 16:45:03 +00:00
MC: add and use an accessor for WinCFI
This adds a utility method to access the WinCFI information in bulk and uses that to iterate rather than requesting the count and individually iterating them. This is in preparation for restructuring WinCFI handling to enable more clear sharing across architectures to enable unwind information emission for Windows on ARM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212683 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
141d3e3015
commit
09f505a0a5
@ -243,6 +243,10 @@ public:
|
||||
return *W64UnwindInfos[i];
|
||||
}
|
||||
|
||||
ArrayRef<MCWin64EHUnwindInfo *> getW64UnwindInfos() const {
|
||||
return W64UnwindInfos;
|
||||
}
|
||||
|
||||
void generateCompactUnwindEncodings(MCAsmBackend *MAB);
|
||||
|
||||
/// @name Assembly File Formatting.
|
||||
|
@ -274,23 +274,23 @@ void MCWin64EHUnwindEmitter::EmitUnwindInfo(MCStreamer &streamer,
|
||||
llvm::EmitUnwindInfo(streamer, info);
|
||||
}
|
||||
|
||||
void MCWin64EHUnwindEmitter::Emit(MCStreamer &streamer) {
|
||||
MCContext &context = streamer.getContext();
|
||||
void MCWin64EHUnwindEmitter::Emit(MCStreamer &Streamer) {
|
||||
MCContext &Context = Streamer.getContext();
|
||||
|
||||
// Emit the unwind info structs first.
|
||||
for (unsigned i = 0; i < streamer.getNumW64UnwindInfos(); ++i) {
|
||||
MCWin64EHUnwindInfo &info = streamer.getW64UnwindInfo(i);
|
||||
const MCSection *xdataSect =
|
||||
getWin64EHTableSection(GetSectionSuffix(info.Function), context);
|
||||
streamer.SwitchSection(xdataSect);
|
||||
llvm::EmitUnwindInfo(streamer, &info);
|
||||
for (const auto &CFI : Streamer.getW64UnwindInfos()) {
|
||||
const MCSection *XData =
|
||||
getWin64EHTableSection(GetSectionSuffix(CFI->Function), Context);
|
||||
Streamer.SwitchSection(XData);
|
||||
EmitUnwindInfo(Streamer, CFI);
|
||||
}
|
||||
|
||||
// Now emit RUNTIME_FUNCTION entries.
|
||||
for (unsigned i = 0; i < streamer.getNumW64UnwindInfos(); ++i) {
|
||||
MCWin64EHUnwindInfo &info = streamer.getW64UnwindInfo(i);
|
||||
const MCSection *pdataSect =
|
||||
getWin64EHFuncTableSection(GetSectionSuffix(info.Function), context);
|
||||
streamer.SwitchSection(pdataSect);
|
||||
EmitRuntimeFunction(streamer, &info);
|
||||
for (const auto &CFI : Streamer.getW64UnwindInfos()) {
|
||||
const MCSection *PData =
|
||||
getWin64EHFuncTableSection(GetSectionSuffix(CFI->Function), Context);
|
||||
Streamer.SwitchSection(PData);
|
||||
EmitRuntimeFunction(Streamer, CFI);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user