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_;