You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
7 months ago
|
//===- ScriptReader.cpp ---------------------------------------------------===//
|
||
|
//
|
||
|
// The MCLinker Project
|
||
|
//
|
||
|
// This file is distributed under the University of Illinois Open Source
|
||
|
// License. See LICENSE.TXT for details.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
#include "mcld/Script/ScriptReader.h"
|
||
|
|
||
|
#include "mcld/MC/Input.h"
|
||
|
#include "mcld/Script/ScriptFile.h"
|
||
|
#include "mcld/Script/ScriptScanner.h"
|
||
|
#include "mcld/Support/MemoryArea.h"
|
||
|
|
||
|
#include <llvm/ADT/StringRef.h>
|
||
|
|
||
|
#include <istream>
|
||
|
#include <sstream>
|
||
|
|
||
|
namespace mcld {
|
||
|
|
||
|
ScriptReader::ScriptReader(ObjectReader& pObjectReader,
|
||
|
ArchiveReader& pArchiveReader,
|
||
|
DynObjReader& pDynObjReader,
|
||
|
GroupReader& pGroupReader)
|
||
|
: m_ObjectReader(pObjectReader),
|
||
|
m_ArchiveReader(pArchiveReader),
|
||
|
m_DynObjReader(pDynObjReader),
|
||
|
m_GroupReader(pGroupReader) {
|
||
|
}
|
||
|
|
||
|
ScriptReader::~ScriptReader() {
|
||
|
}
|
||
|
|
||
|
/// isMyFormat
|
||
|
bool ScriptReader::isMyFormat(Input& input, bool& doContinue) const {
|
||
|
doContinue = true;
|
||
|
// always return true now
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool ScriptReader::readScript(const LinkerConfig& pConfig,
|
||
|
ScriptFile& pScriptFile) {
|
||
|
Input& input = pScriptFile.input();
|
||
|
size_t size = input.memArea()->size();
|
||
|
llvm::StringRef region = input.memArea()->request(input.fileOffset(), size);
|
||
|
std::stringbuf buf(region.data());
|
||
|
|
||
|
std::istream in(&buf);
|
||
|
ScriptScanner scanner(&in);
|
||
|
ScriptParser parser(pConfig,
|
||
|
pScriptFile,
|
||
|
scanner,
|
||
|
m_ObjectReader,
|
||
|
m_ArchiveReader,
|
||
|
m_DynObjReader,
|
||
|
m_GroupReader);
|
||
|
return parser.parse() == 0;
|
||
|
}
|
||
|
|
||
|
} // namespace mcld
|