diff options
Diffstat (limited to 'gdb/solib-rocm.c')
-rw-r--r-- | gdb/solib-rocm.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/gdb/solib-rocm.c b/gdb/solib-rocm.c index 2d26c3c..3b121e6 100644 --- a/gdb/solib-rocm.c +++ b/gdb/solib-rocm.c @@ -160,8 +160,8 @@ struct rocm_solib_ops : public solib_ops { /* HOST_OPS is the host solib_ops that rocm_solib_ops hijacks / wraps, in order to provide support for ROCm code objects. */ - explicit rocm_solib_ops (solib_ops_up host_ops) - : m_host_ops (std::move (host_ops)) + explicit rocm_solib_ops (program_space *pspace, solib_ops_up host_ops) + : solib_ops (pspace), m_host_ops (std::move (host_ops)) { } @@ -211,6 +211,14 @@ struct rocm_solib_ops : public solib_ops std::vector<const solib *> get_solibs_in_ns (int nsid) const override { return m_host_ops->get_solibs_in_ns (nsid); } + void iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const override + { + return m_host_ops->iterate_over_objfiles_in_search_order + (cb, current_objfile); + } + private: owning_intrusive_list<solib> solibs_from_rocm_sos (const std::vector<rocm_so> &sos) const; @@ -272,13 +280,8 @@ rocm_solib_ops::solibs_from_rocm_sos (const std::vector<rocm_so> &sos) const owning_intrusive_list<solib> dst; for (const rocm_so &so : sos) - { - auto &newobj = dst.emplace_back (*this); - - newobj.lm_info = std::make_unique<lm_info_svr4> (*so.lm_info); - newobj.name = so.name; - newobj.original_name = so.unique_name; - } + dst.emplace_back (std::make_unique<lm_info_svr4> (*so.lm_info), + so.unique_name, so.name, *this); return dst; } @@ -503,7 +506,7 @@ rocm_bfd_iovec_open (bfd *abfd, inferior *inferior) protocol_end += protocol_delim.length (); std::transform (protocol.begin (), protocol.end (), protocol.begin (), - [] (unsigned char c) { return std::tolower (c); }); + [] (unsigned char c) { return c_tolower (c); }); std::string_view path; size_t path_end = uri.find_first_of ("#?", protocol_end); @@ -518,8 +521,8 @@ rocm_bfd_iovec_open (bfd *abfd, inferior *inferior) for (size_t i = 0; i < path.length (); ++i) if (path[i] == '%' && i < path.length () - 2 - && std::isxdigit (path[i + 1]) - && std::isxdigit (path[i + 2])) + && c_isxdigit (path[i + 1]) + && c_isxdigit (path[i + 2])) { std::string_view hex_digits = path.substr (i + 1, 2); decoded_path += std::stoi (std::string (hex_digits), 0, 16); @@ -788,7 +791,8 @@ rocm_update_solib_list () gdb::unique_xmalloc_ptr<char> uri_bytes_holder (uri_bytes); - lm_info_svr4_up li = std::make_unique<lm_info_svr4> (); + /* Pass a dummy debug base. */ + lm_info_svr4_up li = std::make_unique<lm_info_svr4> (-1); li->l_addr = l_addr; /* Generate a unique name so that code objects with the same URI but @@ -807,7 +811,8 @@ rocm_solib_target_inferior_created (inferior *inf) get_solib_info (inf)->solib_list.clear (); auto prev_ops = inf->pspace->release_solib_ops (); - auto rocm_ops = std::make_unique<rocm_solib_ops> (std::move (prev_ops)); + auto rocm_ops + = std::make_unique<rocm_solib_ops> (inf->pspace, std::move (prev_ops)); inf->pspace->set_solib_ops (std::move (rocm_ops)); rocm_update_solib_list (); @@ -825,9 +830,11 @@ rocm_solib_target_inferior_execd (inferior *exec_inf, inferior *follow_inf) if (get_amd_dbgapi_process_id (follow_inf) == AMD_DBGAPI_PROCESS_NONE) return; - auto prev_ops = follow_inf->pspace->release_solib_ops (); - auto rocm_ops = std::make_unique<rocm_solib_ops> (std::move (prev_ops)); - follow_inf->pspace->set_solib_ops (std::move (rocm_ops)); + auto pspace = follow_inf->pspace; + auto prev_ops = pspace->release_solib_ops (); + auto rocm_ops + = std::make_unique<rocm_solib_ops> (pspace, std::move (prev_ops)); + pspace->set_solib_ops (std::move (rocm_ops)); get_solib_info (exec_inf)->solib_list.clear (); } |