Update MCLinker to work with LLVM 3.4.
This corresponds to merging upstream MCLinker with the following SHA:
6dcbf36cdb146d6f175ba2f18a9004753cafeaff
Change-Id: I1bc8c2ce4accc563450bc71ee295a6e47a0c0469
diff --git a/unittests/BinTreeTest.cpp b/unittests/BinTreeTest.cpp
index 5d2cd0a..e436752 100644
--- a/unittests/BinTreeTest.cpp
+++ b/unittests/BinTreeTest.cpp
@@ -124,47 +124,46 @@
TEST_F( BinTreeTest, DFSIterator_BasicTraversal)
{
- int a = 111;
+ int a = 111, b = 10, c = 9, d = 8, e = 7;
BinaryTree<int>::iterator pos = m_pTestee->root();
m_pTestee->join<InputTree::Inclusive>(pos,a);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,10);
- m_pTestee->join<InputTree::Inclusive>(pos,9);
+ m_pTestee->join<InputTree::Positional>(pos,b);
+ m_pTestee->join<InputTree::Inclusive>(pos,c);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,8);
- m_pTestee->join<InputTree::Inclusive>(pos,7);
+ m_pTestee->join<InputTree::Positional>(pos,d);
+ m_pTestee->join<InputTree::Inclusive>(pos,e);
BinaryTree<int>::dfs_iterator dfs_it = m_pTestee->dfs_begin();
BinaryTree<int>::dfs_iterator dfs_end = m_pTestee->dfs_end();
ASSERT_EQ(111, **dfs_it);
++dfs_it;
- ASSERT_EQ(9, **dfs_it);
+ EXPECT_EQ(9, **dfs_it);
++dfs_it;
- ASSERT_EQ(7, **dfs_it);
+ EXPECT_EQ(7, **dfs_it);
++dfs_it;
- ASSERT_EQ(8, **dfs_it);
+ EXPECT_EQ(8, **dfs_it);
++dfs_it;
- ASSERT_EQ(10, **dfs_it);
+ EXPECT_EQ(10, **dfs_it);
++dfs_it;
- ASSERT_TRUE( dfs_it == dfs_end);
- BinaryTree<int>::bfs_iterator bfs_it = m_pTestee->bfs_begin();
- BinaryTree<int>::bfs_iterator bfs_end = m_pTestee->bfs_end();
+ EXPECT_TRUE( dfs_it == dfs_end);
}
TEST_F( BinTreeTest, DFSIterator_RightMostTree)
{
+ int a = 0, b = 1, c = 2, d = 3, e = 4;
BinaryTree<int>::iterator pos = m_pTestee->root();
- m_pTestee->join<InputTree::Inclusive>(pos,0);
+ m_pTestee->join<InputTree::Inclusive>(pos,a);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,1);
+ m_pTestee->join<InputTree::Positional>(pos,b);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Positional>(pos,2);
+ m_pTestee->join<InputTree::Positional>(pos,c);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Positional>(pos,3);
+ m_pTestee->join<InputTree::Positional>(pos,d);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Positional>(pos,4);
+ m_pTestee->join<InputTree::Positional>(pos,e);
BinaryTree<int>::dfs_iterator dfs_it = m_pTestee->dfs_begin();
BinaryTree<int>::dfs_iterator dfs_end = m_pTestee->dfs_end();
@@ -199,16 +198,16 @@
TEST_F( BinTreeTest, BFSIterator_BasicTraversal)
{
- int a = 111;
+ int a = 111, b = 10, c = 9, d = 8, e = 7;
BinaryTree<int>::iterator pos = m_pTestee->root();
m_pTestee->join<InputTree::Inclusive>(pos,a);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,10);
- m_pTestee->join<InputTree::Inclusive>(pos,9);
+ m_pTestee->join<InputTree::Positional>(pos,b);
+ m_pTestee->join<InputTree::Inclusive>(pos,c);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,8);
- m_pTestee->join<InputTree::Inclusive>(pos,7);
+ m_pTestee->join<InputTree::Positional>(pos,d);
+ m_pTestee->join<InputTree::Inclusive>(pos,e);
BinaryTree<int>::bfs_iterator bfs_it = m_pTestee->bfs_begin();
BinaryTree<int>::bfs_iterator bfs_end = m_pTestee->bfs_end();
@@ -230,16 +229,17 @@
TEST_F( BinTreeTest, BFSIterator_RightMostTree)
{
+ int a = 0, b = 1, c = 2, d = 3, e = 4;
BinaryTree<int>::iterator pos = m_pTestee->root();
- m_pTestee->join<InputTree::Inclusive>(pos,0);
+ m_pTestee->join<InputTree::Inclusive>(pos,a);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,1);
+ m_pTestee->join<InputTree::Positional>(pos,b);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Positional>(pos,2);
+ m_pTestee->join<InputTree::Positional>(pos,c);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Positional>(pos,3);
+ m_pTestee->join<InputTree::Positional>(pos,d);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Positional>(pos,4);
+ m_pTestee->join<InputTree::Positional>(pos,e);
BinaryTree<int>::bfs_iterator bfs_it = m_pTestee->bfs_begin();
BinaryTree<int>::bfs_iterator bfs_end = m_pTestee->bfs_end();
@@ -274,17 +274,18 @@
TEST_F( BinTreeTest, TreeIterator)
{
+ int a = 0, b = 1, c = 2, d = 3, e = 4, f = 5;
BinaryTree<int>::iterator pos = m_pTestee->root();
- m_pTestee->join<InputTree::Inclusive>(pos,0);
+ m_pTestee->join<InputTree::Inclusive>(pos,a);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,1);
+ m_pTestee->join<InputTree::Positional>(pos,b);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Inclusive>(pos,2);
- m_pTestee->join<InputTree::Positional>(pos,5);
+ m_pTestee->join<InputTree::Inclusive>(pos,c);
+ m_pTestee->join<InputTree::Positional>(pos,f);
pos.move<InputTree::Inclusive>();
- m_pTestee->join<InputTree::Positional>(pos,3);
+ m_pTestee->join<InputTree::Positional>(pos,d);
pos.move<InputTree::Positional>();
- m_pTestee->join<InputTree::Positional>(pos,4);
+ m_pTestee->join<InputTree::Positional>(pos,e);
BinaryTree<int>::iterator it = m_pTestee->begin();
BinaryTree<int>::iterator end = m_pTestee->end();
diff --git a/unittests/DirIteratorTest.cpp b/unittests/DirIteratorTest.cpp
index f319172..13472ac 100644
--- a/unittests/DirIteratorTest.cpp
+++ b/unittests/DirIteratorTest.cpp
@@ -6,9 +6,9 @@
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
-#include "mcld/Support/Directory.h"
+#include <mcld/Support/Directory.h>
#include "DirIteratorTest.h"
-#include "errno.h"
+#include <errno.h>
using namespace mcld;
using namespace mcld::sys::fs;
diff --git a/unittests/ELFBinaryReaderTest.cpp b/unittests/ELFBinaryReaderTest.cpp
new file mode 100644
index 0000000..7792717
--- /dev/null
+++ b/unittests/ELFBinaryReaderTest.cpp
@@ -0,0 +1,64 @@
+//===- ELFBinaryReaderTest.cpp --------------------------------------------===//
+//
+// The MCLinker Project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#include <mcld/LD/ELFBinaryReader.h>
+#include <mcld/Module.h>
+#include <mcld/LinkerScript.h>
+#include <mcld/LinkerConfig.h>
+#include <mcld/IRBuilder.h>
+#include <mcld/GeneralOptions.h>
+#include <mcld/MC/Input.h>
+
+#include "ELFBinaryReaderTest.h"
+
+using namespace mcld;
+using namespace mcld::test;
+
+
+// Constructor can do set-up work for all test here.
+ELFBinaryReaderTest::ELFBinaryReaderTest()
+{
+}
+
+// Destructor can do clean-up work that doesn't throw exceptions here.
+ELFBinaryReaderTest::~ELFBinaryReaderTest()
+{
+}
+
+// SetUp() will be called immediately before each test.
+void ELFBinaryReaderTest::SetUp()
+{
+}
+
+// TearDown() will be called immediately after each test.
+void ELFBinaryReaderTest::TearDown()
+{
+}
+
+//===----------------------------------------------------------------------===//
+// Testcases
+//===----------------------------------------------------------------------===//
+TEST_F( ELFBinaryReaderTest, is_myformat) {
+ LinkerScript script;
+ Module module("test", script);
+ LinkerConfig config;
+ IRBuilder builder(module, config);
+ ELFBinaryReader *reader = new ELFBinaryReader(builder, config);
+
+ Input input("test.bin");
+
+ bool doContinue = false;
+ config.options().setBinaryInput();
+ ASSERT_TRUE(reader->isMyFormat(input, doContinue));
+
+ config.options().setBinaryInput(false);
+ ASSERT_FALSE(reader->isMyFormat(input, doContinue));
+
+ delete reader;
+}
+
diff --git a/unittests/ELFBinaryReaderTest.h b/unittests/ELFBinaryReaderTest.h
new file mode 100644
index 0000000..a9ea042
--- /dev/null
+++ b/unittests/ELFBinaryReaderTest.h
@@ -0,0 +1,39 @@
+//===- ELFBinaryReaderTest.h ----------------------------------------------===//
+//
+// The MCLinker Project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#ifndef MCLD_ELFBINARYREADER_TEST_H
+#define MCLD_ELFBINARYREADER_TEST_H
+
+#include <gtest.h>
+
+namespace mcld {
+class ELFBinaryReader;
+
+namespace test {
+
+class ELFBinaryReaderTest : public ::testing::Test
+{
+public:
+ // Constructor can do set-up work for all test here.
+ ELFBinaryReaderTest();
+
+ // Destructor can do clean-up work that doesn't throw exceptions here.
+ virtual ~ELFBinaryReaderTest();
+
+ // SetUp() will be called immediately before each test.
+ virtual void SetUp();
+
+ // TearDown() will be called immediately after each test.
+ virtual void TearDown();
+};
+
+} // namespace of test
+} // namespace of mcld
+
+#endif
+
diff --git a/unittests/ELFReaderTest.cpp b/unittests/ELFReaderTest.cpp
index ddbc6d5..1ff2a31 100644
--- a/unittests/ELFReaderTest.cpp
+++ b/unittests/ELFReaderTest.cpp
@@ -8,12 +8,14 @@
//===----------------------------------------------------------------------===//
#include <cstdio>
+#include <llvm/ADT/StringRef.h>
#include <llvm/Support/ELF.h>
#include <mcld/IRBuilder.h>
#include <mcld/TargetOptions.h>
#include <mcld/LD/ELFReader.h>
-#include <mcld/MC/MCLDInput.h>
+#include <mcld/MC/Input.h>
#include <mcld/Support/Path.h>
+#include <mcld/Support/MemoryArea.h>
#include <../lib/Target/X86/X86LDBackend.h>
#include <../lib/Target/X86/X86GNUInfo.h>
@@ -66,11 +68,10 @@
ASSERT_TRUE(m_pInput->hasMemArea());
size_t hdr_size = m_pELFReader->getELFHeaderSize();
- MemoryRegion* region = m_pInput->memArea()->request(m_pInput->fileOffset(),
- hdr_size);
- uint8_t* ELF_hdr = region->start();
+ llvm::StringRef region = m_pInput->memArea()->request(m_pInput->fileOffset(),
+ hdr_size);
+ const char* ELF_hdr = region.begin();
bool shdr_result = m_pELFReader->readSectionHeaders(*m_pInput, ELF_hdr);
- m_pInput->memArea()->release(region);
ASSERT_TRUE(shdr_result);
}
@@ -109,22 +110,18 @@
LDSection* strtab_shdr = symtab_shdr->getLink();
ASSERT_TRUE(NULL!=strtab_shdr);
- MemoryRegion* symtab_region = m_pInput->memArea()->request(
- m_pInput->fileOffset() + symtab_shdr->offset(),
- symtab_shdr->size());
+ llvm::StringRef symtab_region = m_pInput->memArea()->request(
+ m_pInput->fileOffset() + symtab_shdr->offset(), symtab_shdr->size());
- MemoryRegion* strtab_region = m_pInput->memArea()->request(
- m_pInput->fileOffset() + strtab_shdr->offset(),
- strtab_shdr->size());
- char* strtab = reinterpret_cast<char*>(strtab_region->start());
+ llvm::StringRef strtab_region = m_pInput->memArea()->request(
+ m_pInput->fileOffset() + strtab_shdr->offset(), strtab_shdr->size());
+ const char* strtab = strtab_region.begin();
bool result = m_pELFReader->readSymbols(*m_pInput, *m_pIRBuilder,
- *symtab_region, strtab);
+ symtab_region, strtab);
ASSERT_TRUE(result);
ASSERT_EQ("hello.c", std::string(m_pInput->context()->getSymbol(1)->name()));
ASSERT_EQ("puts", std::string(m_pInput->context()->getSymbol(10)->name()));
ASSERT_TRUE(NULL==m_pInput->context()->getSymbol(11));
- m_pInput->memArea()->release(symtab_region);
- m_pInput->memArea()->release(strtab_region);
// -- read relocations
MemoryArea* mem = m_pInput->memArea();
@@ -134,12 +131,11 @@
uint64_t offset = m_pInput->fileOffset() + (*rs)->offset();
uint64_t size = (*rs)->size();
- MemoryRegion* region = mem->request(offset, size);
+ llvm::StringRef region = mem->request(offset, size);
IRBuilder::CreateRelocData(**rs); /// create relocation data for the header
ASSERT_EQ(llvm::ELF::SHT_RELA, (*rs)->type());
- ASSERT_TRUE(m_pELFReader->readRela(*m_pInput, **rs, *region));
- mem->release(region);
+ ASSERT_TRUE(m_pELFReader->readRela(*m_pInput, **rs, region));
const RelocData::RelocationListType &rRelocs =
(*rs)->getRelocData()->getRelocationList();
@@ -158,7 +154,8 @@
}
TEST_F( ELFReaderTest, is_my_format ) {
- ASSERT_TRUE( m_pELFObjReader->isMyFormat(*m_pInput) );
+ bool doContinue;
+ ASSERT_TRUE( m_pELFObjReader->isMyFormat(*m_pInput, doContinue) );
}
diff --git a/unittests/ELFReaderTest.h b/unittests/ELFReaderTest.h
index 58ec470..abe99b1 100644
--- a/unittests/ELFReaderTest.h
+++ b/unittests/ELFReaderTest.h
@@ -19,7 +19,7 @@
#include <mcld/MC/InputBuilder.h>
namespace mcld {
- class ELFReader<64, true>;
+ template<> class ELFReader<64, true>;
} // namespace for mcld
namespace mcldtest
diff --git a/unittests/FragmentRefTest.cpp b/unittests/FragmentRefTest.cpp
index 599289d..881cdb8 100644
--- a/unittests/FragmentRefTest.cpp
+++ b/unittests/FragmentRefTest.cpp
@@ -14,6 +14,7 @@
#include <mcld/Support/FileHandle.h>
#include <mcld/Support/MemoryRegion.h>
#include <mcld/Support/Path.h>
+#include <llvm/ADT/StringRef.h>
using namespace mcld;
using namespace mcld::sys::fs;
@@ -48,18 +49,18 @@
MemoryAreaFactory* areaFactory = new MemoryAreaFactory(1);
MemoryArea* area = areaFactory->produce(path, FileHandle::ReadWrite);
- MemoryRegion* region = area->request(0, 4096);
- RegionFragment *frag = new RegionFragment(*region);
+ llvm::StringRef region = area->request(0, 4096);
+ RegionFragment *frag = new RegionFragment(region);
FragmentRef *ref = FragmentRef::Create(*frag, 0x0);
- ASSERT_EQ('H', region->getBuffer()[0]);
- ASSERT_TRUE(4096 == region->size());
- ASSERT_EQ('H', frag->getRegion().getBuffer()[0]);
+ ASSERT_EQ('H', region.data()[0]);
+ ASSERT_TRUE(4096 == region.size());
+ ASSERT_EQ('H', frag->getRegion().data()[0]);
ASSERT_TRUE(4096 == frag->getRegion().size());
ASSERT_EQ(frag, ref->frag());
- ASSERT_EQ('H', static_cast<RegionFragment*>(ref->frag())->getRegion().getBuffer()[0]);
+ ASSERT_EQ('H', static_cast<RegionFragment*>(ref->frag())->getRegion().data()[0]);
ASSERT_TRUE(4096 == static_cast<RegionFragment*>(ref->frag())->getRegion().size());
- ASSERT_EQ('H', ref->deref()[0]);
+ //ASSERT_EQ('H', ref->deref()[0]);
ASSERT_TRUE(RegionFragment::classof(frag));
diff --git a/unittests/GraphTest.cpp b/unittests/GraphTest.cpp
new file mode 100644
index 0000000..38fc0d4
--- /dev/null
+++ b/unittests/GraphTest.cpp
@@ -0,0 +1,340 @@
+//===- GraphTest.cpp ------------------------------------------------------===//
+//
+// The MCLinker Project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#include "GraphTest.h"
+#include <mcld/ADT/GraphLite/Digraph.h>
+#include <mcld/ADT/GraphLite/ListDigraph.h>
+
+using namespace mcld;
+using namespace mcld::test;
+using namespace mcld::graph;
+
+// Constructor can do set-up work for all test here.
+GraphTest::GraphTest()
+{
+}
+
+// Destructor can do clean-up work that doesn't throw exceptions here.
+GraphTest::~GraphTest()
+{
+}
+
+// SetUp() will be called immediately before each test.
+void GraphTest::SetUp()
+{
+}
+
+// TearDown() will be called immediately after each test.
+void GraphTest::TearDown()
+{
+}
+
+//===----------------------------------------------------------------------===//
+// Testcases
+//===----------------------------------------------------------------------===//
+TEST_F(GraphTest, list_digraph_add_n_erase_nodes_1)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ASSERT_TRUE(NULL == u1->first_in);
+ ASSERT_TRUE(NULL == u1->first_out);
+ ASSERT_TRUE(u2 == u1->prev);
+ ASSERT_TRUE(NULL == u1->next);
+
+ ASSERT_TRUE(NULL == u2->first_in);
+ ASSERT_TRUE(NULL == u2->first_out);
+ ASSERT_TRUE(u3 == u2->prev);
+ ASSERT_TRUE(u1 == u2->next);
+
+ ASSERT_TRUE(NULL == u3->first_in);
+ ASSERT_TRUE(NULL == u3->first_out);
+ ASSERT_TRUE(u2 == u3->next);
+ ASSERT_TRUE(NULL == u3->prev);
+
+ ListDigraph::Node* head = NULL;
+ graph.getHead(head);
+ ASSERT_TRUE(head == u3);
+
+ graph.erase(*u2);
+
+ ASSERT_TRUE(NULL == u1->first_in);
+ ASSERT_TRUE(NULL == u1->first_out);
+ ASSERT_TRUE(u3 == u1->prev);
+ ASSERT_TRUE(NULL == u1->next);
+
+ ASSERT_TRUE(NULL == u3->first_in);
+ ASSERT_TRUE(NULL == u3->first_out);
+ ASSERT_TRUE(u1 == u3->next);
+ ASSERT_TRUE(NULL == u3->prev);
+
+ ASSERT_TRUE(NULL == u2->first_in);
+ ASSERT_TRUE(NULL == u2->first_out);
+ ASSERT_TRUE(NULL == u2->prev);
+ ASSERT_TRUE(NULL == u2->next);
+
+ graph.getHead(head);
+ ASSERT_TRUE(head == u3);
+}
+
+TEST_F(GraphTest, list_digraph_add_n_erase_nodes_2)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ASSERT_TRUE(NULL == u1->first_in);
+ ASSERT_TRUE(NULL == u1->first_out);
+ ASSERT_TRUE(u2 == u1->prev);
+ ASSERT_TRUE(NULL == u1->next);
+
+ ASSERT_TRUE(NULL == u2->first_in);
+ ASSERT_TRUE(NULL == u2->first_out);
+ ASSERT_TRUE(u3 == u2->prev);
+ ASSERT_TRUE(u1 == u2->next);
+
+ ASSERT_TRUE(NULL == u3->first_in);
+ ASSERT_TRUE(NULL == u3->first_out);
+ ASSERT_TRUE(u2 == u3->next);
+ ASSERT_TRUE(NULL == u3->prev);
+
+ ListDigraph::Node* head = NULL;
+ graph.getHead(head);
+ ASSERT_TRUE(head == u3);
+
+ graph.erase(*u1);
+
+ ASSERT_TRUE(NULL == u1->first_in);
+ ASSERT_TRUE(NULL == u1->first_out);
+ ASSERT_TRUE(NULL == u1->prev);
+ ASSERT_TRUE(NULL == u1->next);
+
+ ASSERT_TRUE(NULL == u2->first_in);
+ ASSERT_TRUE(NULL == u2->first_out);
+ ASSERT_TRUE(u3 == u2->prev);
+ ASSERT_TRUE(NULL == u2->next);
+
+ ASSERT_TRUE(NULL == u3->first_in);
+ ASSERT_TRUE(NULL == u3->first_out);
+ ASSERT_TRUE(u2 == u3->next);
+ ASSERT_TRUE(NULL == u3->prev);
+
+ graph.getHead(head);
+ ASSERT_TRUE(head == u3);
+}
+
+TEST_F(GraphTest, list_digraph_add_n_erase_nodes_3)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ASSERT_TRUE(NULL == u1->first_in);
+ ASSERT_TRUE(NULL == u1->first_out);
+ ASSERT_TRUE(u2 == u1->prev);
+ ASSERT_TRUE(NULL == u1->next);
+
+ ASSERT_TRUE(NULL == u2->first_in);
+ ASSERT_TRUE(NULL == u2->first_out);
+ ASSERT_TRUE(u3 == u2->prev);
+ ASSERT_TRUE(u1 == u2->next);
+
+ ASSERT_TRUE(NULL == u3->first_in);
+ ASSERT_TRUE(NULL == u3->first_out);
+ ASSERT_TRUE(u2 == u3->next);
+ ASSERT_TRUE(NULL == u3->prev);
+
+ ListDigraph::Node* head = NULL;
+ graph.getHead(head);
+ ASSERT_TRUE(head == u3);
+
+ graph.erase(*u3);
+
+ ASSERT_TRUE(NULL == u3->first_in);
+ ASSERT_TRUE(NULL == u3->first_out);
+ ASSERT_TRUE(NULL == u3->prev);
+ ASSERT_TRUE(NULL == u3->next);
+
+ ASSERT_TRUE(NULL == u1->first_in);
+ ASSERT_TRUE(NULL == u1->first_out);
+ ASSERT_TRUE(u2 == u1->prev);
+ ASSERT_TRUE(NULL == u1->next);
+
+ ASSERT_TRUE(NULL == u2->first_in);
+ ASSERT_TRUE(NULL == u2->first_out);
+ ASSERT_TRUE(u1 == u2->next);
+ ASSERT_TRUE(NULL == u2->prev);
+
+ graph.getHead(head);
+ ASSERT_TRUE(head == u2);
+
+}
+
+TEST_F(GraphTest, list_digraph_add_arcs_1)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ListDigraph::Arc* a1 = graph.addArc(*u1, *u2);
+ ListDigraph::Arc* a2 = graph.addArc(*u2, *u3);
+ ListDigraph::Arc* a3 = graph.addArc(*u3, *u1);
+
+ ASSERT_TRUE(u1 == a1->source && u2 == a1->target);
+ ASSERT_TRUE(u2 == a2->source && u3 == a2->target);
+ ASSERT_TRUE(u3 == a3->source && u1 == a3->target);
+
+ ASSERT_TRUE(u1->first_in == a3 && u1->first_out == a1);
+ ASSERT_TRUE(u2->first_in == a1 && u2->first_out == a2);
+ ASSERT_TRUE(u3->first_in == a2 && u3->first_out == a3);
+}
+
+TEST_F(GraphTest, list_digraph_add_arcs_2)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ListDigraph::Arc* a1 = graph.addArc(*u1, *u1);
+ ListDigraph::Arc* a2 = graph.addArc(*u1, *u2);
+ ListDigraph::Arc* a3 = graph.addArc(*u1, *u3);
+
+ ASSERT_TRUE(u1 == a1->source && u1 == a1->target);
+ ASSERT_TRUE(u1 == a2->source && u2 == a2->target);
+ ASSERT_TRUE(u1 == a3->source && u3 == a3->target);
+
+ ASSERT_TRUE(u1->first_in == a1 && u1->first_out == a3);
+ ASSERT_TRUE(u2->first_in == a2 && u2->first_out == NULL);
+ ASSERT_TRUE(u3->first_in == a3 && u3->first_out == NULL);
+}
+
+TEST_F(GraphTest, list_digraph_add_n_erase_arcs_1)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ListDigraph::Arc* a1 = graph.addArc(*u1, *u2);
+ ListDigraph::Arc* a2 = graph.addArc(*u2, *u3);
+ ListDigraph::Arc* a3 = graph.addArc(*u3, *u1);
+
+ graph.erase(*a2);
+
+ ASSERT_TRUE(u1 == a1->source && u2 == a1->target);
+ ASSERT_TRUE(u3 == a3->source && u1 == a3->target);
+
+ // remove from the fan-out list
+ ASSERT_TRUE(u2->first_in == a1 && u2->first_out == NULL);
+
+ // remove from the fan-in list
+ ASSERT_TRUE(u3->first_in == NULL && u3->first_out == a3);
+
+ // put into free list
+ ASSERT_TRUE(NULL == a2->next_in);
+}
+
+
+TEST_F(GraphTest, list_digraph_add_n_erase_arcs_2)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ListDigraph::Arc* a1 = graph.addArc(*u1, *u2);
+ ListDigraph::Arc* a2 = graph.addArc(*u2, *u3);
+ ListDigraph::Arc* a3 = graph.addArc(*u3, *u1);
+
+ graph.erase(*a1);
+
+ ASSERT_TRUE(u2 == a2->source && u3 == a2->target);
+ ASSERT_TRUE(u3 == a3->source && u1 == a3->target);
+
+ // remove from the fan-out list
+ ASSERT_TRUE(u1->first_in == a3 && u1->first_out == NULL);
+
+ // remove from the fan-in list
+ ASSERT_TRUE(u2->first_in == NULL && u2->first_out == a2);
+
+ // put into free list
+ ASSERT_TRUE(NULL == a1->next_in);
+}
+
+TEST_F(GraphTest, list_digraph_add_n_erase_arcs_3)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ListDigraph::Arc* a1 = graph.addArc(*u1, *u2);
+ ListDigraph::Arc* a2 = graph.addArc(*u2, *u3);
+ ListDigraph::Arc* a3 = graph.addArc(*u3, *u1);
+
+ graph.erase(*a3);
+
+ ASSERT_TRUE(u1 == a1->source && u2 == a1->target);
+ ASSERT_TRUE(u2 == a2->source && u3 == a2->target);
+
+ // remove from the fan-out list
+ ASSERT_TRUE(u1->first_in == NULL && u1->first_out == a1);
+
+ // remove from the fan-in list
+ ASSERT_TRUE(u3->first_in == a2 && u3->first_out == NULL);
+
+ // put into free list
+ ASSERT_TRUE(NULL == a3->next_in);
+}
+
+TEST_F(GraphTest, list_digraph_add_n_erase_arcs_4)
+{
+ ListDigraph graph;
+
+ ListDigraph::Node* u1 = graph.addNode();
+ ListDigraph::Node* u2 = graph.addNode();
+ ListDigraph::Node* u3 = graph.addNode();
+
+ ListDigraph::Arc* a1 = graph.addArc(*u1, *u1);
+ graph.addArc(*u1, *u2);
+ graph.addArc(*u1, *u3);
+
+ graph.erase(*u1);
+
+ ASSERT_TRUE(u2->first_in == NULL);
+ ASSERT_TRUE(u3->first_in == NULL);
+ ASSERT_TRUE(a1->next_in == NULL);
+
+}
+
+TEST_F(GraphTest, api_test)
+{
+ Digraph graph;
+
+ Digraph::Node node = graph.addNode();
+ graph.addNode();
+ graph.addNode();
+ graph.addNode();
+
+ ASSERT_EQ(4, graph.numOfNodes());
+ ASSERT_EQ(0, graph.numOfArcs());
+}
diff --git a/unittests/GraphTest.h b/unittests/GraphTest.h
new file mode 100644
index 0000000..a71276b
--- /dev/null
+++ b/unittests/GraphTest.h
@@ -0,0 +1,38 @@
+//===- GraphTest.h --------------------------------------------------------===//
+//
+// The MCLinker Project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#ifndef MCLD_GRAPH_TEST_H
+#define MCLD_GRAPH_TEST_H
+
+#include <gtest.h>
+
+
+namespace mcld {
+namespace test {
+
+class GraphTest : public ::testing::Test
+{
+public:
+ // Constructor can do set-up work for all test here.
+ GraphTest();
+
+ // Destructor can do clean-up work that doesn't throw exceptions here.
+ virtual ~GraphTest();
+
+ // SetUp() will be called immediately before each test.
+ virtual void SetUp();
+
+ // TearDown() will be called immediately after each test.
+ virtual void TearDown();
+};
+
+} // namespace of test
+} // namespace of mcld
+
+#endif
+
diff --git a/unittests/HashTableTest.cpp b/unittests/HashTableTest.cpp
index 532c307..fe67e95 100644
--- a/unittests/HashTableTest.cpp
+++ b/unittests/HashTableTest.cpp
@@ -8,8 +8,8 @@
//===----------------------------------------------------------------------===//
#include "HashTableTest.h"
-#include "mcld/ADT/HashEntry.h"
-#include "mcld/ADT/HashTable.h"
+#include <mcld/ADT/HashEntry.h>
+#include <mcld/ADT/HashTable.h>
#include <cstdlib>
using namespace std;
diff --git a/unittests/LDSymbolTest.cpp b/unittests/LDSymbolTest.cpp
index c414fa0..e0e681d 100644
--- a/unittests/LDSymbolTest.cpp
+++ b/unittests/LDSymbolTest.cpp
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
-#include "mcld/LD/LDSymbol.h"
+#include <mcld/LD/LDSymbol.h>
#include "LDSymbolTest.h"
using namespace mcld;
diff --git a/unittests/LinearAllocatorTest.cpp b/unittests/LinearAllocatorTest.cpp
index fea135f..d38684a 100644
--- a/unittests/LinearAllocatorTest.cpp
+++ b/unittests/LinearAllocatorTest.cpp
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
#include "LinearAllocatorTest.h"
-#include "mcld/Support/Allocators.h"
+#include <mcld/Support/Allocators.h>
using namespace mcld;
using namespace mcldtest;
diff --git a/unittests/LinkerTest.cpp b/unittests/LinkerTest.cpp
index 16c6448..479bbb9 100644
--- a/unittests/LinkerTest.cpp
+++ b/unittests/LinkerTest.cpp
@@ -14,6 +14,7 @@
#include <mcld/IRBuilder.h>
#include <mcld/Linker.h>
#include <mcld/LinkerConfig.h>
+#include <mcld/LinkerScript.h>
#include <mcld/Support/Path.h>
@@ -63,7 +64,7 @@
// builder.CreateInput("./test.o");
if (linker.link(module, builder))
- linker.emit("./test.so");
+ linker.emit(module, "./test.so");
Finalize();
}
@@ -123,7 +124,7 @@
builder.ReadInput("crtend", crtend);
if (linker.link(module, builder)) {
- linker.emit("libplasma.so"); ///< -o libplasma.so
+ linker.emit(module, "libplasma.so"); ///< -o libplasma.so
}
Finalize();
@@ -181,7 +182,7 @@
builder1.ReadInput("crtend", crtend);
if (linker.link(module1, builder1)) {
- linker.emit("libplasma.once.so"); ///< -o libplasma.so
+ linker.emit(module1, "libplasma.once.so"); ///< -o libplasma.so
}
Finalize();
@@ -224,7 +225,7 @@
builder2.ReadInput("crtend", crtend);
if (linker.link(module2, builder2)) {
- linker.emit("libplasma.twice.so"); ///< -o libplasma.exe
+ linker.emit(module2, "libplasma.twice.so"); ///< -o libplasma.exe
}
Finalize();
@@ -278,7 +279,7 @@
builder1->ReadInput("crtend", crtend);
if (linker.link(module1, *builder1)) {
- linker.emit("libplasma.once.so"); ///< -o libplasma.so
+ linker.emit(module1, "libplasma.once.so"); ///< -o libplasma.so
}
// Can not delete builder until emit the output. Dynamic string table
@@ -326,7 +327,7 @@
builder2->ReadInput("crtend", crtend);
if (linker.link(module2, *builder2)) {
- linker.emit("libplasma.twice.so"); ///< -o libplasma.exe
+ linker.emit(module2, "libplasma.twice.so"); ///< -o libplasma.exe
}
delete builder2;
@@ -467,7 +468,7 @@
builder.AddRelocation(*rel_text, llvm::ELF::R_ARM_PLT32, *z1gv, 0x4);
if (linker.link(module, builder)) {
- linker.emit("libgotplt.so"); ///< -o libgotplt.so
+ linker.emit(module, "libgotplt.so"); ///< -o libgotplt.so
}
Finalize();
diff --git a/unittests/MCRegionFragmentTest.cpp b/unittests/MCRegionFragmentTest.cpp
index 842ddf9..7d6c3b9 100644
--- a/unittests/MCRegionFragmentTest.cpp
+++ b/unittests/MCRegionFragmentTest.cpp
@@ -9,9 +9,9 @@
#include "MCRegionFragmentTest.h"
-#include "mcld/MC/MCRegionFragment.h"
-#include "mcld/Support/MemoryAreaFactory.h"
-#include "mcld/Support/Path.h"
+#include <mcld/MC/MCRegionFragment.h>
+#include <mcld/Support/MemoryAreaFactory.h>
+#include <mcld/Support/Path.h>
using namespace mcld;
using namespace mcldtest;
diff --git a/unittests/MemoryAreaTest.cpp b/unittests/MemoryAreaTest.cpp
deleted file mode 100644
index 0499a0d..0000000
--- a/unittests/MemoryAreaTest.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-//===- MemoryAreaTest.cpp -------------------------------------------------===//
-//
-// The MCLinker Project
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-#include <mcld/Support/FileHandle.h>
-#include <mcld/Support/FileSystem.h>
-#include <mcld/Support/MemoryArea.h>
-#include <mcld/Support/MemoryRegion.h>
-#include <mcld/Support/MemoryAreaFactory.h>
-#include <mcld/Support/Path.h>
-
-#include "MemoryAreaTest.h"
-#include <fcntl.h>
-#include <cstdio>
-
-using namespace mcld;
-using namespace mcld::sys::fs;
-using namespace mcldtest;
-
-
-// Constructor can do set-up work for all test here.
-MemoryAreaTest::MemoryAreaTest()
-{
-}
-
-// Destructor can do clean-up work that doesn't throw exceptions here.
-MemoryAreaTest::~MemoryAreaTest()
-{
-}
-
-// SetUp() will be called immediately before each test.
-void MemoryAreaTest::SetUp()
-{
-}
-
-// TearDown() will be called immediately after each test.
-void MemoryAreaTest::TearDown()
-{
-}
-
-//==========================================================================//
-// Testcases
-//
-TEST_F( MemoryAreaTest, read_by_malloc )
-{
- Path path(TOPDIR);
- path.append("unittests/test3.txt");
-
- MemoryAreaFactory *AreaFactory = new MemoryAreaFactory(1);
- MemoryArea* area = AreaFactory->produce(path, FileHandle::ReadOnly);
- MemoryRegion* region = area->request(3, 2);
- ASSERT_EQ('L', region->getBuffer()[0]);
- ASSERT_EQ('O', region->getBuffer()[1]);
- area->release(region);
- AreaFactory->destruct(area);
- //delete AreaFactory;;
-}
-
-TEST_F( MemoryAreaTest, write_by_malloc )
-{
- Path path(TOPDIR);
- path.append("unittests/test2.txt");
- MemoryAreaFactory *AreaFactory = new MemoryAreaFactory(1);
- MemoryArea* area = AreaFactory->produce(path, FileHandle::ReadOnly);
- ASSERT_TRUE(area->handler()->isOpened());
- ASSERT_TRUE(area->handler()->isGood());
- MemoryRegion* region = area->request(3, 4);
- region->getBuffer()[0] = 'L';
- region->getBuffer()[1] = 'i';
- region->getBuffer()[2] = 'n';
- region->getBuffer()[3] = 'k';
- area->release(region);
- area->clear();
- area->handler()->close();
-
- area->handler()->open(path, FileHandle::ReadOnly);
- ASSERT_TRUE(area->handler()->isOpened());
- ASSERT_TRUE(area->handler()->isGood());
- region = area->request(5, 2);
- ASSERT_EQ('n', region->getBuffer()[0]);
- ASSERT_EQ('k', region->getBuffer()[1]);
- area->release(region);
- AreaFactory->destruct(area);
- //delete AreaFactory;;
-}
-
-TEST_F( MemoryAreaTest, read_one_page )
-{
- Path path(TOPDIR) ;
- path.append("unittests/test3.txt") ;
- MemoryAreaFactory *AreaFactory = new MemoryAreaFactory(1) ;
- MemoryArea* area = AreaFactory->produce(path, FileHandle::ReadOnly) ;
- ASSERT_TRUE(area->handler()->isOpened()) ;
- ASSERT_TRUE(area->handler()->isGood()) ;
- MemoryRegion* region = area->request(0, 4096);
- ASSERT_EQ('H', region->getBuffer()[0]);
- ASSERT_EQ('E', region->getBuffer()[1]);
- area->release(region);
- AreaFactory->destruct(area);
- //delete AreaFactory; ;
-}
-
-TEST_F( MemoryAreaTest, write_one_page )
-{
- Path path(TOPDIR) ;
- path.append("unittests/test2.txt") ;
- MemoryAreaFactory *AreaFactory = new MemoryAreaFactory(1) ;
- MemoryArea* area = AreaFactory->produce(path, FileHandle::ReadWrite);
- ASSERT_TRUE(area->handler()->isOpened()) ;
- ASSERT_TRUE(area->handler()->isGood()) ;
- MemoryRegion* region = area->request(0, 4096) ;
- region->getBuffer()[4000] = 'K' ;
- region->getBuffer()[4001] = 'R' ;
- ASSERT_EQ('K', region->getBuffer()[4000]);
- ASSERT_EQ('R', region->getBuffer()[4001]);
- area->release(region);
- area->clear() ;
- area->handler()->close();
-
- area->handler()->open(path, FileHandle::ReadOnly);
- region = area->request(4000, 4);
- ASSERT_EQ('K', region->getBuffer()[0]);
- ASSERT_EQ('R', region->getBuffer()[1]);
- region->getBuffer()[0] = 'O' ;
- region->getBuffer()[1] = 'H' ;
- area->clear() ;
- AreaFactory->destruct(area);
- //delete AreaFactory; ;
-}
-
-TEST_F( MemoryAreaTest, write_sync )
-{
- Path path(TOPDIR) ;
- path.append("unittests/test2.txt") ;
- MemoryAreaFactory *AreaFactory = new MemoryAreaFactory(1) ;
- MemoryArea* area = AreaFactory->produce(path, FileHandle::ReadWrite) ;
- ASSERT_TRUE(area->handler()->isOpened()) ;
- ASSERT_TRUE(area->handler()->isGood()) ;
- MemoryRegion* region1 = area->request(0, 4096) ;
- MemoryRegion* region2 = area->request(512, 1024) ;
- region1->getBuffer()[1000] = 'L' ;
- region1->getBuffer()[1001] = 'L' ;
- region2->getBuffer()[488] = 'V' ;
- region2->getBuffer()[489] = 'M' ;
- area->release(region1);
- area->release(region2);
- area->clear();
- area->handler()->close();
- area->handler()->open(path, FileHandle::ReadWrite);
- region1 = area->request(0, 1024) ;
- EXPECT_EQ('V', region1->getBuffer()[1000]) ;
- EXPECT_EQ('M', region1->getBuffer()[1001]) ;
- region1->getBuffer()[1000] = '@' ;
- region1->getBuffer()[1001] = '@' ;
- area->release(region1);
- area->clear();
- AreaFactory->destruct(area);
- //delete AreaFactory; ;
-}
-
-
diff --git a/unittests/MemoryAreaTest.h b/unittests/MemoryAreaTest.h
deleted file mode 100644
index 86a5da0..0000000
--- a/unittests/MemoryAreaTest.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//===- MemoryAreaTest.h ---------------------------------------------------===//
-//
-// The MCLinker Project
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-#ifndef MEMORYAREA_TEST_H
-#define MEMORYAREA_TEST_H
-
-#include <gtest.h>
-
-namespace mcld
-{
-class MemoryArea;
-
-} // namespace for mcld
-
-namespace mcldtest
-{
-
-/** \class MemoryAreaTest
- * \brief
- *
- * \see MemoryArea
- */
-class MemoryAreaTest : public ::testing::Test
-{
-public:
- // Constructor can do set-up work for all test here.
- MemoryAreaTest();
-
- // Destructor can do clean-up work that doesn't throw exceptions here.
- virtual ~MemoryAreaTest();
-
- // SetUp() will be called immediately before each test.
- virtual void SetUp();
-
- // TearDown() will be called immediately after each test.
- virtual void TearDown();
-
-protected:
- mcld::MemoryArea* m_pTestee;
-};
-
-} // namespace of mcldtest
-
-#endif
-
diff --git a/unittests/PathTest.cpp b/unittests/PathTest.cpp
index 1a73de2..73e62cc 100644
--- a/unittests/PathTest.cpp
+++ b/unittests/PathTest.cpp
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
#include "PathTest.h"
-#include "mcld/Support/FileSystem.h"
+#include <mcld/Support/FileSystem.h>
#include <string>
//
diff --git a/unittests/RTLinearAllocatorTest.cpp b/unittests/RTLinearAllocatorTest.cpp
index 7ed5dac..1e07f4a 100644
--- a/unittests/RTLinearAllocatorTest.cpp
+++ b/unittests/RTLinearAllocatorTest.cpp
@@ -6,8 +6,8 @@
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
-#include "mcld/Support/Allocators.h"
-#include <RTLinearAllocatorTest.h>
+#include <mcld/Support/Allocators.h>
+#include "RTLinearAllocatorTest.h"
using namespace mcld;
using namespace mcldtest;
diff --git a/unittests/StaticResolverTest.cpp b/unittests/StaticResolverTest.cpp
index bd40cd5..eb3accc 100644
--- a/unittests/StaticResolverTest.cpp
+++ b/unittests/StaticResolverTest.cpp
@@ -59,7 +59,7 @@
ASSERT_TRUE( mcld::ResolveInfo::define_flag == new_sym->info());
ASSERT_TRUE( mcld::ResolveInfo::define_flag == old_sym->info());
bool override = true;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_FALSE( override );
}
@@ -85,7 +85,7 @@
ASSERT_TRUE( mcld::ResolveInfo::Define == old_sym->desc());
bool override = false;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_FALSE( override );
ASSERT_TRUE(1 == old_sym->size());
@@ -112,7 +112,7 @@
ASSERT_TRUE( mcld::ResolveInfo::Define == old_sym->desc());
bool override = false;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_FALSE( override );
ASSERT_TRUE(1 == old_sym->size());
@@ -139,7 +139,7 @@
ASSERT_TRUE( mcld::ResolveInfo::Undefined == old_sym->desc());
bool override = false;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_FALSE( override );
ASSERT_TRUE(1 == old_sym->size());
@@ -161,7 +161,7 @@
ASSERT_TRUE( mcld::ResolveInfo::global_flag == new_sym->info());
ASSERT_TRUE( mcld::ResolveInfo::weak_flag == old_sym->info());
bool override = false;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_TRUE( override );
ASSERT_TRUE(0 == old_sym->size());
@@ -190,7 +190,7 @@
ASSERT_TRUE( mcld::ResolveInfo::Define == new_sym->desc());
bool override = false;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_FALSE( override );
ASSERT_TRUE(1 == old_sym->size());
@@ -212,7 +212,7 @@
ASSERT_TRUE( mcld::ResolveInfo::common_flag == new_sym->info());
ASSERT_TRUE( mcld::ResolveInfo::common_flag == old_sym->info());
bool override = true;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_FALSE( override );
ASSERT_TRUE(999 == old_sym->size());
@@ -237,7 +237,7 @@
ASSERT_TRUE( (ResolveInfo::weak_flag | ResolveInfo::common_flag) == old_sym->info());
bool override = false;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_TRUE( override );
ASSERT_TRUE(999 == old_sym->size());
@@ -261,7 +261,7 @@
ASSERT_TRUE( ResolveInfo::common_flag == old_sym->info());
bool override = false;
- bool result = m_pResolver->resolve(*old_sym, *new_sym, override);
+ bool result = m_pResolver->resolve(*old_sym, *new_sym, override, 0x0);
ASSERT_TRUE(result);
ASSERT_TRUE( override );
ASSERT_TRUE(999 == old_sym->size());
diff --git a/unittests/SymbolTableTest.cpp b/unittests/SymbolTableTest.cpp
index 5b665f0..2dc5143 100644
--- a/unittests/SymbolTableTest.cpp
+++ b/unittests/SymbolTableTest.cpp
@@ -6,7 +6,7 @@
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
-#include "mcld/LD/SymbolTable.h"
+#include <mcld/LD/SymbolTable.h>
#include "SymbolTableTest.h"
using namespace mcld;
diff --git a/unittests/TargetMachineTest.cpp b/unittests/TargetMachineTest.cpp
index 6258906..85950a9 100644
--- a/unittests/TargetMachineTest.cpp
+++ b/unittests/TargetMachineTest.cpp
@@ -6,7 +6,7 @@
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
-#include <TargetMachineTest.h>
+#include "TargetMachineTest.h"
using namespace mcld;
using namespace mcldTEST;