}
/* Add it to the list. */
- auto &new_solib = sos.emplace_back ();
+ auto &new_solib = sos.emplace_back (solib_aix_so_ops);
new_solib.original_name = so_name;
new_solib.name = so_name;
new_solib.lm_info = std::make_unique<lm_info_aix> (info);
break;
/* Create and fill the new struct solib element. */
- auto &newobj = sos.emplace_back ();
+ auto &newobj = sos.emplace_back (darwin_so_ops);
auto li = std::make_unique<lm_info_darwin> ();
break;
}
- auto &sop = sos.emplace_back ();
+ auto &sop = sos.emplace_back (dsbt_so_ops);
auto li = std::make_unique<lm_info_dsbt> ();
li->map = loadmap;
/* Fetch the name. */
break;
}
- auto &sop = sos.emplace_back ();
+ auto &sop = sos.emplace_back (frv_so_ops);
auto li = std::make_unique<lm_info_frv> ();
li->map = loadmap;
li->got_value = got_addr;
for (const rocm_so &so : sos)
{
- auto &newobj = dst.emplace_back ();
+ auto &newobj = dst.emplace_back (rocm_solib_ops);
newobj.lm_info = std::make_unique<lm_info_svr4> (*so.lm_info);
newobj.name = so.name;
for (const svr4_so &so : sos)
{
- auto &newobj = dst.emplace_back ();
+ auto &newobj = dst.emplace_back (svr4_so_ops);
newobj.name = so.name;
newobj.original_name = so.name;
li->l_addr_p = 1;
owning_intrusive_list<solib> sos;
- auto &newobj = sos.emplace_back ();
+ auto &newobj = sos.emplace_back (svr4_so_ops);
newobj.lm_info = std::move (li);
newobj.name = info->debug_loader_name;
/* Build a struct solib for each entry on the list. */
for (lm_info_target_up &info : library_list)
{
- auto &new_solib = sos.emplace_back ();
+ auto &new_solib = sos.emplace_back (solib_target_so_ops);
/* We don't need a copy of the name in INFO anymore. */
new_solib.name = std::move (info->name);
using lm_info_up = std::unique_ptr<lm_info>;
+struct solib_ops;
+
struct solib : intrusive_list_node<solib>
{
+ /* Constructor
+
+ OPS is the solib_ops implementation providing this solib. */
+ explicit solib (const solib_ops &ops) : m_ops (&ops) {}
+
+ /* Return the solib_ops implementation providing this solib. */
+ const solib_ops &ops () const
+ { return *m_ops; }
+
/* Free symbol-file related contents of SO and reset for possible reloading
of SO. If we have opened a BFD for SO, close it. If we have placed SO's
sections in some target's section table, the caller is responsible for
that supports outputting multiple segments once the related code
supports them. */
CORE_ADDR addr_low = 0, addr_high = 0;
+
+private:
+ /* The solib_ops responsible for this solib. */
+ const solib_ops *m_ops;
};
/* A unique pointer to an solib. */