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