diff options
-rw-r--r-- | rtl-obj.c | 2 | ||||
-rw-r--r-- | rtl-obj.h | 2 | ||||
-rw-r--r-- | rtl.c | 19 |
3 files changed, 17 insertions, 6 deletions
@@ -119,7 +119,7 @@ bool rtems_rtl_parse_name (const char* name, const char** aname, const char** oname, - int* ooffset) + off_t* ooffset) { const char* laname = NULL; const char* loname = NULL; @@ -294,7 +294,7 @@ bool rtems_rtl_obj_unresolved (rtems_rtl_obj_t* obj); bool rtems_rtl_parse_name (const char* name, const char** aname, const char** oname, - int* ooffset); + off_t* ooffset); /** * Load the object file. @@ -378,7 +378,7 @@ rtems_rtl_find_obj (const char* name) rtems_rtl_obj_t* found = NULL; const char* aname = NULL; const char* oname = NULL; - int ooffset; + off_t ooffset; if (!rtems_rtl_parse_name (name, &aname, &oname, &ooffset)) return NULL; @@ -388,12 +388,23 @@ rtems_rtl_find_obj (const char* name) while (!rtems_chain_is_tail (&rtl->objects, node)) { rtems_rtl_obj_t* obj = (rtems_rtl_obj_t*) node; - if (rtems_rtl_match_name (obj, name)) - return obj; + if ((aname == NULL && strcmp (obj->oname, oname) == 0) || + (aname != NULL && + strcmp (obj->aname, aname) == 0 && strcmp (obj->oname, oname) == 0)) + { + found = obj; + break; + } node = rtems_chain_next (node); } - return NULL; + if (!aname) + rtems_rtl_alloc_del(RTEMS_RTL_ALLOC_OBJECT, (void*) aname); + + if (!oname) + rtems_rtl_alloc_del(RTEMS_RTL_ALLOC_OBJECT, (void*) oname); + + return found; } rtems_rtl_obj_t* |