diff options
author | Carlos O'Donell <carlos_odonell@mentor.com> | 2012-11-29 18:09:12 -0800 |
---|---|---|
committer | Carlos O'Donell <carlos_odonell@mentor.com> | 2012-11-29 18:12:23 -0800 |
commit | c93ec1f091ec0d114e7a33cb1156e2745162eb4a (patch) | |
tree | 940cf699e06081b49376a72d85d428e55a4b2a55 | |
parent | 6355e122f552986a55dca427e9377db435c6e18b (diff) | |
download | glibc-c93ec1f091ec0d114e7a33cb1156e2745162eb4a.tar.gz glibc-c93ec1f091ec0d114e7a33cb1156e2745162eb4a.tar.xz glibc-c93ec1f091ec0d114e7a33cb1156e2745162eb4a.zip |
Warn about unsupported DT_FLAGS_1 flags.
The dynamic loader will now warn about unsupported DT_FLAGS_1 flags when run with LD_DEBUG=files or LD_DEBUG=all.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/get-dynamic-info.h | 12 |
2 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 9611f6cd81..dabb7d13f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-11-29 Carlos O'Donell <carlos@systemhalted.org> + + * elf/get-dynamic-info.h (elf_get_dynamic_info): Warn + for unsupported DF_1_* bits when DL_DEBUG_FILES is set. + 2012-11-29 Mike Frysinger <vapier@gentoo.org> * sysdeps/unix/sysv/linux/clock_getcpuclockid.c (HAS_CPUCLOCK): Delete. diff --git a/elf/get-dynamic-info.h b/elf/get-dynamic-info.h index 9e018de6d2..026f246238 100644 --- a/elf/get-dynamic-info.h +++ b/elf/get-dynamic-info.h @@ -151,8 +151,16 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp) { l->l_flags_1 = info[VERSYMIDX (DT_FLAGS_1)]->d_un.d_val; - /* Only DT_1_SUPPORTED_MASK bits are allowed. */ - assert ((l->l_flags_1 & ~DT_1_SUPPORTED_MASK) == 0); + /* Only DT_1_SUPPORTED_MASK bits are supported, and we would like + to assert this, but we can't. Users have been setting + unsupported DF_1_* flags for a long time and glibc has ignored + them. Therefore to avoid breaking existing applications the + best we can do is add a warning during debugging with the + intent of notifying the user of the problem. */ + if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0) + && l->l_flags_1 & ~DT_1_SUPPORTED_MASK) + _dl_debug_printf ("\nWARNING: Unsupported flag value(s) of 0x%x in DT_FLAGS_1.\n", + l->l_flags_1 & ~DT_1_SUPPORTED_MASK); if (l->l_flags_1 & DF_1_NOW) info[DT_BIND_NOW] = info[VERSYMIDX (DT_FLAGS_1)]; |