1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- ScriptReader.cpp ---------------------------------------------------===// 2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// The MCLinker Project 4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source 6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details. 7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptReader.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/Input.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptFile.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptScanner.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MemoryArea.h" 15f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 16f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/ADT/StringRef.h> 17f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 18f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <istream> 19f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <sstream> 20f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 2137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 2337b74a387bb3993387029859c2d9d051c41c724eStephen HinesScriptReader::ScriptReader(ObjectReader& pObjectReader, 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ArchiveReader& pArchiveReader, 2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines DynObjReader& pDynObjReader, 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines GroupReader& pGroupReader) 2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines : m_ObjectReader(pObjectReader), 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_ArchiveReader(pArchiveReader), 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_DynObjReader(pDynObjReader), 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_GroupReader(pGroupReader) { 31f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 32f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 3337b74a387bb3993387029859c2d9d051c41c724eStephen HinesScriptReader::~ScriptReader() { 34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 35f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 36f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines/// isMyFormat 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesbool ScriptReader::isMyFormat(Input& input, bool& doContinue) const { 38f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines doContinue = true; 39f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines // always return true now 40f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return true; 41f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 43f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesbool ScriptReader::readScript(const LinkerConfig& pConfig, 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines ScriptFile& pScriptFile) { 45f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines Input& input = pScriptFile.input(); 46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines size_t size = input.memArea()->size(); 47f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::StringRef region = input.memArea()->request(input.fileOffset(), size); 48f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines std::stringbuf buf(region.data()); 49f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 50f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines std::istream in(&buf); 51f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines ScriptScanner scanner(&in); 52f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines ScriptParser parser(pConfig, 53f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines pScriptFile, 54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines scanner, 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_ObjectReader, 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_ArchiveReader, 5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_DynObjReader, 58f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_GroupReader); 5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines return parser.parse() == 0; 60f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 61f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 63