[llvm] [SystemZ][z/OS] Remove use of subsections. (PR #184167)
Ulrich Weigand via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 10 10:10:04 PDT 2026
================
@@ -1566,39 +1650,42 @@ void SystemZAsmPrinter::emitPPA1(MCSymbol *FnEndSym) {
assert(AllocaReg < 16 && "Can't have alloca register larger than 15");
(void)AllocaReg;
- // Build FPR save area offset.
- uint32_t FrameAndFPROffset = 0;
- if (SavedFPRMask) {
- uint64_t FPRSaveAreaOffset = OffsetFPR;
- assert(FPRSaveAreaOffset < 0x10000000 && "Offset out of range");
-
- FrameAndFPROffset = FPRSaveAreaOffset & 0x0FFFFFFF; // Lose top 4 bits.
- FrameAndFPROffset |= FrameReg << 28; // Put into top 4 bits.
- }
-
- // Build VR save area offset.
- uint32_t FrameAndVROffset = 0;
- if (TargetHasVector && SavedVRMask) {
- uint64_t VRSaveAreaOffset = OffsetVR;
- assert(VRSaveAreaOffset < 0x10000000 && "Offset out of range");
+ MCSymbol *PersonalityRoutine = nullptr;
+ MCSymbol *GCCEH = nullptr;
+ if (!MF->getLandingPads().empty()) {
+ const Function *Per = dyn_cast<Function>(
+ MF->getFunction().getPersonalityFn()->stripPointerCasts());
+ PersonalityRoutine = Per ? MF->getTarget().getSymbol(Per) : nullptr;
+ assert(PersonalityRoutine && "Missing personality routine");
- FrameAndVROffset = VRSaveAreaOffset & 0x0FFFFFFF; // Lose top 4 bits.
- FrameAndVROffset |= FrameReg << 28; // Put into top 4 bits.
+ GCCEH = MF->getContext().getOrCreateSymbol(Twine("GCC_except_table") +
+ Twine(MF->getFunctionNumber()));
}
- // Emit PPA1 section.
- OutStreamer->AddComment("PPA1");
- OutStreamer->emitLabel(CurrentFnPPA1Sym);
- OutStreamer->AddComment("Version");
- OutStreamer->emitInt8(0x02); // Version.
- OutStreamer->AddComment("LE Signature X'CE'");
- OutStreamer->emitInt8(0xCE); // CEL signature.
- OutStreamer->AddComment("Saved GPR Mask");
- OutStreamer->emitInt16(SavedGPRMask);
- OutStreamer->AddComment("Offset to PPA2");
- OutStreamer->emitAbsoluteSymbolDiff(PPA2Sym, CurrentFnPPA1Sym, 4);
-
- bool NeedEmitEHBlock = !MF->getLandingPads().empty();
+ // Get the name of the function, with suffix _.
+ std::string N(MF->getFunction().hasName()
+ ? Twine(MF->getFunction().getName()).concat("_").str()
+ : "");
+
+ // Save the calculated values.
+ if (MF->getFunction().hasName())
+ Info.Name = MF->getFunction().getName();
+ Info.PPA1 = OutContext.createTempSymbol(Twine("PPA1_").concat(N).str(), true);
+ Info.EPMarker =
+ OutContext.createTempSymbol(Twine("EPM_").concat(N).str(), true);
+ Info.FnEnd = OutContext.createTempSymbol("func_end");
----------------
uweigand wrote:
Just wondering: why do two of those include the function name and the third does not?
https://github.com/llvm/llvm-project/pull/184167
More information about the llvm-commits
mailing list