X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/39c935d6d5ee86d153f6f7e6a10d723ae7c57f6f..417ed3b671abe3a71fa4106d23d0a432084cc207:/src/mc/inspect/mc_unw.cpp diff --git a/src/mc/inspect/mc_unw.cpp b/src/mc/inspect/mc_unw.cpp index 0685ad78ac..746fb3155d 100644 --- a/src/mc/inspect/mc_unw.cpp +++ b/src/mc/inspect/mc_unw.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2015-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -12,7 +12,7 @@ #include "src/mc/inspect/mc_unw.hpp" #include "src/mc/inspect/Frame.hpp" -#include "src/mc/remote/RemoteSimulation.hpp" +#include "src/mc/remote/RemoteProcess.hpp" #include @@ -25,10 +25,7 @@ typedef register_t greg_t; #include -using simgrid::mc::remote; - -namespace simgrid { -namespace mc { +namespace simgrid::mc { // ***** Implementation @@ -205,25 +202,23 @@ int UnwindContext::get_proc_name(unw_addr_space_t /*as*/, unw_word_t addr, char* // ***** Init -/** Virtual table for our `libunwind` implementation - * - * Stack unwinding on a `simgrid::mc::Process*` (for memory, unwinding information) - * and `ucontext_t` (for processor registers). - * - * It works with the `simgrid::mc::UnwindContext` context. - * - * Use nullptr as access_fpreg and resume, as we don't need them. - */ -unw_accessors_t UnwindContext::accessors = {&find_proc_info, &put_unwind_info, &get_dyn_info_list_addr, - &access_mem, &access_reg, nullptr, - nullptr, &get_proc_name}; - unw_addr_space_t UnwindContext::createUnwindAddressSpace() { - return unw_create_addr_space(&UnwindContext::accessors, BYTE_ORDER); + /** Virtual table for our `libunwind` implementation + * + * Stack unwinding on a `simgrid::mc::Process*` (for memory, unwinding information) + * and `ucontext_t` (for processor registers). + * + * It works with the `simgrid::mc::UnwindContext` context. + * + * Use nullptr as access_fpreg and resume, as we don't need them. + */ + unw_accessors_t accessors = {&find_proc_info, &put_unwind_info, &get_dyn_info_list_addr, &access_mem, &access_reg, + nullptr, nullptr, &get_proc_name}; + return unw_create_addr_space(&accessors, BYTE_ORDER); } -void UnwindContext::initialize(simgrid::mc::RemoteSimulation* process, unw_context_t* c) +void UnwindContext::initialize(simgrid::mc::RemoteProcess* process, unw_context_t* c) { this->address_space_ = process; this->process_ = process; @@ -239,6 +234,12 @@ void UnwindContext::initialize(simgrid::mc::RemoteSimulation* process, unw_conte // Let's ignore this and see what happens: this->unwind_context_.uc_mcontext.fpregs = nullptr; #endif +#elif SIMGRID_PROCESSOR_arm64 +#ifdef __linux__ + // On ARM64, ucontext_t doesn't contain `fpregs` and the FP registers + // are instead held in the `__reserved` field of the struct. It doesn't + // appear anything needs to be done here, although this should be verified +#endif #else // Do we need to do any fixup like this? #error Target CPU type is not handled. @@ -254,5 +255,4 @@ unw_cursor_t UnwindContext::cursor() return cursor; } -} // namespace mc -} // namespace simgrid +} // namespace simgrid::mc