summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gnu/usr.bin/ld/rtld/rtld.126
-rw-r--r--gnu/usr.bin/ld/rtld/rtld.c11
-rw-r--r--libexec/rtld-aout/rtld.126
-rw-r--r--libexec/rtld-aout/rtld.1aout26
-rw-r--r--libexec/rtld-aout/rtld.c11
-rw-r--r--libexec/rtld-elf/rtld.126
6 files changed, 122 insertions, 4 deletions
diff --git a/gnu/usr.bin/ld/rtld/rtld.1 b/gnu/usr.bin/ld/rtld/rtld.1
index 35d1c88..a3734f9 100644
--- a/gnu/usr.bin/ld/rtld/rtld.1
+++ b/gnu/usr.bin/ld/rtld/rtld.1
@@ -106,7 +106,7 @@ library-name, major-version-number, minor-version-number
recognises a number of environment variables that can be used to modify
its behaviour as follows:
.Pp
-.Bl -tag -width "LD_TRACE_LOADED_OBJECTS_PROGNAME"
+.Bl -tag -width "LD_IGNORE_MISSING_OBJECTS"
.It Ev LD_LIBRARY_PATH
A colon separated list of directories, overriding the default search path
for shared libraries.
@@ -134,6 +134,30 @@ object. This is usually indicative of an incorrectly built library.
When set to a nonempty string, no warning messages of any kind are
issued. Normally, a warning is given if satisfactorily versioned
library could not be found.
+.It Ev LD_IGNORE_MISSING_OBJECTS
+When set to a nonempty string, makes it a nonfatal condition if
+one or more required shared objects cannot be loaded.
+Loading and execution proceeds using the objects that are
+available.
+A warning is produced for each missing object, unless the environment
+variable
+.Ev LD_SUPPRESS_WARNINGS
+is set to a nonempty string.
+.Pp
+This is ignored for set-user-ID and set-group-ID programs.
+.Pp
+Missing shared objects can be ignored without errors if all the
+following conditions hold:
+.Bl -bullet
+.It
+They do not supply definitions for any required data symbols.
+.It
+No functions defined by them are called during program execution.
+.It
+The environment variable
+.Ev LD_BIND_NOW
+is unset or is set to the empty string.
+.El
.It Ev LD_TRACE_LOADED_OBJECTS
When set to a nonempty string, causes
.Nm
diff --git a/gnu/usr.bin/ld/rtld/rtld.c b/gnu/usr.bin/ld/rtld/rtld.c
index 6321a11..b14e1fb 100644
--- a/gnu/usr.bin/ld/rtld/rtld.c
+++ b/gnu/usr.bin/ld/rtld/rtld.c
@@ -188,6 +188,7 @@ static int careful;
static int anon_fd = -1;
static char *ld_bind_now;
+static char *ld_ignore_missing_objects;
static char *ld_library_path;
static char *ld_preload;
static char *ld_tracing;
@@ -869,6 +870,15 @@ map_sods(parent)
* "not found" message.
*/
(void)alloc_link_map(NULL, sodp, parent, 0, 0);
+ } else if (ld_ignore_missing_objects) {
+ char *msg;
+ /*
+ * Call __dlerror() even it we're not going to use
+ * the message, in order to clear the saved message.
+ */
+ msg = __dlerror(); /* Should never be NULL */
+ if (!ld_suppress_warnings)
+ warnx("warning: %s", msg);
} else /* Give up */
break;
@@ -2022,6 +2032,7 @@ struct env_scan_tab {
} scan_tab[] = {
L("LD_LIBRARY_PATH=", 1, &ld_library_path)
L("LD_PRELOAD=", 1, &ld_preload)
+ L("LD_IGNORE_MISSING_OBJECTS=", 1, &ld_ignore_missing_objects)
L("LD_TRACE_LOADED_OBJECTS=", 0, &ld_tracing)
L("LD_BIND_NOW=", 0, &ld_bind_now)
L("LD_SUPPRESS_WARNINGS=", 0, &ld_suppress_warnings)
diff --git a/libexec/rtld-aout/rtld.1 b/libexec/rtld-aout/rtld.1
index 35d1c88..a3734f9 100644
--- a/libexec/rtld-aout/rtld.1
+++ b/libexec/rtld-aout/rtld.1
@@ -106,7 +106,7 @@ library-name, major-version-number, minor-version-number
recognises a number of environment variables that can be used to modify
its behaviour as follows:
.Pp
-.Bl -tag -width "LD_TRACE_LOADED_OBJECTS_PROGNAME"
+.Bl -tag -width "LD_IGNORE_MISSING_OBJECTS"
.It Ev LD_LIBRARY_PATH
A colon separated list of directories, overriding the default search path
for shared libraries.
@@ -134,6 +134,30 @@ object. This is usually indicative of an incorrectly built library.
When set to a nonempty string, no warning messages of any kind are
issued. Normally, a warning is given if satisfactorily versioned
library could not be found.
+.It Ev LD_IGNORE_MISSING_OBJECTS
+When set to a nonempty string, makes it a nonfatal condition if
+one or more required shared objects cannot be loaded.
+Loading and execution proceeds using the objects that are
+available.
+A warning is produced for each missing object, unless the environment
+variable
+.Ev LD_SUPPRESS_WARNINGS
+is set to a nonempty string.
+.Pp
+This is ignored for set-user-ID and set-group-ID programs.
+.Pp
+Missing shared objects can be ignored without errors if all the
+following conditions hold:
+.Bl -bullet
+.It
+They do not supply definitions for any required data symbols.
+.It
+No functions defined by them are called during program execution.
+.It
+The environment variable
+.Ev LD_BIND_NOW
+is unset or is set to the empty string.
+.El
.It Ev LD_TRACE_LOADED_OBJECTS
When set to a nonempty string, causes
.Nm
diff --git a/libexec/rtld-aout/rtld.1aout b/libexec/rtld-aout/rtld.1aout
index 35d1c88..a3734f9 100644
--- a/libexec/rtld-aout/rtld.1aout
+++ b/libexec/rtld-aout/rtld.1aout
@@ -106,7 +106,7 @@ library-name, major-version-number, minor-version-number
recognises a number of environment variables that can be used to modify
its behaviour as follows:
.Pp
-.Bl -tag -width "LD_TRACE_LOADED_OBJECTS_PROGNAME"
+.Bl -tag -width "LD_IGNORE_MISSING_OBJECTS"
.It Ev LD_LIBRARY_PATH
A colon separated list of directories, overriding the default search path
for shared libraries.
@@ -134,6 +134,30 @@ object. This is usually indicative of an incorrectly built library.
When set to a nonempty string, no warning messages of any kind are
issued. Normally, a warning is given if satisfactorily versioned
library could not be found.
+.It Ev LD_IGNORE_MISSING_OBJECTS
+When set to a nonempty string, makes it a nonfatal condition if
+one or more required shared objects cannot be loaded.
+Loading and execution proceeds using the objects that are
+available.
+A warning is produced for each missing object, unless the environment
+variable
+.Ev LD_SUPPRESS_WARNINGS
+is set to a nonempty string.
+.Pp
+This is ignored for set-user-ID and set-group-ID programs.
+.Pp
+Missing shared objects can be ignored without errors if all the
+following conditions hold:
+.Bl -bullet
+.It
+They do not supply definitions for any required data symbols.
+.It
+No functions defined by them are called during program execution.
+.It
+The environment variable
+.Ev LD_BIND_NOW
+is unset or is set to the empty string.
+.El
.It Ev LD_TRACE_LOADED_OBJECTS
When set to a nonempty string, causes
.Nm
diff --git a/libexec/rtld-aout/rtld.c b/libexec/rtld-aout/rtld.c
index 6321a11..b14e1fb 100644
--- a/libexec/rtld-aout/rtld.c
+++ b/libexec/rtld-aout/rtld.c
@@ -188,6 +188,7 @@ static int careful;
static int anon_fd = -1;
static char *ld_bind_now;
+static char *ld_ignore_missing_objects;
static char *ld_library_path;
static char *ld_preload;
static char *ld_tracing;
@@ -869,6 +870,15 @@ map_sods(parent)
* "not found" message.
*/
(void)alloc_link_map(NULL, sodp, parent, 0, 0);
+ } else if (ld_ignore_missing_objects) {
+ char *msg;
+ /*
+ * Call __dlerror() even it we're not going to use
+ * the message, in order to clear the saved message.
+ */
+ msg = __dlerror(); /* Should never be NULL */
+ if (!ld_suppress_warnings)
+ warnx("warning: %s", msg);
} else /* Give up */
break;
@@ -2022,6 +2032,7 @@ struct env_scan_tab {
} scan_tab[] = {
L("LD_LIBRARY_PATH=", 1, &ld_library_path)
L("LD_PRELOAD=", 1, &ld_preload)
+ L("LD_IGNORE_MISSING_OBJECTS=", 1, &ld_ignore_missing_objects)
L("LD_TRACE_LOADED_OBJECTS=", 0, &ld_tracing)
L("LD_BIND_NOW=", 0, &ld_bind_now)
L("LD_SUPPRESS_WARNINGS=", 0, &ld_suppress_warnings)
diff --git a/libexec/rtld-elf/rtld.1 b/libexec/rtld-elf/rtld.1
index 35d1c88..a3734f9 100644
--- a/libexec/rtld-elf/rtld.1
+++ b/libexec/rtld-elf/rtld.1
@@ -106,7 +106,7 @@ library-name, major-version-number, minor-version-number
recognises a number of environment variables that can be used to modify
its behaviour as follows:
.Pp
-.Bl -tag -width "LD_TRACE_LOADED_OBJECTS_PROGNAME"
+.Bl -tag -width "LD_IGNORE_MISSING_OBJECTS"
.It Ev LD_LIBRARY_PATH
A colon separated list of directories, overriding the default search path
for shared libraries.
@@ -134,6 +134,30 @@ object. This is usually indicative of an incorrectly built library.
When set to a nonempty string, no warning messages of any kind are
issued. Normally, a warning is given if satisfactorily versioned
library could not be found.
+.It Ev LD_IGNORE_MISSING_OBJECTS
+When set to a nonempty string, makes it a nonfatal condition if
+one or more required shared objects cannot be loaded.
+Loading and execution proceeds using the objects that are
+available.
+A warning is produced for each missing object, unless the environment
+variable
+.Ev LD_SUPPRESS_WARNINGS
+is set to a nonempty string.
+.Pp
+This is ignored for set-user-ID and set-group-ID programs.
+.Pp
+Missing shared objects can be ignored without errors if all the
+following conditions hold:
+.Bl -bullet
+.It
+They do not supply definitions for any required data symbols.
+.It
+No functions defined by them are called during program execution.
+.It
+The environment variable
+.Ev LD_BIND_NOW
+is unset or is set to the empty string.
+.El
.It Ev LD_TRACE_LOADED_OBJECTS
When set to a nonempty string, causes
.Nm
OpenPOWER on IntegriCloud