122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- FileAction.cpp -----------------------------------------------------===//
222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//                     The MCLinker Project
422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source
622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details.
722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/MC/FileAction.h>
1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/MC/MCLDInput.h>
1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/MC/InputBuilder.h>
1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/MC/ContextFactory.h>
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/MemoryAreaFactory.h>
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaousing namespace mcld;
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// ContextAction
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoContextAction::ContextAction(unsigned int pPosition)
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  : InputAction(pPosition) {
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaobool ContextAction::activate(InputBuilder& pBuilder) const
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Input* input = *pBuilder.getCurrentNode();
2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  if (input->hasContext())
2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    return false;
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // already got type - for example, bitcode
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  if (input->type() == Input::Script ||
3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao      input->type() == Input::Object ||
3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao      input->type() == Input::DynObj  ||
3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao      input->type() == Input::Archive)
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    return false;
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  return pBuilder.setContext(*input);
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}
4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// MemoryAreaAction
4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoMemoryAreaAction::MemoryAreaAction(unsigned int pPosition,
4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                   FileHandle::OpenMode pMode,
4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                                   FileHandle::Permission pPerm)
4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  : InputAction(pPosition), m_Mode(pMode), m_Permission(pPerm) {
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaobool MemoryAreaAction::activate(InputBuilder& pBuilder) const
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Input* input = *pBuilder.getCurrentNode();
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  if (input->hasMemArea())
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    return false;
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // already got type - for example, bitcode
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  if (input->type() == Input::Script ||
5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao      input->type() == Input::Object ||
6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao      input->type() == Input::DynObj  ||
6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao      input->type() == Input::Archive)
6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    return false;
6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  return pBuilder.setMemory(*input, m_Mode, m_Permission);
6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}
6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
67