15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- InputFactory.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//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/InputFactory.h" 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LinkerConfig.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/AttributeOption.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/AttributeSet.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// InputFactory 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoInputFactory::InputFactory(size_t pNum, const LinkerConfig& pConfig) 2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines : GCFactory<Input, 0>(pNum) { 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pAttrSet = new AttributeSet(16, pConfig.attribute().predefined()); 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pLast = new AttributeProxy(*m_pAttrSet, 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pConfig.attribute().predefined(), 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pConfig.attribute().constraint()); 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2837b74a387bb3993387029859c2d9d051c41c724eStephen HinesInputFactory::~InputFactory() { 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao delete m_pAttrSet; 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao delete m_pLast; 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInput* InputFactory::produce(llvm::StringRef pName, 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const sys::fs::Path& pPath, 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int pType, 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines off_t pFileOffset) { 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Input* result = Alloc::allocate(); 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao new (result) Input(pName, pPath, *m_pLast, pType, pFileOffset); 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return result; 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4237b74a387bb3993387029859c2d9d051c41c724eStephen HinesInput* InputFactory::produce(llvm::StringRef pName, 4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines const char* pPath, 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines unsigned int pType, 4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines off_t pFileOffset) { 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Input* result = Alloc::allocate(); 4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines new (result) Input(pName, sys::fs::Path(pPath), *m_pLast, pType, pFileOffset); 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines return result; 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines} 5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 52