Add support of architecture specific ld.configs

Prefer architecture specific ld.config.<arch>.txt if it exists;
fall back to default ld.config.txt files if arch-specific one is
not present.

Bug: http://b/64061157
Test: bionic-unit-tests && linker-unit-tests
Change-Id: I83a298a932f2e4af7acb2049a7641fb86908736c
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 8aadd14..59e4bac 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -66,6 +66,7 @@
 #include "linker_reloc_iterators.h"
 #include "linker_utils.h"
 
+#include "android-base/macros.h"
 #include "android-base/strings.h"
 #include "android-base/stringprintf.h"
 #include "ziparchive/zip_archive.h"
@@ -83,6 +84,8 @@
 static LinkerTypeAllocator<android_namespace_t> g_namespace_allocator;
 static LinkerTypeAllocator<LinkedListEntry<android_namespace_t>> g_namespace_list_allocator;
 
+static const char* const kLdConfigArchFilePath = "/system/etc/ld.config." ABI_STRING ".txt";
+
 static const char* const kLdConfigFilePath = "/system/etc/ld.config.txt";
 
 #if defined(__LP64__)
@@ -3467,7 +3470,7 @@
 
   std::string error_msg;
 
-  const char* config_file = kLdConfigFilePath;
+  const char* config_file = file_exists(kLdConfigArchFilePath) ? kLdConfigArchFilePath : kLdConfigFilePath;
 #ifdef USE_LD_CONFIG_FILE
   // This is a debugging/testing only feature. Must not be available on
   // production builds.