summaryrefslogtreecommitdiff
path: root/usr/src/cmd/sgs/liblddbg/common/files.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/sgs/liblddbg/common/files.c')
-rw-r--r--usr/src/cmd/sgs/liblddbg/common/files.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/usr/src/cmd/sgs/liblddbg/common/files.c b/usr/src/cmd/sgs/liblddbg/common/files.c
index f91dbef0ee..22e5314830 100644
--- a/usr/src/cmd/sgs/liblddbg/common/files.c
+++ b/usr/src/cmd/sgs/liblddbg/common/files.c
@@ -347,16 +347,29 @@ Dbg_file_bindings(Rt_map *lmp, int flag)
}
void
-Dbg_file_dlopen(Rt_map *clmp, const char *name, int mode)
+Dbg_file_dlopen(Rt_map *clmp, const char *name, int *in_nfavl, int mode)
{
Conv_dl_mode_buf_t dl_mode_buf;
Lm_list *lml = LIST(clmp);
+ const char *retry;
if (DBG_NOTCLASS(DBG_C_FILES))
return;
+ /*
+ * The core functionality of dlopen() can be called twice. The first
+ * attempt can be affected by path names that exist in the "not-found"
+ * AVL tree. Should a "not-found" path name be found, a second attempt
+ * is made to locate the required file (in_nfavl is NULL). This fall-
+ * back provides for file system changes while a process executes.
+ */
+ if (in_nfavl)
+ retry = MSG_ORIG(MSG_STR_EMPTY);
+ else
+ retry = MSG_INTL(MSG_STR_RETRY);
+
Dbg_util_nl(lml, DBG_NL_STD);
- dbg_print(lml, MSG_INTL(MSG_FIL_DLOPEN), name, NAME(clmp),
+ dbg_print(lml, MSG_INTL(MSG_FIL_DLOPEN), name, NAME(clmp), retry,
conv_dl_mode(mode, 1, &dl_mode_buf));
}