MCLinker upstream commit 0459e386785c.
Change-Id: Ide6790f5a354b7fcc03d812d6c8cf43b1e309ba3
diff --git a/include/mcld/LD/SectionData.h b/include/mcld/LD/SectionData.h
index 8666195..316d92f 100644
--- a/include/mcld/LD/SectionData.h
+++ b/include/mcld/LD/SectionData.h
@@ -16,10 +16,11 @@
#include <llvm/ADT/ilist_node.h>
#include <llvm/Support/DataTypes.h>
-#include <mcld/LD/Fragment.h>
+#include <mcld/Config/Config.h>
+#include <mcld/Support/Allocators.h>
+#include <mcld/Fragment/Fragment.h>
-namespace mcld
-{
+namespace mcld {
class LDSection;
@@ -29,11 +30,20 @@
class SectionData
{
private:
+ friend class Chunk<SectionData, MCLD_SECTIONS_PER_INPUT>;
+
+ SectionData();
+ explicit SectionData(LDSection &pSection);
+
SectionData(const SectionData &); // DO NOT IMPLEMENT
SectionData& operator=(const SectionData &); // DO NOT IMPLEMENT
public:
typedef llvm::iplist<Fragment> FragmentListType;
+
+ typedef FragmentListType::reference reference;
+ typedef FragmentListType::const_reference const_reference;
+
typedef FragmentListType::iterator iterator;
typedef FragmentListType::const_iterator const_iterator;
@@ -41,36 +51,37 @@
typedef FragmentListType::const_reverse_iterator const_reverse_iterator;
public:
- explicit SectionData(const LDSection &pSection);
+ static SectionData* Create(LDSection& pSection);
- const LDSection &getSection() const { return *m_pSection; }
+ static void Destroy(SectionData*& pSection);
- unsigned int getAlignment() const { return m_Alignment; }
- void setAlignment(unsigned int pValue) { m_Alignment = pValue; }
+ const LDSection& getSection() const { return *m_pSection; }
+ LDSection& getSection() { return *m_pSection; }
FragmentListType &getFragmentList() { return m_Fragments; }
const FragmentListType &getFragmentList() const { return m_Fragments; }
- iterator begin() { return m_Fragments.begin(); }
- const_iterator begin() const { return m_Fragments.begin(); }
-
- iterator end() { return m_Fragments.end(); }
- const_iterator end() const { return m_Fragments.end(); }
-
- reverse_iterator rbegin() { return m_Fragments.rbegin(); }
- const_reverse_iterator rbegin() const { return m_Fragments.rbegin(); }
-
- reverse_iterator rend() { return m_Fragments.rend(); }
- const_reverse_iterator rend() const { return m_Fragments.rend(); }
-
size_t size() const { return m_Fragments.size(); }
bool empty() const { return m_Fragments.empty(); }
+ reference front () { return m_Fragments.front(); }
+ const_reference front () const { return m_Fragments.front(); }
+ reference back () { return m_Fragments.back(); }
+ const_reference back () const { return m_Fragments.back(); }
+
+ const_iterator begin () const { return m_Fragments.begin(); }
+ iterator begin () { return m_Fragments.begin(); }
+ const_iterator end () const { return m_Fragments.end(); }
+ iterator end () { return m_Fragments.end(); }
+ const_reverse_iterator rbegin() const { return m_Fragments.rbegin(); }
+ reverse_iterator rbegin() { return m_Fragments.rbegin(); }
+ const_reverse_iterator rend () const { return m_Fragments.rend(); }
+ reverse_iterator rend () { return m_Fragments.rend(); }
+
private:
FragmentListType m_Fragments;
- const LDSection* m_pSection;
- unsigned int m_Alignment;
+ LDSection* m_pSection;
};