Update mclinker to 96e60abf286338c8e231b7c990c30c7c4651be0e.

Change-Id: I29a840d11cecc1ed133768b79222f8bae5f4db2d
diff --git a/unittests/ELFReaderTest.cpp b/unittests/ELFReaderTest.cpp
index fe7dd39..ddbc6d5 100644
--- a/unittests/ELFReaderTest.cpp
+++ b/unittests/ELFReaderTest.cpp
@@ -32,10 +32,11 @@
   m_pConfig->targets().setBitClass( 64 );
   Relocation::SetUp( *m_pConfig );
 
+  m_pScript = new LinkerScript();
   m_pInfo = new X86_64GNUInfo( m_pConfig->targets().triple() );
   m_pLDBackend = new X86_64GNULDBackend( *m_pConfig, m_pInfo );
   m_pELFReader = new ELFReader<64, true>( *m_pLDBackend );
-  m_pModule = new Module();
+  m_pModule = new Module(*m_pScript);
   m_pIRBuilder = new IRBuilder( *m_pModule, *m_pConfig);
   m_pELFObjReader = new ELFObjectReader(*m_pLDBackend,
                                         *m_pIRBuilder,
@@ -48,6 +49,7 @@
   delete m_pConfig;
   delete m_pLDBackend;
   delete m_pELFReader;
+  delete m_pScript;
   delete m_pModule;
   delete m_pIRBuilder;
   delete m_pELFObjReader;
diff --git a/unittests/ELFReaderTest.h b/unittests/ELFReaderTest.h
index c977cfb..58ec470 100644
--- a/unittests/ELFReaderTest.h
+++ b/unittests/ELFReaderTest.h
@@ -11,6 +11,7 @@
 
 #include <gtest.h>
 #include <mcld/LinkerConfig.h>
+#include <mcld/LinkerScript.h>
 #include <mcld/LD/ELFReaderIf.h>
 #include <mcld/LD/ELFReader.h>
 #include <mcld/LD/ELFObjectReader.h>
@@ -40,14 +41,15 @@
   virtual void TearDown();
 
 protected:
-  mcld::Input *m_pInput;
-  mcld::LinkerConfig *m_pConfig;
-  mcld::GNUInfo *m_pInfo;
-  mcld::GNULDBackend *m_pLDBackend;
-  mcld::ELFReaderIF *m_pELFReader;
-  mcld::Module *m_pModule;
-  mcld::IRBuilder *m_pIRBuilder;
-  mcld::ELFObjectReader *m_pELFObjReader;
+  mcld::Input* m_pInput;
+  mcld::LinkerConfig* m_pConfig;
+  mcld::LinkerScript* m_pScript;
+  mcld::GNUInfo* m_pInfo;
+  mcld::GNULDBackend* m_pLDBackend;
+  mcld::ELFReaderIF* m_pELFReader;
+  mcld::Module* m_pModule;
+  mcld::IRBuilder* m_pIRBuilder;
+  mcld::ELFObjectReader* m_pELFObjReader;
 };
 
 } // namespace of mcldtest
diff --git a/unittests/LEB128Test.cpp b/unittests/LEB128Test.cpp
index e8083b1..b310262 100644
--- a/unittests/LEB128Test.cpp
+++ b/unittests/LEB128Test.cpp
@@ -9,6 +9,7 @@
 #include <mcld/Support/LEB128.h>
 #include "LEB128Test.h"
 
+#include <mcld/Support/SystemUtils.h>
 #include <ctime>
 #include <cstdlib>
 
@@ -20,7 +21,7 @@
 LEB128Test::LEB128Test()
 {
 	// Initialize the seed for random number generator using during the tests.
-  ::srandom(::time(NULL));
+  sys::SetRandomSeed(::time(NULL));
 }
 
 // Destructor can do clean-up work that doesn't throw exceptions here.
@@ -459,7 +460,7 @@
   leb128::ByteType buffer[9];
 
   for (int i = 0; i < 20; i++) {
-    unsigned long int value = random();
+    unsigned long int value = sys::GetRandomNum();
     uint64_t value2 = value * value;
     int64_t value3 = value * value;
     leb128::ByteType *result;
diff --git a/unittests/LinkerTest.cpp b/unittests/LinkerTest.cpp
index ab439cb..16c6448 100644
--- a/unittests/LinkerTest.cpp
+++ b/unittests/LinkerTest.cpp
@@ -51,12 +51,12 @@
 
   Initialize();
   LinkerConfig config("arm-none-linux-gnueabi");
-
-  Module module("test");
+  LinkerScript script;
+  Module module("test", script);
   config.setCodeGenType(LinkerConfig::DynObj);
 
   Linker linker;
-  linker.config(config);
+  linker.emulate(script, config);
 
   IRBuilder builder(module, config);
   // create inputs here
@@ -80,6 +80,7 @@
 
   Initialize();
   Linker linker;
+  LinkerScript script;
 
   ///< --mtriple="armv7-none-linux-gnueabi"
   LinkerConfig config("armv7-none-linux-gnueabi");
@@ -87,17 +88,17 @@
   /// -L=${TOPDIR}/test/libs/ARM/Android/android-14
   Path search_dir(TOPDIR);
   search_dir.append("test/libs/ARM/Android/android-14");
-  config.options().directories().insert(search_dir);
+  script.directories().insert(search_dir);
 
   /// To configure linker before setting options. Linker::config sets up
   /// default target-dependent configuration to LinkerConfig.
-  linker.config(config);
+  linker.emulate(script, config);
 
   config.setCodeGenType(LinkerConfig::DynObj);  ///< --shared
   config.options().setSOName("libplasma.so");   ///< --soname=libplasma.so
   config.options().setBsymbolic();              ///< -Bsymbolic
 
-  Module module("libplasma.so");
+  Module module("libplasma.so", script);
   IRBuilder builder(module, config);
 
   /// ${TOPDIR}/test/libs/ARM/Android/android-14/crtbegin_so.o
@@ -141,20 +142,21 @@
   ///< --mtriple="armv7-none-linux-gnueabi"
   LinkerConfig config1("armv7-none-linux-gnueabi");
 
+  LinkerScript script1;
   /// -L=${TOPDIR}/test/libs/ARM/Android/android-14
   Path search_dir(TOPDIR);
   search_dir.append("test/libs/ARM/Android/android-14");
-  config1.options().directories().insert(search_dir);
+  script1.directories().insert(search_dir);
 
   /// To configure linker before setting options. Linker::config sets up
   /// default target-dependent configuration to LinkerConfig.
-  linker.config(config1);
+  linker.emulate(script1, config1);
 
   config1.setCodeGenType(LinkerConfig::DynObj);  ///< --shared
   config1.options().setSOName("libplasma.once.so");   ///< --soname=libplasma.twice.so
   config1.options().setBsymbolic(false);              ///< -Bsymbolic
 
-  Module module1("libplasma.once.so");
+  Module module1("libplasma.once.so", script1);
   IRBuilder builder1(module1, config1);
 
   /// ${TOPDIR}/test/libs/ARM/Android/android-14/crtbegin_so.o
@@ -191,18 +193,19 @@
   ///< --mtriple="armv7-none-linux-gnueabi"
   LinkerConfig config2("armv7-none-linux-gnueabi");
 
+  LinkerScript script2;
   /// -L=${TOPDIR}/test/libs/ARM/Android/android-14
-  config2.options().directories().insert(search_dir);
+  script2.directories().insert(search_dir);
 
   /// To configure linker before setting options. Linker::config sets up
   /// default target-dependent configuration to LinkerConfig.
-  linker.config(config2);
+  linker.emulate(script2, config2);
 
   config2.setCodeGenType(LinkerConfig::DynObj);  ///< --shared
   config2.options().setSOName("libplasma.twice.so");   ///< --soname=libplasma.twice.exe
   config2.options().setBsymbolic();              ///< -Bsymbolic
 
-  Module module2("libplasma.so");
+  Module module2("libplasma.so", script2);
   IRBuilder builder2(module2, config2);
 
   /// ${TOPDIR}/test/libs/ARM/Android/android-14/crtbegin_so.o
@@ -236,20 +239,21 @@
   ///< --mtriple="armv7-none-linux-gnueabi"
   LinkerConfig config1("armv7-none-linux-gnueabi");
 
+  LinkerScript script1;
   /// -L=${TOPDIR}/test/libs/ARM/Android/android-14
   Path search_dir(TOPDIR);
   search_dir.append("test/libs/ARM/Android/android-14");
-  config1.options().directories().insert(search_dir);
+  script1.directories().insert(search_dir);
 
   /// To configure linker before setting options. Linker::config sets up
   /// default target-dependent configuration to LinkerConfig.
-  linker.config(config1);
+  linker.emulate(script1, config1);
 
   config1.setCodeGenType(LinkerConfig::DynObj);  ///< --shared
   config1.options().setSOName("libplasma.once.so");   ///< --soname=libplasma.twice.so
   config1.options().setBsymbolic(false);              ///< -Bsymbolic
 
-  Module module1("libplasma.once.so");
+  Module module1("libplasma.once.so", script1);
   IRBuilder *builder1 = new IRBuilder(module1, config1);
 
   /// ${TOPDIR}/test/libs/ARM/Android/android-14/crtbegin_so.o
@@ -291,18 +295,19 @@
   ///< --mtriple="armv7-none-linux-gnueabi"
   LinkerConfig config2("armv7-none-linux-gnueabi");
 
+  LinkerScript script2;
   /// -L=${TOPDIR}/test/libs/ARM/Android/android-14
-  config2.options().directories().insert(search_dir);
+  script2.directories().insert(search_dir);
 
   /// To configure linker before setting options. Linker::config sets up
   /// default target-dependent configuration to LinkerConfig.
-  linker.config(config2);
+  linker.emulate(script2, config2);
 
   config2.setCodeGenType(LinkerConfig::DynObj);  ///< --shared
   config2.options().setSOName("libplasma.twice.so");   ///< --soname=libplasma.twice.exe
   config2.options().setBsymbolic();              ///< -Bsymbolic
 
-  Module module2("libplasma.so");
+  Module module2("libplasma.so", script2);
   IRBuilder* builder2 = new IRBuilder(module2, config2);
 
   /// ${TOPDIR}/test/libs/ARM/Android/android-14/crtbegin_so.o
@@ -337,15 +342,16 @@
 
   ///< --mtriple="armv7-none-linux-gnueabi"
   LinkerConfig config("armv7-none-linux-gnueabi");
+  LinkerScript script;
 
   /// To configure linker before setting options. Linker::config sets up
   /// default target-dependent configuration to LinkerConfig.
-  linker.config(config);
+  linker.emulate(script, config);
 
   config.setCodeGenType(LinkerConfig::DynObj);  ///< --shared
   config.options().setSOName("libgotplt.so");   ///< --soname=libgotplt.so
 
-  Module module;
+  Module module(script);
   IRBuilder builder(module, config);
 
   Path gotplt_o(TOPDIR);
diff --git a/unittests/PathTest.cpp b/unittests/PathTest.cpp
index 2a44368..1a73de2 100644
--- a/unittests/PathTest.cpp
+++ b/unittests/PathTest.cpp
@@ -43,7 +43,8 @@
 // Testcases
 //
 TEST_F( PathTest, should_exist ) {
-  const std::string root = "/etc/hosts";
+  std::string root(TOPDIR);
+  root += "/test/lit.cfg";
   m_pTestee->assign(root);
   EXPECT_TRUE(exists(*m_pTestee));
 
@@ -63,7 +64,6 @@
 }
 
 TEST_F( PathTest, should_is_directory ) {
-//  const std::string root = "/proj/mtk03931/temp/pndk-luba/../";
   const std::string root = "../././..";
   m_pTestee->assign(root);
   EXPECT_TRUE(exists(*m_pTestee));
@@ -122,15 +122,15 @@
   delete m_pTestee;
   m_pTestee = new Path("aa/");
   m_pTestee->append("/aaa");
-  EXPECT_TRUE(m_pTestee->string()=="aa/aaa");
+  EXPECT_TRUE(m_pTestee->native()=="aa/aaa");
   delete m_pTestee;
   m_pTestee = new Path("aa");
   m_pTestee->append("/aaa");
-  EXPECT_TRUE(m_pTestee->string()=="aa/aaa");
+  EXPECT_TRUE(m_pTestee->native()=="aa/aaa");
   delete m_pTestee;
   m_pTestee = new Path("aa");
   m_pTestee->append("aaa");
-  EXPECT_TRUE(m_pTestee->string()=="aa/aaa");
+  EXPECT_TRUE(m_pTestee->native()=="aa/aaa");
 }
 
 TEST_F( PathTest, should_become_generic_string ) {
diff --git a/unittests/SymbolCategoryTest.cpp b/unittests/SymbolCategoryTest.cpp
index fae146b..f1de1d7 100644
--- a/unittests/SymbolCategoryTest.cpp
+++ b/unittests/SymbolCategoryTest.cpp
@@ -129,7 +129,7 @@
   ++sym;
   ASSERT_STREQ("e", (*sym)->name());
 
-  m_pTestee->changeLocalToDynamic(*bb);
+  m_pTestee->changeToDynamic(*bb);
 
   sym = m_pTestee->begin();
   ASSERT_STREQ("c", (*sym)->name());