15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- impl.cpp -----------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "X86GOT.h"
10cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDFileFormat.h>
12cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/LD/SectionData.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
14d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <llvm/Support/Casting.h>
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld;
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// X86_32GOT
20cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===----------------------------------------------------------------------===//
216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesX86_32GOT::X86_32GOT(LDSection& pSection)
22d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  : GOT(pSection), m_pLast(NULL)
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesX86_32GOT::~X86_32GOT()
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesvoid X86_32GOT::reserve(size_t pNum)
31d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{
32d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  for (size_t i = 0; i < pNum; i++) {
336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    new X86_32GOTEntry(0, m_SectionData);
34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  }
35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao}
36d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
376f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesX86_32GOTEntry* X86_32GOT::consume()
38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{
39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  if (NULL == m_pLast) {
40d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    assert(!empty() && "Consume empty GOT entry!");
416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    m_pLast = llvm::cast<X86_32GOTEntry>(&m_SectionData->front());
42d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    return m_pLast;
43d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  }
44d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  m_pLast = llvm::cast<X86_32GOTEntry>(m_pLast->getNextNode());
466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  return m_pLast;
476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}
486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===//
506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// X86_64GOT
516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===//
526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesX86_64GOT::X86_64GOT(LDSection& pSection)
536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  : GOT(pSection), m_pLast(NULL)
546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{
556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}
566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesX86_64GOT::~X86_64GOT()
586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{
596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}
606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
616f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesvoid X86_64GOT::reserve(size_t pNum)
626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{
636f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  for (size_t i = 0; i < pNum; i++) {
646f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    new X86_64GOTEntry(0, m_SectionData);
656f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  }
666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}
676f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesX86_64GOTEntry* X86_64GOT::consume()
696f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{
706f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  if (NULL == m_pLast) {
716f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    assert(!empty() && "Consume empty GOT entry!");
726f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    m_pLast = llvm::cast<X86_64GOTEntry>(&m_SectionData->front());
736f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines    return m_pLast;
746f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  }
756f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
766f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  m_pLast = llvm::cast<X86_64GOTEntry>(m_pLast->getNextNode());
77d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  return m_pLast;
78d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao}
79d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
80