@@ -38,9 +38,9 @@ static const uint64_t kMinAlignment = 16;
38
38
// We want to add a full redzone after every variable.
39
39
// The larger the variable Size the larger is the redzone.
40
40
// The resulting frame size is a multiple of Alignment.
41
- static size_t VarAndRedzoneSize (size_t Size, size_t Granularity,
42
- size_t Alignment) {
43
- size_t Res = 0 ;
41
+ static uint64_t VarAndRedzoneSize (uint64_t Size, uint64_t Granularity,
42
+ uint64_t Alignment) {
43
+ uint64_t Res = 0 ;
44
44
if (Size <= 4 ) Res = 16 ;
45
45
else if (Size <= 16 ) Res = 32 ;
46
46
else if (Size <= 128 ) Res = Size + 32 ;
@@ -52,7 +52,7 @@ static size_t VarAndRedzoneSize(size_t Size, size_t Granularity,
52
52
53
53
ASanStackFrameLayout
54
54
ComputeASanStackFrameLayout (SmallVectorImpl<ASanStackVariableDescription> &Vars,
55
- size_t Granularity, size_t MinHeaderSize) {
55
+ uint64_t Granularity, uint64_t MinHeaderSize) {
56
56
assert (Granularity >= 8 && Granularity <= 64 &&
57
57
(Granularity & (Granularity - 1 )) == 0 );
58
58
assert (MinHeaderSize >= 16 && (MinHeaderSize & (MinHeaderSize - 1 )) == 0 &&
@@ -67,22 +67,22 @@ ComputeASanStackFrameLayout(SmallVectorImpl<ASanStackVariableDescription> &Vars,
67
67
ASanStackFrameLayout Layout;
68
68
Layout.Granularity = Granularity;
69
69
Layout.FrameAlignment = std::max (Granularity, Vars[0 ].Alignment );
70
- size_t Offset = std::max ( std::max (MinHeaderSize, Granularity),
71
- Vars[0 ].Alignment );
70
+ uint64_t Offset =
71
+ std::max ( std::max (MinHeaderSize, Granularity), Vars[0 ].Alignment );
72
72
assert ((Offset % Granularity) == 0 );
73
73
for (size_t i = 0 ; i < NumVars; i++) {
74
74
bool IsLast = i == NumVars - 1 ;
75
- size_t Alignment = std::max (Granularity, Vars[i].Alignment );
75
+ uint64_t Alignment = std::max (Granularity, Vars[i].Alignment );
76
76
(void )Alignment; // Used only in asserts.
77
- size_t Size = Vars[i].Size ;
77
+ uint64_t Size = Vars[i].Size ;
78
78
assert ((Alignment & (Alignment - 1 )) == 0 );
79
79
assert (Layout.FrameAlignment >= Alignment);
80
80
assert ((Offset % Alignment) == 0 );
81
81
assert (Size > 0 );
82
- size_t NextAlignment = IsLast ? Granularity
83
- : std::max (Granularity, Vars[i + 1 ].Alignment );
84
- size_t SizeWithRedzone = VarAndRedzoneSize (Size, Granularity,
85
- NextAlignment);
82
+ uint64_t NextAlignment =
83
+ IsLast ? Granularity : std::max (Granularity, Vars[i + 1 ].Alignment );
84
+ uint64_t SizeWithRedzone =
85
+ VarAndRedzoneSize (Size, Granularity, NextAlignment);
86
86
Vars[i].Offset = Offset;
87
87
Offset += SizeWithRedzone;
88
88
}
@@ -118,7 +118,7 @@ GetShadowBytes(const SmallVectorImpl<ASanStackVariableDescription> &Vars,
118
118
assert (Vars.size () > 0 );
119
119
SmallVector<uint8_t , 64 > SB;
120
120
SB.clear ();
121
- const size_t Granularity = Layout.Granularity ;
121
+ const uint64_t Granularity = Layout.Granularity ;
122
122
SB.resize (Vars[0 ].Offset / Granularity, kAsanStackLeftRedzoneMagic );
123
123
for (const auto &Var : Vars) {
124
124
SB.resize (Var.Offset / Granularity, kAsanStackMidRedzoneMagic );
@@ -135,13 +135,13 @@ SmallVector<uint8_t, 64> GetShadowBytesAfterScope(
135
135
const SmallVectorImpl<ASanStackVariableDescription> &Vars,
136
136
const ASanStackFrameLayout &Layout) {
137
137
SmallVector<uint8_t , 64 > SB = GetShadowBytes (Vars, Layout);
138
- const size_t Granularity = Layout.Granularity ;
138
+ const uint64_t Granularity = Layout.Granularity ;
139
139
140
140
for (const auto &Var : Vars) {
141
141
assert (Var.LifetimeSize <= Var.Size );
142
- const size_t LifetimeShadowSize =
142
+ const uint64_t LifetimeShadowSize =
143
143
(Var.LifetimeSize + Granularity - 1 ) / Granularity;
144
- const size_t Offset = Var.Offset / Granularity;
144
+ const uint64_t Offset = Var.Offset / Granularity;
145
145
std::fill (SB.begin () + Offset, SB.begin () + Offset + LifetimeShadowSize,
146
146
kAsanStackUseAfterScopeMagic );
147
147
}
0 commit comments