X86GOT.h revision 87f34658dec9097d987d254a990ea7f311bfc95f
1//===- X86GOT.h -----------------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9#ifndef MCLD_TARGET_X86_GOT_H
10#define MCLD_TARGET_X86_GOT_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14
15#include <mcld/Target/GOT.h>
16
17namespace mcld {
18
19class LDSection;
20class SectionData;
21
22/** \class X86_32GOTEntry
23 *  \brief GOT Entry with size of 4 bytes
24 */
25class X86_32GOTEntry : public GOT::Entry<4>
26{
27public:
28  X86_32GOTEntry(uint64_t pContent, SectionData* pParent)
29   : GOT::Entry<4>(pContent, pParent)
30  {}
31};
32
33/** \class X86_32GOT
34 *  \brief X86_32 Global Offset Table.
35 */
36
37class X86_32GOT : public GOT
38{
39public:
40  X86_32GOT(LDSection& pSection);
41
42  ~X86_32GOT();
43
44  X86_32GOTEntry* create();
45};
46
47/** \class X86_64GOTEntry
48 *  \brief GOT Entry with size of 8 bytes
49 */
50class X86_64GOTEntry : public GOT::Entry<8>
51{
52public:
53  X86_64GOTEntry(uint64_t pContent, SectionData* pParent)
54   : GOT::Entry<8>(pContent, pParent)
55  {}
56};
57
58/** \class X86_64GOT
59 *  \brief X86_64 Global Offset Table.
60 */
61
62class X86_64GOT : public GOT
63{
64public:
65  X86_64GOT(LDSection& pSection);
66
67  ~X86_64GOT();
68
69  X86_64GOTEntry* create();
70
71private:
72  X86_64GOTEntry* m_pLast; ///< the last consumed entry
73};
74
75} // namespace of mcld
76
77#endif
78
79