Skip to content

Commit 8297d15

Browse files
DinoVfacebook-github-bot
authored andcommitted
Use feature flag for shadow frames
Summary: We have one-off ifdef's in a couple of spots to do a version check and then enable the feature. This moves it to a unified top-level definition that's only enabled for 3.10. Reviewed By: martindemello Differential Revision: D77456968 fbshipit-source-id: 8c23edfbf14fd5eed9024ccf5527144cf6508e6e
1 parent a01ca49 commit 8297d15

3 files changed

Lines changed: 11 additions & 21 deletions

File tree

Jit/codegen/frame_asm.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,9 @@
2121
using namespace asmjit;
2222
using namespace jit::hir;
2323

24-
// Use a special define to keep it clear why much code changes in 3.12+
25-
#if PY_VERSION_HEX < 0x030C0000
26-
#define SHADOW_FRAMES 1
27-
#endif
28-
2924
namespace jit::codegen {
3025

31-
#ifdef SHADOW_FRAMES
26+
#ifdef ENABLE_SHADOW_FRAMES
3227

3328
namespace shadow_frame {
3429
// Shadow stack frames appear at the beginning of native frames for jitted
@@ -48,7 +43,7 @@ constexpr x86::Mem getStackTopPtr(x86::Gp tstate_reg) {
4843

4944
} // namespace shadow_frame
5045

51-
#endif // SHADOW_FRAMES
46+
#endif // ENABLE_SHADOW_FRAMES
5247

5348
#if PY_VERSION_HEX >= 0x030C0000
5449

@@ -382,7 +377,7 @@ void FrameAsm::generateLinkFrame(
382377
void FrameAsm::generateUnlinkFrame(
383378
const x86::Gp& tstate_r,
384379
[[maybe_unused]] bool is_generator) {
385-
#ifdef SHADOW_FRAMES
380+
#ifdef ENABLE_SHADOW_FRAMES
386381
// It's safe to use caller saved registers in this function
387382
auto scratch_reg = tstate_r == x86::rsi ? x86::rdx : x86::rsi;
388383
x86::Mem shadow_stack_top_ptr = shadow_frame::getStackTopPtr(tstate_r);
@@ -435,13 +430,13 @@ void FrameAsm::generateUnlinkFrame(
435430
} else {
436431
as_->mov(x86::rax, saved_rax_ptr);
437432
}
438-
#ifdef SHADOW_FRAMES
433+
#ifdef ENABLE_SHADOW_FRAMES
439434
as_->bind(done);
440435
}
441436
#endif
442437
}
443438

444-
#ifdef SHADOW_FRAMES
439+
#ifdef ENABLE_SHADOW_FRAMES
445440
void FrameAsm::linkOnStackShadowFrame(
446441
const x86::Gp& tstate_reg,
447442
const x86::Gp& scratch_reg) {
@@ -494,7 +489,7 @@ int FrameAsm::frameHeaderSize() {
494489
return 0;
495490
}
496491

497-
#if defined(SHADOW_FRAMES)
492+
#if defined(ENABLE_SHADOW_FRAMES)
498493
return sizeof(FrameHeader);
499494
#elif defined(ENABLE_LIGHTWEIGHT_FRAMES)
500495
return sizeof(FrameHeader) + sizeof(PyObject*) * func_->code->co_framesize;

Jit/codegen/gen_asm.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,7 @@ void NativeGenerator::generateFunctionEntry() {
868868
}
869869

870870
void NativeGenerator::setupFrameAndSaveCallerRegisters(
871-
#ifdef SHADOW_FRAMES
871+
#ifdef ENABLE_SHADOW_FRAMES
872872
x86::Gp tstate_reg
873873
#endif
874874
) {
@@ -913,7 +913,7 @@ void NativeGenerator::setupFrameAndSaveCallerRegisters(
913913
as_->sub(x86::rsp, spill_stack);
914914
env_.last_callee_saved_reg_off = spill_stack + saved_regs_size;
915915

916-
#ifdef SHADOW_FRAMES
916+
#ifdef ENABLE_SHADOW_FRAMES
917917
frame_asm_.initializeFrameHeader(tstate_reg, x86::rax);
918918
#endif
919919

@@ -1036,7 +1036,7 @@ void NativeGenerator::generatePrologue(
10361036
as_->bind(native_entry_point);
10371037

10381038
setupFrameAndSaveCallerRegisters(
1039-
#ifdef SHADOW_FRAMES
1039+
#ifdef ENABLE_SHADOW_FRAMES
10401040
x86::r11
10411041
#endif
10421042
);
@@ -1372,7 +1372,7 @@ void NativeGenerator::generateResumeEntry() {
13721372

13731373
generateFunctionEntry();
13741374
setupFrameAndSaveCallerRegisters(
1375-
#ifdef SHADOW_FRAMES
1375+
#ifdef ENABLE_SHADOW_FRAMES
13761376
x86::rcx
13771377
#endif
13781378
);

Jit/codegen/gen_asm.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@
2525
#include <unordered_set>
2626
#include <vector>
2727

28-
// Use a special define to keep it clear why much code changes in 3.12+
29-
#if PY_VERSION_HEX < 0x030C0000
30-
#define SHADOW_FRAMES 1
31-
#endif
32-
3328
namespace jit::codegen {
3429

3530
class NativeGenerator {
@@ -109,7 +104,7 @@ class NativeGenerator {
109104
void generateCode(asmjit::CodeHolder& code);
110105
void generateFunctionEntry();
111106
void setupFrameAndSaveCallerRegisters(
112-
#ifdef SHADOW_FRAMES
107+
#ifdef ENABLE_SHADOW_FRAMES
113108
asmjit::x86::Gp tstate_reg
114109
#endif
115110
);

0 commit comments

Comments
 (0)