summaryrefslogtreecommitdiffstats
path: root/lld/ELF/Target.h
diff options
context:
space:
mode:
Diffstat (limited to 'lld/ELF/Target.h')
-rw-r--r--lld/ELF/Target.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h
index 1764963d614..4f310e364e3 100644
--- a/lld/ELF/Target.h
+++ b/lld/ELF/Target.h
@@ -69,8 +69,10 @@ public:
// The function with a prologue starting at Loc was compiled with
// -fsplit-stack and it calls a function compiled without. Adjust the prologue
// to do the right thing. See https://gcc.gnu.org/wiki/SplitStacks.
- virtual bool adjustPrologueForCrossSplitStack(uint8_t *Loc,
- uint8_t *End) const;
+ // The symbols st_other flags are needed on PowerPC64 for determining the
+ // offset to the split-stack prologue.
+ virtual bool adjustPrologueForCrossSplitStack(uint8_t *Loc, uint8_t *End,
+ uint8_t StOther) const;
// Return true if we can reach Dst from Src with Relocation RelocType
virtual bool inBranchRange(RelType Type, uint64_t Src,
@@ -130,6 +132,11 @@ public:
// executable OutputSections.
uint32_t TrapInstr = 0;
+ // If a target needs to rewrite calls to __morestack to instead call
+ // __morestack_non_split when a split-stack enabled caller calls a
+ // non-split-stack callee this will return true. Otherwise returns false.
+ bool NeedsMoreStackNonSplit = true;
+
virtual RelExpr adjustRelaxExpr(RelType Type, const uint8_t *Data,
RelExpr Expr) const;
virtual void relaxGot(uint8_t *Loc, uint64_t Val) const;
OpenPOWER on IntegriCloud