diff options
| -rw-r--r-- | src/core/arm/nce/arm_nce.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/core/arm/nce/arm_nce.cpp b/src/core/arm/nce/arm_nce.cpp index 858c9f0a7..1311e66a9 100644 --- a/src/core/arm/nce/arm_nce.cpp +++ b/src/core/arm/nce/arm_nce.cpp | |||
| @@ -251,21 +251,24 @@ void ArmNce::SetSvcArguments(std::span<const uint64_t, 8> args) { | |||
| 251 | ArmNce::ArmNce(System& system, bool uses_wall_clock, std::size_t core_index) | 251 | ArmNce::ArmNce(System& system, bool uses_wall_clock, std::size_t core_index) |
| 252 | : ArmInterface{uses_wall_clock}, m_system{system}, m_core_index{core_index} { | 252 | : ArmInterface{uses_wall_clock}, m_system{system}, m_core_index{core_index} { |
| 253 | m_guest_ctx.system = &m_system; | 253 | m_guest_ctx.system = &m_system; |
| 254 | |||
| 255 | // Allocate signal stack. | ||
| 256 | m_stack = std::make_unique<u8[]>(StackSize); | ||
| 257 | } | 254 | } |
| 258 | 255 | ||
| 259 | ArmNce::~ArmNce() = default; | 256 | ArmNce::~ArmNce() = default; |
| 260 | 257 | ||
| 261 | void ArmNce::Initialize() { | 258 | void ArmNce::Initialize() { |
| 262 | m_thread_id = gettid(); | 259 | if (m_thread_id == -1) { |
| 260 | m_thread_id = gettid(); | ||
| 261 | } | ||
| 263 | 262 | ||
| 264 | // Configure signal stack. | 263 | // Configure signal stack. |
| 265 | stack_t ss{}; | 264 | if (!m_stack) { |
| 266 | ss.ss_sp = m_stack.get(); | 265 | m_stack = std::make_unique<u8[]>(StackSize); |
| 267 | ss.ss_size = StackSize; | 266 | |
| 268 | sigaltstack(&ss, nullptr); | 267 | stack_t ss{}; |
| 268 | ss.ss_sp = m_stack.get(); | ||
| 269 | ss.ss_size = StackSize; | ||
| 270 | sigaltstack(&ss, nullptr); | ||
| 271 | } | ||
| 269 | 272 | ||
| 270 | // Set up signals. | 273 | // Set up signals. |
| 271 | static std::once_flag flag; | 274 | static std::once_flag flag; |