X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/84402e8e2ee2a2d0bef25fdceb0a263ed8b471f6..417ed3b671abe3a71fa4106d23d0a432084cc207:/src/mc/inspect/mc_unw.cpp diff --git a/src/mc/inspect/mc_unw.cpp b/src/mc/inspect/mc_unw.cpp index a51a8fb5ac..746fb3155d 100644 --- a/src/mc/inspect/mc_unw.cpp +++ b/src/mc/inspect/mc_unw.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2020. 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/RemoteClient.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 @@ -172,8 +169,8 @@ void* UnwindContext::get_reg(unw_context_t* context, unw_regnum_t regnum) noexce int UnwindContext::access_reg(unw_addr_space_t /*as*/, unw_regnum_t regnum, unw_word_t* valp, int write, void* arg) noexcept { - simgrid::mc::UnwindContext* as_context = (simgrid::mc::UnwindContext*)arg; - unw_context_t* context = &as_context->unwind_context_; + auto* as_context = static_cast(arg); + unw_context_t* context = &as_context->unwind_context_; if (write) return -UNW_EREADONLYREG; const greg_t* preg = (greg_t*)get_reg(context, regnum); @@ -183,7 +180,7 @@ int UnwindContext::access_reg(unw_addr_space_t /*as*/, unw_regnum_t regnum, unw_ return 0; } -/** Find informations about a function (libunwind method) +/** Find information about a function (libunwind method) */ int UnwindContext::get_proc_name(unw_addr_space_t /*as*/, unw_word_t addr, char* bufp, size_t buf_len, unw_word_t* offp, void* arg) noexcept @@ -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::RemoteClient* 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::RemoteClient* process, unw_context_t // 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