Make it possible for code to query the dynamic linker's default search path.

We're not going to have init(1) set LD_LIBRARY_PATH globally on 64-bit.
This patch makes it possible for libnativehelper to set LD_LIBRARY_PATH
in each Java VM (to support System.loadLibrary) without also hard-coding
the default search path there.

Change-Id: If13961fae976e06dd80d5ef522f31e8b7eb01154
diff --git a/linker/linker.cpp b/linker/linker.cpp
index f4e426d..f58e222 100755
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -50,13 +50,6 @@
 #include "linker_environ.h"
 #include "linker_phdr.h"
 
-/* Assume average path length of 64 and max 8 paths */
-#define LDPATH_BUFSIZE 512
-#define LDPATH_MAX 8
-
-#define LDPRELOAD_BUFSIZE 512
-#define LDPRELOAD_MAX 8
-
 /* >>> IMPORTANT NOTE - READ ME BEFORE MODIFYING <<<
  *
  * Do NOT use malloc() and friends or pthread_*() code here.
@@ -91,7 +84,7 @@
 static soinfo* sonext = &libdl_info;
 static soinfo* somain; /* main process, always the one after libdl_info */
 
-static const char* const gSoPaths[] = {
+static const char* const gDefaultLdPaths[] = {
 #if defined(__LP64__)
   "/vendor/lib64",
   "/system/lib64",
@@ -102,6 +95,12 @@
   NULL
 };
 
+#define LDPATH_BUFSIZE (LDPATH_MAX*64)
+#define LDPATH_MAX 8
+
+#define LDPRELOAD_BUFSIZE (LDPRELOAD_MAX*64)
+#define LDPRELOAD_MAX 8
+
 static char gLdPathsBuffer[LDPATH_BUFSIZE];
 static const char* gLdPaths[LDPATH_MAX + 1];
 
@@ -708,7 +707,7 @@
   // Otherwise we try LD_LIBRARY_PATH first, and fall back to the built-in well known paths.
   int fd = open_library_on_path(name, gLdPaths);
   if (fd == -1) {
-    fd = open_library_on_path(name, gSoPaths);
+    fd = open_library_on_path(name, gDefaultLdPaths);
   }
   return fd;
 }
@@ -828,6 +827,10 @@
   return 0;
 }
 
+void do_android_get_LD_LIBRARY_PATH(char* buffer, size_t buffer_size) {
+  snprintf(buffer, buffer_size, "%s:%s", gDefaultLdPaths[0], gDefaultLdPaths[1]);
+}
+
 void do_android_update_LD_LIBRARY_PATH(const char* ld_library_path) {
   if (!get_AT_SECURE()) {
     parse_LD_LIBRARY_PATH(ld_library_path);