diff options
author | Elliott Hughes <enh@google.com> | 2013-06-18 13:27:16 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-06-18 13:27:16 -0700 |
commit | 45ef218bde353df455062aa3c9a9f84ffed769fc (patch) | |
tree | f5a7349539839abef213f64ad7e75b976afa4d33 /linker | |
parent | e421bd71c32e35b8f39f2e51f2d534d2f21f139f (diff) | |
parent | 6807af773f862750efb6860e00402580a5f463f3 (diff) | |
download | bionic-45ef218bde353df455062aa3c9a9f84ffed769fc.zip bionic-45ef218bde353df455062aa3c9a9f84ffed769fc.tar.gz bionic-45ef218bde353df455062aa3c9a9f84ffed769fc.tar.bz2 |
am 6807af77: Merge "Make LD_PRELOAD failures just warnings."
* commit '6807af773f862750efb6860e00402580a5f463f3':
Make LD_PRELOAD failures just warnings.
Diffstat (limited to 'linker')
-rw-r--r-- | linker/linker.cpp | 15 | ||||
-rw-r--r-- | linker/linker.h | 11 |
2 files changed, 18 insertions, 8 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp index 80dc624..c53d52f 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1492,18 +1492,19 @@ static bool soinfo_link_image(soinfo* si) { return false; } - /* if this is the main executable, then load all of the preloads now */ + // If this is the main executable, then load all of the libraries from LD_PRELOAD now. if (si->flags & FLAG_EXE) { memset(gLdPreloads, 0, sizeof(gLdPreloads)); + size_t preload_count = 0; for (size_t i = 0; gLdPreloadNames[i] != NULL; i++) { soinfo* lsi = find_library(gLdPreloadNames[i]); - if (lsi == NULL) { - strlcpy(tmp_err_buf, linker_get_error_buffer(), sizeof(tmp_err_buf)); - DL_ERR("could not load library \"%s\" needed by \"%s\"; caused by %s", - gLdPreloadNames[i], si->name, tmp_err_buf); - return false; + if (lsi != NULL) { + gLdPreloads[preload_count++] = lsi; + } else { + // As with glibc, failure to load an LD_PRELOAD library is just a warning. + DL_WARN("could not load library \"%s\" from LD_PRELOAD for \"%s\"; caused by %s", + gLdPreloadNames[i], si->name, linker_get_error_buffer()); } - gLdPreloads[i] = lsi; } } diff --git a/linker/linker.h b/linker/linker.h index 61d623a..200a682 100644 --- a/linker/linker.h +++ b/linker/linker.h @@ -43,7 +43,16 @@ __libc_format_buffer(linker_get_error_buffer(), linker_get_error_buffer_size(), fmt, ##x); \ /* If LD_DEBUG is set high enough, log every dlerror(3) message. */ \ DEBUG("%s\n", linker_get_error_buffer()); \ - } while(0) + } while (false) + +#define DL_WARN(fmt, x...) \ + do { \ + __libc_format_log(ANDROID_LOG_WARN, "linker", fmt, ##x); \ + __libc_format_fd(2, "WARNING: linker: "); \ + __libc_format_fd(2, fmt, ##x); \ + __libc_format_fd(2, "\n"); \ + } while (false) + // Returns the address of the page containing address 'x'. #define PAGE_START(x) ((x) & PAGE_MASK) |