Fragment.h revision d0fbbb227051be16931a1aa9b4a7722ac039c698
1362c4e697d8e9c034e964ac7b40227e054491547Glenn Kasten//===- Fragment.h ---------------------------------------------------------===//
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//
389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//                     The MCLinker Project
489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//
589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// This file is distributed under the University of Illinois Open Source
689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// License. See LICENSE.TXT for details.
789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//
889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//===----------------------------------------------------------------------===//
989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef MCLD_FRAGMENT_FRAGMENT_H
1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define MCLD_FRAGMENT_FRAGMENT_H
1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifdef ENABLE_UNITTEST
1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <gtest.h>
1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif
1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <llvm/ADT/ilist_node.h>
1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <llvm/Support/DataTypes.h>
1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <cstddef>
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <cassert>
2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace mcld {
2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass SectionData;
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/** \class Fragment
2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *  \brief Fragment is the minimun linking unit of MCLinker.
2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass Fragment : public llvm::ilist_node<Fragment>
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project  enum Type {
3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Alignment,
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Fillment,
357562408b2261d38415453378b6188f74fda99d88Mathias Agopian    Region,
367562408b2261d38415453378b6188f74fda99d88Mathias Agopian    Target,
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Stub,
3838ccae2c0324daa305f3fe77d25fdf5edec0b0e1Eric Laurent    Null
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project  };
40fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin
41f6b1678f8f508b447155a81b44e214475ab634a8Glenn Kastenpublic:
42fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin  Fragment();
4364760240f931714858a59c1579f07264d7182ba2Dima Zavin
447394a4f358fa9908a9f0a7c954b65c399f4268e6Dima Zavin  Fragment(Type pKind, SectionData *pParent = NULL);
45fce7a473248381cc83a01855f92581077d3c9ee2Dima Zavin
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project  virtual ~Fragment();
4733005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
4833005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  Type getKind() const { return m_Kind; }
4933005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
5033005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  const SectionData* getParent() const { return m_pParent; }
5133005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  SectionData*       getParent()       { return m_pParent; }
5233005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
5333005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  void setParent(SectionData *pValue) { m_pParent = pValue; }
5433005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
5533005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  uint64_t getOffset() const;
5633005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
5733005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  void setOffset(uint64_t pOffset) { m_Offset = pOffset; }
5833005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
5933005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  bool hasOffset() const;
6033005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
6133005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  static bool classof(const Fragment *O) { return true; }
6233005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
6333005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  virtual size_t size() const {
6433005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh    assert(false && "Can not call abstract Fragment::size()!");
6533005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh    return 0;
6633005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  }
6733005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
6833005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yehprivate:
6933005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  Fragment(const Fragment& );            // DO NOT IMPLEMENT
7033005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  Fragment& operator=(const Fragment& ); // DO NOT IMPLEMENT
7133005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
7233005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yehprivate:
7333005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  Type m_Kind;
7433005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh  SectionData* m_pParent;
7533005a932c60a0780fe9b7307d5988df3d9f6c26Chia-chi Yeh
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project  uint64_t m_Offset;
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
80879135196fd1c97deefc538c888037c56c2879a7Glenn Kasten} // namespace of mcld
81879135196fd1c97deefc538c888037c56c2879a7Glenn Kasten
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project