forked from OSchip/llvm-project
Revert "Add support library."
This reverts commit r221583. llvm-svn: 221649
This commit is contained in:
parent
1987862287
commit
48b9fc7981
|
@ -1,45 +0,0 @@
|
|||
//===-- lld/Support/NumParse.h - Number parsing -----------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
///
|
||||
/// \file
|
||||
/// \brief Parses string in various formats to decimal.
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLD_SUPPORT_NUM_PARSE_H
|
||||
#define LLD_SUPPORT_NUM_PARSE_H
|
||||
|
||||
#include "lld/Core/LLVM.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <memory>
|
||||
#include <system_error>
|
||||
#include <vector>
|
||||
|
||||
namespace lld {
|
||||
|
||||
/// \brief Convert a string in decimal to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseDecimal(StringRef str);
|
||||
|
||||
/// \brief Convert a string in octal to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseOctal(StringRef str);
|
||||
|
||||
/// \brief Convert a string in Binary to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseBinary(StringRef str);
|
||||
|
||||
/// \brief Convert a string in Hexadecimal to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseHex(StringRef str);
|
||||
|
||||
/// \brief Parse a number represested in a string as
|
||||
// Hexadecimal, Octal, Binary or Decimal to decimal
|
||||
llvm::ErrorOr<uint64_t> parseNum(StringRef str, bool parseExtensions = true);
|
||||
}
|
||||
|
||||
#endif // LLD_SUPPORT_NUM_PARSE_H
|
|
@ -3,4 +3,3 @@ add_subdirectory(Core)
|
|||
add_subdirectory(Driver)
|
||||
add_subdirectory(Passes)
|
||||
add_subdirectory(ReaderWriter)
|
||||
add_subdirectory(Support)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
LLD_LEVEL := ..
|
||||
|
||||
# ARCMigrate and Rewrite are always needed because of libclang.
|
||||
PARALLEL_DIRS = Config Core Driver Passes ReaderWriter Support
|
||||
PARALLEL_DIRS = Config Core Driver Passes ReaderWriter
|
||||
|
||||
include $(LLD_LEVEL)/../../Makefile.config
|
||||
|
||||
|
|
|
@ -18,5 +18,4 @@ add_lld_library(lldReaderWriter
|
|||
target_link_libraries(lldReaderWriter ${cmake_2_8_12_INTERFACE}
|
||||
lldCore
|
||||
lldPasses
|
||||
lldSupport
|
||||
)
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "lld/ReaderWriter/LinkerScript.h"
|
||||
#include "lld/Support/NumParse.h"
|
||||
|
||||
namespace lld {
|
||||
namespace script {
|
||||
|
@ -90,7 +89,56 @@ void Token::dump(raw_ostream &os) const {
|
|||
os << _range << "\n";
|
||||
}
|
||||
|
||||
bool parseHexToByteStream(StringRef str, std::string &buf) {
|
||||
static llvm::ErrorOr<uint64_t> parseDecimal(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res *= 10;
|
||||
if (c < '0' || c > '9')
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
res += c - '0';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static llvm::ErrorOr<uint64_t> parseOctal(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res <<= 3;
|
||||
if (c < '0' || c > '7')
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
res += c - '0';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static llvm::ErrorOr<uint64_t> parseBinary(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res <<= 1;
|
||||
if (c != '0' && c != '1')
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
res += c - '0';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static llvm::ErrorOr<uint64_t> parseHex(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res <<= 4;
|
||||
if (c >= '0' && c <= '9')
|
||||
res += c - '0';
|
||||
else if (c >= 'a' && c <= 'f')
|
||||
res += c - 'a' + 10;
|
||||
else if (c >= 'A' && c <= 'F')
|
||||
res += c - 'A' + 10;
|
||||
else
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static bool parseHexToByteStream(StringRef str, std::string &buf) {
|
||||
unsigned char byte = 0;
|
||||
bool dumpByte = str.size() % 2;
|
||||
for (auto &c : str) {
|
||||
|
@ -130,6 +178,63 @@ static void dumpByteStream(raw_ostream &os, StringRef stream) {
|
|||
}
|
||||
}
|
||||
|
||||
static llvm::ErrorOr<uint64_t> parseNum(StringRef str) {
|
||||
unsigned multiplier = 1;
|
||||
enum NumKind { decimal, hex, octal, binary };
|
||||
NumKind kind = llvm::StringSwitch<NumKind>(str)
|
||||
.StartsWith("0x", hex)
|
||||
.StartsWith("0X", hex)
|
||||
.StartsWith("0", octal)
|
||||
.Default(decimal);
|
||||
|
||||
// Parse scale
|
||||
if (str.endswith("K")) {
|
||||
multiplier = 1 << 10;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith("M")) {
|
||||
multiplier = 1 << 20;
|
||||
str = str.drop_back();
|
||||
}
|
||||
|
||||
// Parse type
|
||||
if (str.endswith_lower("o")) {
|
||||
kind = octal;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith_lower("h")) {
|
||||
kind = hex;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith_lower("d")) {
|
||||
kind = decimal;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith_lower("b")) {
|
||||
kind = binary;
|
||||
str = str.drop_back();
|
||||
}
|
||||
|
||||
llvm::ErrorOr<uint64_t> res(0);
|
||||
switch (kind) {
|
||||
case hex:
|
||||
if (str.startswith_lower("0x"))
|
||||
str = str.drop_front(2);
|
||||
res = parseHex(str);
|
||||
break;
|
||||
case octal:
|
||||
res = parseOctal(str);
|
||||
break;
|
||||
case decimal:
|
||||
res = parseDecimal(str);
|
||||
break;
|
||||
case binary:
|
||||
res = parseBinary(str);
|
||||
break;
|
||||
}
|
||||
if (res.getError())
|
||||
return res;
|
||||
|
||||
*res = *res * multiplier;
|
||||
return res;
|
||||
}
|
||||
|
||||
bool Lexer::canStartNumber(char c) const {
|
||||
return '0' <= c && c <= '9';
|
||||
}
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
add_lld_library(lldSupport
|
||||
NumParse.cpp
|
||||
)
|
|
@ -1,133 +0,0 @@
|
|||
//===-- lld/Support/NumParse.cpp - Number parsing ---------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
///
|
||||
/// \file
|
||||
/// \brief Parses string in various formats to decimal.
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "lld/Support/NumParse.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace lld {
|
||||
/// \brief Convert a string in decimal to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseDecimal(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res *= 10;
|
||||
if (c < '0' || c > '9')
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
res += c - '0';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// \brief Convert a string in octal to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseOctal(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res <<= 3;
|
||||
if (c < '0' || c > '7')
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
res += c - '0';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// \brief Convert a string in Binary to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseBinary(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res <<= 1;
|
||||
if (c != '0' && c != '1')
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
res += c - '0';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// \brief Convert a string in Hexadecimal to decimal.
|
||||
llvm::ErrorOr<uint64_t> parseHex(StringRef str) {
|
||||
uint64_t res = 0;
|
||||
for (auto &c : str) {
|
||||
res <<= 4;
|
||||
if (c >= '0' && c <= '9')
|
||||
res += c - '0';
|
||||
else if (c >= 'a' && c <= 'f')
|
||||
res += c - 'a' + 10;
|
||||
else if (c >= 'A' && c <= 'F')
|
||||
res += c - 'A' + 10;
|
||||
else
|
||||
return llvm::ErrorOr<uint64_t>(std::make_error_code(std::errc::io_error));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// \brief Parse a number represested in a string as
|
||||
// Hexadecimal, Octal, Binary or Decimal to decimal
|
||||
llvm::ErrorOr<uint64_t> parseNum(StringRef str, bool parseExtensions) {
|
||||
unsigned multiplier = 1;
|
||||
enum NumKind { decimal, hex, octal, binary };
|
||||
NumKind kind = llvm::StringSwitch<NumKind>(str)
|
||||
.StartsWith("0x", hex)
|
||||
.StartsWith("0X", hex)
|
||||
.StartsWith("0", octal)
|
||||
.Default(decimal);
|
||||
|
||||
if (parseExtensions) {
|
||||
// Parse scale
|
||||
if (str.endswith("K")) {
|
||||
multiplier = 1 << 10;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith("M")) {
|
||||
multiplier = 1 << 20;
|
||||
str = str.drop_back();
|
||||
}
|
||||
|
||||
// Parse type
|
||||
if (str.endswith_lower("o")) {
|
||||
kind = octal;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith_lower("h")) {
|
||||
kind = hex;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith_lower("d")) {
|
||||
kind = decimal;
|
||||
str = str.drop_back();
|
||||
} else if (str.endswith_lower("b")) {
|
||||
kind = binary;
|
||||
str = str.drop_back();
|
||||
}
|
||||
}
|
||||
|
||||
llvm::ErrorOr<uint64_t> res(0);
|
||||
switch (kind) {
|
||||
case hex:
|
||||
if (str.startswith_lower("0x"))
|
||||
str = str.drop_front(2);
|
||||
res = parseHex(str);
|
||||
break;
|
||||
case octal:
|
||||
res = parseOctal(str);
|
||||
break;
|
||||
case decimal:
|
||||
res = parseDecimal(str);
|
||||
break;
|
||||
case binary:
|
||||
res = parseBinary(str);
|
||||
break;
|
||||
}
|
||||
if (res.getError())
|
||||
return res;
|
||||
|
||||
*res = *res * multiplier;
|
||||
return res;
|
||||
}
|
||||
}
|
|
@ -19,9 +19,9 @@ LEVEL := $(LLD_LEVEL)/../..
|
|||
include $(LEVEL)/Makefile.config
|
||||
|
||||
LINK_COMPONENTS := $(TARGETS_TO_BUILD)
|
||||
USEDLIBS = lldDriver.a lldConfig.a lldSupport.a \
|
||||
USEDLIBS = lldDriver.a lldConfig.a \
|
||||
lldELF.a lldMachO.a lldPasses.a lldPECOFF.a lldYAML.a \
|
||||
lldReaderWriter.a lldCore.a lldSupport.a lldNative.a \
|
||||
lldReaderWriter.a lldCore.a lldNative.a \
|
||||
lldHexagonELFTarget.a lldPPCELFTarget.a lldMipsELFTarget.a \
|
||||
lldX86ELFTarget.a lldX86_64ELFTarget.a lldAArch64ELFTarget.a \
|
||||
LLVMOption.a
|
||||
|
|
|
@ -15,7 +15,5 @@ USEDLIBS = lldDriver.a lldConfig.a \
|
|||
lldHexagonELFTarget.a lldPPCELFTarget.a lldMipsELFTarget.a \
|
||||
lldX86ELFTarget.a lldX86_64ELFTarget.a lldYAML.a \
|
||||
LLVMObject.a LLVMMCParser.a LLVMMC.a LLVMBitReader.a \
|
||||
LLVMCore.a LLVMOption.a LLVMSupport.a lldAArch64ELFTarget.a \
|
||||
lldSupport.a
|
||||
|
||||
LLVMCore.a LLVMOption.a LLVMSupport.a lldAArch64ELFTarget.a
|
||||
include $(LLD_LEVEL)/unittests/Makefile
|
||||
|
|
|
@ -19,6 +19,6 @@ LEVEL := $(LLD_LEVEL)/../..
|
|||
include $(LEVEL)/Makefile.config
|
||||
|
||||
LINK_COMPONENTS := $(TARGETS_TO_BUILD)
|
||||
USEDLIBS = lldReaderWriter.a lldSupport.a LLVMSupport.a
|
||||
USEDLIBS = lldReaderWriter.a LLVMSupport.a
|
||||
|
||||
include $(LLD_LEVEL)/Makefile
|
||||
|
|
Loading…
Reference in New Issue