diff options
author | Chris Johns <chrisj@rtems.org> | 2018-11-20 14:56:11 +1100 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2018-11-22 12:43:31 +1100 |
commit | 03139d5b1cf95d5b2f699e8f56e1f0ba2d7f89e4 (patch) | |
tree | 33fd489eac7497cdebe61560bc43e613b3eef0a9 /cpukit/libdl/rtl-unresolved.c | |
parent | libdl: Reindex unresolved names after removing used records. (diff) | |
download | rtems-03139d5b1cf95d5b2f699e8f56e1f0ba2d7f89e4.tar.bz2 |
libdl: Add object file dependencies to track references
Tracking references lets us manage when an object file can be
unloaded. If an object file has references to it, it cannot be
unloaded.
Modules that depend on each other cannot be unloaded.
Updates #3605
Diffstat (limited to 'cpukit/libdl/rtl-unresolved.c')
-rw-r--r-- | cpukit/libdl/rtl-unresolved.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/cpukit/libdl/rtl-unresolved.c b/cpukit/libdl/rtl-unresolved.c index 4c0f6b3bf1..4992c3bb4a 100644 --- a/cpukit/libdl/rtl-unresolved.c +++ b/cpukit/libdl/rtl-unresolved.c @@ -171,7 +171,7 @@ rtems_rtl_unresolved_resolve_reloc (rtems_rtl_unresolv_rec* rec, rtems_rtl_unresolved_reloc_data* rd; rd = (rtems_rtl_unresolved_reloc_data*) data; - if (rec->rec.reloc.name == rd->name) + if (rec->rec.reloc.name == rd->name && rec->rec.reloc.obj != NULL) { if (rtems_rtl_trace (RTEMS_RTL_TRACE_UNRESOLVED)) printf ("rtl: unresolv: resolve reloc: %s\n", rd->name_rec->rec.name.name); @@ -185,7 +185,7 @@ rtems_rtl_unresolved_resolve_reloc (rtems_rtl_unresolv_rec* rec, * names with a reference count of 0. */ rec->rec.reloc.obj = NULL; - if (rd->name_rec && rd->name_rec->rec.name.refs) + if (rd->name_rec != NULL && rd->name_rec->rec.name.refs > 0) --rd->name_rec->rec.name.refs; } } |