* elf/rtld.c: Define _dl_bind_not variable.
(process_envvars): Recognize LD_BIND_NOT and set _dl_bind_not.
* elf/dl-support.c: Likewise.
* sysdeps/generic/ldsodefs.h: Declare _dl_bind_not.
* elf/dl-runtime.c (fixup): Don't remember looked up value if
_dl_bind_not.
(profile_fixup): Likewise.
2000-07-20 Ulrich Drepper <drepper@redhat.com>
+ * elf/rtld.c: Define _dl_bind_not variable.
+ (process_envvars): Recognize LD_BIND_NOT and set _dl_bind_not.
+ * elf/dl-support.c: Likewise.
+ * sysdeps/generic/ldsodefs.h: Declare _dl_bind_not.
+ * elf/dl-runtime.c (fixup): Don't remember looked up value if
+ _dl_bind_not.
+ (profile_fixup): Likewise.
+
* libio/Makefile (routines): Add fwide.
* libio/iofwide.c (_IO_fwide): Remove locking. This is done in
fwide now. Internal calls to _IO_fwide must do locking themselves
value = elf_machine_plt_value (l, reloc, value);
/* Finally, fix up the plt itself. */
+ if (__builtin_expect (_dl_bind_not, 0))
+ return value;
+
return elf_machine_fixup_plt (l, result, reloc, rel_addr, value);
}
#endif
value = elf_machine_plt_value (l, reloc, value);
/* Store the result for later runs. */
- *resultp = value;
+ if (__builtin_expect (! _dl_bind_not, 1))
+ *resultp = value;
}
(*mcount_fct) (retaddr, value);
/* Path where the binary is found. */
const char *_dl_origin_path;
+/* Nonzero if runtime lookup should not update the .got/.plt. */
+int _dl_bind_not;
+
/* Initially empty list of loaded objects. */
struct link_map *_dl_loaded;
_dl_lazy = *(getenv ("LD_BIND_NOW") ?: "") == '\0';
+ _dl_bind_not = *(getenv ("LD_BIND_NOT") ?: "") != '\0';
+
_dl_dynamic_weak = *(getenv ("LD_DYNAMIC_WEAK") ?: "") == '\0';
#ifdef DL_PLATFORM_INIT
const char *_dl_inhibit_rpath; /* RPATH values which should be
ignored. */
const char *_dl_origin_path;
+int _dl_bind_not;
/* This is a pointer to the map for the main object and through it to
all loaded objects. */
case 8:
/* Do we bind early? */
if (memcmp (&envline[3], "BIND_NOW", 8) == 0)
- bind_now = envline[12] != '\0';
+ {
+ bind_now = envline[12] != '\0';
+ break;
+ }
+ if (memcmp (&envline[3], "BIND_NOT", 8) == 0)
+ _dl_bind_not = envline[12] != '\0';
break;
case 9:
/* The array with message we print as a last resort. */
extern const char _dl_out_of_memory[];
+/* Nonzero if runtime lookups should not update the .got/.plt. */
+extern int _dl_bind_not;
+
/* OS-dependent function to open the zero-fill device. */
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */