Date: Tue, 22 Jan 2002 23:20:01 -0800 (PST) From: "Alexey V. Neyman" <alex.neyman@auriga.ru> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/12280: LD_IGNORE_MISSING_OBJECTS not honored for ELF binarie Message-ID: <200201230720.g0N7K1j67300@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/12280; it has been noted by GNATS. From: "Alexey V. Neyman" <alex.neyman@auriga.ru> To: bug-followup@freebsd.org Cc: Subject: Re: bin/12280: LD_IGNORE_MISSING_OBJECTS not honored for ELF binarie Date: Wed, 23 Jan 2002 10:13:53 +0300 FWIW, here is the patch. (man page changes are mostly taken from rtld.1aout man page) diff -urN /usr/src/libexec/rtld-elf/rtld.1 rtld-elf/rtld.1 --- /usr/src/libexec/rtld-elf/rtld.1 Thu Aug 16 14:44:20 2001 +++ rtld-elf/rtld.1 Wed Jan 23 09:54:07 2002 @@ -94,6 +94,33 @@ .Ev LD_BIND_NOW increases the start-up time of a program, but it avoids run-time surprises caused by unexpectedly undefined functions. +.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. 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 are met: +.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_SUPPRESS_WARNINGS +When set to a nonempty string, +.Nm +will not emit warning messages about missing shared objects if +.Ev LD_IGNORE_MISSING_OBJECTS +is also set to non-empty string. .It Ev LD_TRACE_LOADED_OBJECTS When set to a nonempty string, causes .Nm diff -urN /usr/src/libexec/rtld-elf/rtld.c rtld-elf/rtld.c --- /usr/src/libexec/rtld-elf/rtld.c Fri May 11 04:57:20 2001 +++ rtld-elf/rtld.c Wed Jan 23 09:23:17 2002 @@ -131,6 +131,8 @@ static char *ld_preload; /* Environment variable for libraries to load first */ static char *ld_tracing; /* Called from ldd to print libs */ +static char *ld_ignore_missing; /* Do not bail out if an object is not found */ +static char *ld_suppress_warns; /* Do not give warnings */ static Obj_Entry *obj_list; /* Head of linked list of shared objects */ static Obj_Entry **obj_tail; /* Link field of last object in list */ static Obj_Entry *obj_main; /* The main program shared object */ @@ -287,7 +289,9 @@ ld_debug = getenv("LD_DEBUG"); ld_library_path = getenv("LD_LIBRARY_PATH"); ld_preload = getenv("LD_PRELOAD"); + ld_ignore_missing = getenv("LD_IGNORE_MISSING_OBJECTS"); } + ld_suppress_warns = getenv("LD_SUPPRESS_WARNINGS"); ld_tracing = getenv("LD_TRACE_LOADED_OBJECTS"); if (ld_debug != NULL && *ld_debug != '\0') @@ -1062,8 +1066,15 @@ char *path = find_library(name, obj); needed->obj = NULL; - if (path == NULL && !ld_tracing) - return -1; + if (path == NULL) { + if (ld_ignore_missing != NULL && *ld_ignore_missing != '\0') { + if (ld_suppress_warns == NULL || *ld_suppress_warns == '\0') + warnx("warning: %s", dlerror()); + continue; + } + if (!ld_tracing) + return -1; + } if (path) { needed->obj = load_object(path); -- <-------------------------> ) May the Sun and Water ( Regards, Alexey V. Neyman ) always fall upon you! ( mailto:alex.neyman@auriga.ru <-------------------------> To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200201230720.g0N7K1j67300>