Skip to content

Commit

Permalink
Set always external linkage
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasSte committed Jul 16, 2024
1 parent 97e09ed commit 864ec39
Showing 1 changed file with 10 additions and 30 deletions.
40 changes: 10 additions & 30 deletions llvm/lib/Target/SBF/SBFRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,25 +57,7 @@ static void WarnSize(int Offset, MachineFunction &MF, DebugLoc& DL)
if (MF.getSubtarget<SBFSubtarget>().isSolana()) {
Function &OffendingFunction = MF.getFunction();

std::string MessageType;
std::string MessageExtra;
std::string NewName;
switch (OffendingFunction.getLinkage()) {
case GlobalValue::LinkageTypes::InternalLinkage:
case GlobalValue::LinkageTypes::PrivateLinkage:
MessageType = "Error:";
MessageExtra =
"The program is very likely to misbehave during execution "
"with unexpected consequences.";
break;
default:
MessageType = "Warning:";
MessageExtra = "The program may misbehave during execution.";
NewName = OffendingFunction.getName().str() + "::stack_overflow";
break;
}

dbgs() << MessageType;
dbgs() << "Warning: ";
if (DL) {
dbgs() << " ";
DL.print(dbgs());
Expand All @@ -86,11 +68,12 @@ static void WarnSize(int Offset, MachineFunction &MF, DebugLoc& DL)
<< -MaxOffset << " by " << MaxOffset - Offset
<< " bytes, please minimize large stack variables. "
<< "Estimated function frame size: " << StackSize << " bytes. "
<< MessageExtra << "\n\n";
<< "The program may misbehave during execution."
<< "\n\n";

if (!NewName.empty()) {
OffendingFunction.setName(NewName);
}
OffendingFunction.setName(OffendingFunction.getName() +
"::stack_overflow");
OffendingFunction.setLinkage(GlobalValue::LinkageTypes::ExternalLinkage);
} else {
DiagnosticInfoUnsupported DiagStackSize(
MF.getFunction(),
Expand Down Expand Up @@ -187,17 +170,14 @@ int SBFRegisterInfo::resolveInternalFrameIndex(
Offset = SBFRegisterInfo::FrameLength - Offset;
if (static_cast<uint64_t>(Offset) < MFI.getStackSize()) {
Function &OffendingFunction = MF.getFunction();
dbgs() << "Error: A function call in method "
dbgs() << "Warning: A function call in method "
<< OffendingFunction.getName()
<< " overwrites values in the frame. Please, decrease stack usage "
<< "or remove parameters from the call.\n\n";

GlobalValue::LinkageTypes LinkageType = OffendingFunction.getLinkage();
if (LinkageType != GlobalValue::LinkageTypes::InternalLinkage &&
LinkageType != GlobalValue::LinkageTypes::PrivateLinkage) {
OffendingFunction.setName(OffendingFunction.getName() +
"::call_overflow");
}
OffendingFunction.setName(OffendingFunction.getName() +
"::call_overflow");
OffendingFunction.setLinkage(GlobalValue::LinkageTypes::ExternalLinkage);
}
Offset = -Offset;
} else if (MF.getSubtarget<SBFSubtarget>().getEnableNewCallConvention() &&
Expand Down

0 comments on commit 864ec39

Please sign in to comment.