Update ElfWriterMclinker for klp

(cherry picked from commit a6263af9aea65c65744bdd845fed68c4814e9514)

Change-Id: I3eb9fee8afb1ef12aae4c87770882afee637971d
diff --git a/compiler/Android.mk b/compiler/Android.mk
index 4340929..25dfb0a 100644
--- a/compiler/Android.mk
+++ b/compiler/Android.mk
@@ -196,6 +196,34 @@
   LOCAL_SHARED_LIBRARIES += libbcc libbcinfo libLLVM
   ifeq ($(ART_USE_PORTABLE_COMPILER),true)
     LOCAL_CFLAGS += -DART_USE_PORTABLE_COMPILER=1
+    ifeq ($$(art_target_or_host),target)
+      ifeq ($(TARGET_ARCH),arm)
+        LOCAL_STATIC_LIBRARIES += libmcldARMInfo libmcldARMTarget
+      else # TARGET_ARCH != arm
+      ifeq ($(TARGET_ARCH),x86)
+        LOCAL_STATIC_LIBRARIES += libmcldX86Info libmcldX86Target
+      else # TARGET_ARCH != x86
+      ifeq ($(TARGET_ARCH),x86_64)
+        LOCAL_STATIC_LIBRARIES += libmcldX86Info libmcldX86Target
+      else # TARGET_ARCH != x86_64
+      ifeq ($(TARGET_ARCH),mips)
+        LOCAL_STATIC_LIBRARIES += libmcldMipsInfo libmcldMipsTarget
+      else # TARGET_ARCH != mips
+      ifeq ($(TARGET_ARCH),aarch64)
+         $$(info TODOAArch64: $$(LOCAL_PATH)/Android.mk Add AArch64 specific MCLinker libraries)
+      else # TARGET_ARCH != aarch64
+        $$(error unsupported TARGET_ARCH=$(TARGET_ARCH))
+      endif # TARGET_ARCH != aarch64
+      endif # TARGET_ARCH != mips
+      endif # TARGET_ARCH != x86_64
+      endif # TARGET_ARCH != x86
+      endif # TARGET_ARCH != arm
+    else # host
+      LOCAL_STATIC_LIBRARIES += libmcldARMInfo libmcldARMTarget
+      LOCAL_STATIC_LIBRARIES += libmcldX86Info libmcldX86Target
+      LOCAL_STATIC_LIBRARIES += libmcldMipsInfo libmcldMipsTarget
+    endif
+    LOCAL_STATIC_LIBRARIES += libmcldCore libmcldObject libmcldADT libmcldFragment libmcldTarget libmcldCodeGen libmcldLDVariant libmcldMC libmcldSupport libmcldLD
   endif
 
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES) art/runtime
diff --git a/compiler/elf_writer_mclinker.cc b/compiler/elf_writer_mclinker.cc
index f3fef23..cdfb881 100644
--- a/compiler/elf_writer_mclinker.cc
+++ b/compiler/elf_writer_mclinker.cc
@@ -22,6 +22,7 @@
 #include <mcld/IRBuilder.h>
 #include <mcld/Linker.h>
 #include <mcld/LinkerConfig.h>
+#include <mcld/LinkerScript.h>
 #include <mcld/MC/ZOption.h>
 #include <mcld/Module.h>
 #include <mcld/Support/Path.h>
@@ -142,13 +143,14 @@
   }
 
   // Based on alone::Linker::config
-  module_.reset(new mcld::Module(linker_config_->options().soname()));
+  linker_script_.reset(new mcld::LinkerScript());
+  module_.reset(new mcld::Module(linker_config_->options().soname(), *linker_script_.get()));
   CHECK(module_.get() != NULL);
   ir_builder_.reset(new mcld::IRBuilder(*module_.get(), *linker_config_.get()));
   CHECK(ir_builder_.get() != NULL);
   linker_.reset(new mcld::Linker());
   CHECK(linker_.get() != NULL);
-  linker_->config(*linker_config_.get());
+  linker_->emulate(*linker_script_.get(), *linker_config_.get());
 }
 
 void ElfWriterMclinker::AddOatInput(std::vector<uint8_t>& oat_contents) {
diff --git a/compiler/elf_writer_mclinker.h b/compiler/elf_writer_mclinker.h
index 5da178c..fa7e9ca 100644
--- a/compiler/elf_writer_mclinker.h
+++ b/compiler/elf_writer_mclinker.h
@@ -29,6 +29,7 @@
 class LDSymbol;
 class Linker;
 class LinkerConfig;
+class LinkerScript;
 class Module;
 }  // namespace mcld
 
@@ -74,6 +75,7 @@
 
   // Setup by Init()
   UniquePtr<mcld::LinkerConfig> linker_config_;
+  UniquePtr<mcld::LinkerScript> linker_script_;
   UniquePtr<mcld::Module> module_;
   UniquePtr<mcld::IRBuilder> ir_builder_;
   UniquePtr<mcld::Linker> linker_;
diff --git a/runtime/Android.mk b/runtime/Android.mk
index 353f160..237e930 100644
--- a/runtime/Android.mk
+++ b/runtime/Android.mk
@@ -236,8 +236,8 @@
 $(error unsupported TARGET_ARCH=$(TARGET_ARCH))
 endif # TARGET_ARCH != aarch64
 endif # TARGET_ARCH != mips
-endif # TARGET_ARCH != x86
 endif # TARGET_ARCH != x86_64
+endif # TARGET_ARCH != x86
 endif # TARGET_ARCH != arm