Please use GitHub pull requests for new patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Transforms/Utils/ASanStackFrameLayout.cpp
Show First 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | for (size_t i = 0; i < NumVars; i++) { | ||||
size_t Size = Vars[i].Size; | size_t Size = Vars[i].Size; | ||||
assert((Alignment & (Alignment - 1)) == 0); | assert((Alignment & (Alignment - 1)) == 0); | ||||
assert(Layout.FrameAlignment >= Alignment); | assert(Layout.FrameAlignment >= Alignment); | ||||
assert((Offset % Alignment) == 0); | assert((Offset % Alignment) == 0); | ||||
assert(Size > 0); | assert(Size > 0); | ||||
size_t NextAlignment = IsLast ? Granularity | size_t NextAlignment = IsLast ? Granularity | ||||
: std::max(Granularity, Vars[i + 1].Alignment); | : std::max(Granularity, Vars[i + 1].Alignment); | ||||
size_t SizeWithRedzone = VarAndRedzoneSize(Size, NextAlignment); | size_t SizeWithRedzone = VarAndRedzoneSize(Size, NextAlignment); | ||||
// Add a sentinel to end of stack. | |||||
if (IsLast && SizeWithRedzone == Granularity) | |||||
SizeWithRedzone += Granularity; | |||||
Vars[i].Offset = Offset; | Vars[i].Offset = Offset; | ||||
Offset += SizeWithRedzone; | Offset += SizeWithRedzone; | ||||
} | } | ||||
if (Offset % MinHeaderSize) { | if (Offset % MinHeaderSize) { | ||||
Offset += MinHeaderSize - (Offset % MinHeaderSize); | Offset += MinHeaderSize - (Offset % MinHeaderSize); | ||||
} | } | ||||
Layout.FrameSize = Offset; | Layout.FrameSize = Offset; | ||||
assert((Layout.FrameSize % MinHeaderSize) == 0); | assert((Layout.FrameSize % MinHeaderSize) == 0); | ||||
▲ Show 20 Lines • Show All 59 Lines • Show Last 20 Lines |