summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/arm/nce/arm_nce.cpp19
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) {
251ArmNce::ArmNce(System& system, bool uses_wall_clock, std::size_t core_index) 251ArmNce::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
259ArmNce::~ArmNce() = default; 256ArmNce::~ArmNce() = default;
260 257
261void ArmNce::Initialize() { 258void 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;