[lld] r244226 - COFF: Remove the old COFF linker and make link an alias to link2.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 6 09:19:38 PDT 2015
Author: ruiu
Date: Thu Aug 6 11:19:35 2015
New Revision: 244226
URL: http://llvm.org/viewvc/llvm-project?rev=244226&view=rev
Log:
COFF: Remove the old COFF linker and make link an alias to link2.
It's time to remove old COFF linker because the new one is now complete.
Removed:
lld/trunk/include/lld/Driver/WinLinkModuleDef.h
lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h
lld/trunk/lib/Driver/WinLinkDriver.cpp
lld/trunk/lib/Driver/WinLinkModuleDef.cpp
lld/trunk/lib/Driver/WinLinkOptions.td
lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h
lld/trunk/lib/ReaderWriter/PECOFF/CMakeLists.txt
lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.cpp
lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.h
lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp
lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h
lld/trunk/lib/ReaderWriter/PECOFF/InferSubsystemPass.h
lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.cpp
lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.cpp
lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.h
lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h
lld/trunk/lib/ReaderWriter/PECOFF/PDBPass.h
lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp
lld/trunk/lib/ReaderWriter/PECOFF/Pass.cpp
lld/trunk/lib/ReaderWriter/PECOFF/Pass.h
lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
lld/trunk/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp
lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp
lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.h
lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
lld/trunk/test/pecoff/Inputs/abs.obj.yaml
lld/trunk/test/pecoff/Inputs/alignment.obj.yaml
lld/trunk/test/pecoff/Inputs/alternatename1.obj.yaml
lld/trunk/test/pecoff/Inputs/alternatename2.obj.yaml
lld/trunk/test/pecoff/Inputs/alternatename3.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-ImageBase.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-ImageBase.s
lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.s
lld/trunk/test/pecoff/Inputs/armnt-addr32.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-addr32.s
lld/trunk/test/pecoff/Inputs/armnt-blx23t.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-blx23t.s
lld/trunk/test/pecoff/Inputs/armnt-branch24t.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-branch24t.s
lld/trunk/test/pecoff/Inputs/armnt-exports.def
lld/trunk/test/pecoff/Inputs/armnt-exports.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-import.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-import.s
lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.s
lld/trunk/test/pecoff/Inputs/armnt-mov32t.obj.yaml
lld/trunk/test/pecoff/Inputs/armnt-mov32t.s
lld/trunk/test/pecoff/Inputs/armnt-obj.s
lld/trunk/test/pecoff/Inputs/armnt-obj.yaml
lld/trunk/test/pecoff/Inputs/associative1.obj.yaml
lld/trunk/test/pecoff/Inputs/associative3.obj.yaml
lld/trunk/test/pecoff/Inputs/basereloc.obj.yaml
lld/trunk/test/pecoff/Inputs/bss.asm
lld/trunk/test/pecoff/Inputs/bss.obj
lld/trunk/test/pecoff/Inputs/comdat.obj.yaml
lld/trunk/test/pecoff/Inputs/common-symbol.obj.yaml
lld/trunk/test/pecoff/Inputs/drectve.obj.yaml
lld/trunk/test/pecoff/Inputs/drectve2.obj.yaml
lld/trunk/test/pecoff/Inputs/drectve3.lib
lld/trunk/test/pecoff/Inputs/entry.obj.yaml
lld/trunk/test/pecoff/Inputs/executable.obj.yaml
lld/trunk/test/pecoff/Inputs/executable.s
lld/trunk/test/pecoff/Inputs/export.obj.yaml
lld/trunk/test/pecoff/Inputs/exports.def
lld/trunk/test/pecoff/Inputs/exports2.def
lld/trunk/test/pecoff/Inputs/grouped-sections.asm
lld/trunk/test/pecoff/Inputs/grouped-sections.obj.yaml
lld/trunk/test/pecoff/Inputs/hello.asm
lld/trunk/test/pecoff/Inputs/hello.obj.yaml
lld/trunk/test/pecoff/Inputs/hello64.asm
lld/trunk/test/pecoff/Inputs/hello64.obj.yaml
lld/trunk/test/pecoff/Inputs/hello64lib.asm
lld/trunk/test/pecoff/Inputs/hello64lib.lib
lld/trunk/test/pecoff/Inputs/imagebase.obj.yaml
lld/trunk/test/pecoff/Inputs/library.lib
lld/trunk/test/pecoff/Inputs/machine-type-unknown.obj.yaml
lld/trunk/test/pecoff/Inputs/main.obj.yaml
lld/trunk/test/pecoff/Inputs/merge-largest1.obj.yaml
lld/trunk/test/pecoff/Inputs/merge-largest2.obj.yaml
lld/trunk/test/pecoff/Inputs/merge-same-size1.obj.yaml
lld/trunk/test/pecoff/Inputs/merge-same-size2.obj.yaml
lld/trunk/test/pecoff/Inputs/merge-same-size3.obj.yaml
lld/trunk/test/pecoff/Inputs/nonstandard-sections.obj.yaml
lld/trunk/test/pecoff/Inputs/nop.asm
lld/trunk/test/pecoff/Inputs/nop.obj.yaml
lld/trunk/test/pecoff/Inputs/nop64.obj.yaml
lld/trunk/test/pecoff/Inputs/reloc.obj.yaml
lld/trunk/test/pecoff/Inputs/reloc64.obj.yaml
lld/trunk/test/pecoff/Inputs/resource.rc
lld/trunk/test/pecoff/Inputs/resource.res
lld/trunk/test/pecoff/Inputs/responsefile.txt
lld/trunk/test/pecoff/Inputs/secrel1.obj.yaml
lld/trunk/test/pecoff/Inputs/secrel2.obj.yaml
lld/trunk/test/pecoff/Inputs/seh.c
lld/trunk/test/pecoff/Inputs/seh.obj.yaml
lld/trunk/test/pecoff/Inputs/static-data1.obj.yaml
lld/trunk/test/pecoff/Inputs/static-data2.obj.yaml
lld/trunk/test/pecoff/Inputs/static.lib
lld/trunk/test/pecoff/Inputs/subsystem.main.yaml
lld/trunk/test/pecoff/Inputs/subsystem.winmain.yaml
lld/trunk/test/pecoff/Inputs/tlsused.obj.yaml
lld/trunk/test/pecoff/Inputs/unknown-drectve.obj.yaml
lld/trunk/test/pecoff/Inputs/unwind.obj.yaml
lld/trunk/test/pecoff/Inputs/vars-main-x64.obj.yaml
lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml
lld/trunk/test/pecoff/Inputs/vars-main.c
lld/trunk/test/pecoff/Inputs/vars.c
lld/trunk/test/pecoff/Inputs/vars.dll.yaml
lld/trunk/test/pecoff/Inputs/vars.lib
lld/trunk/test/pecoff/Inputs/vars64.lib
lld/trunk/test/pecoff/Inputs/weak-externals.asm
lld/trunk/test/pecoff/Inputs/weak-externals.obj.yaml
lld/trunk/test/pecoff/alignment.test
lld/trunk/test/pecoff/alternatename.test
lld/trunk/test/pecoff/armnt-ImageBase.test
lld/trunk/test/pecoff/armnt-addr32-exec.test
lld/trunk/test/pecoff/armnt-addr32.test
lld/trunk/test/pecoff/armnt-address-of-entry-point.test
lld/trunk/test/pecoff/armnt-blx23t.test
lld/trunk/test/pecoff/armnt-branch24t.test
lld/trunk/test/pecoff/armnt-exports.s
lld/trunk/test/pecoff/armnt-exports.test
lld/trunk/test/pecoff/armnt-imports.test
lld/trunk/test/pecoff/armnt-mov32t-exec.test
lld/trunk/test/pecoff/armnt-movt32t.test
lld/trunk/test/pecoff/armnt.test
lld/trunk/test/pecoff/associative.test
lld/trunk/test/pecoff/base-reloc.test
lld/trunk/test/pecoff/baseaddr.test
lld/trunk/test/pecoff/bss-section.test
lld/trunk/test/pecoff/comdat.test
lld/trunk/test/pecoff/common-symbol.test
lld/trunk/test/pecoff/conflicting-machine.test
lld/trunk/test/pecoff/delayimport.test
lld/trunk/test/pecoff/dll.test
lld/trunk/test/pecoff/dosstub.test
lld/trunk/test/pecoff/drectve.test
lld/trunk/test/pecoff/dynamic.test
lld/trunk/test/pecoff/dynamicbase.test
lld/trunk/test/pecoff/entry.test
lld/trunk/test/pecoff/export-warning.test
lld/trunk/test/pecoff/export.test
lld/trunk/test/pecoff/exportlib.test
lld/trunk/test/pecoff/exportlib2.test
lld/trunk/test/pecoff/grouped-sections.test
lld/trunk/test/pecoff/hello.test
lld/trunk/test/pecoff/hello64.test
lld/trunk/test/pecoff/help.test
lld/trunk/test/pecoff/imagebase.test
lld/trunk/test/pecoff/importlib.test
lld/trunk/test/pecoff/include.test
lld/trunk/test/pecoff/lib.test
lld/trunk/test/pecoff/libarg.test
lld/trunk/test/pecoff/localyimported.test
lld/trunk/test/pecoff/long-section-name.test
lld/trunk/test/pecoff/machinetype.test
lld/trunk/test/pecoff/manifest.test
lld/trunk/test/pecoff/merge-largest.test
lld/trunk/test/pecoff/merge-same-size.test
lld/trunk/test/pecoff/multi.test
lld/trunk/test/pecoff/noentry.test
lld/trunk/test/pecoff/nonstandard-sections.test
lld/trunk/test/pecoff/options.test
lld/trunk/test/pecoff/pe32plus.test
lld/trunk/test/pecoff/reloc.test
lld/trunk/test/pecoff/reloc64.test
lld/trunk/test/pecoff/resource.test
lld/trunk/test/pecoff/responsefile.test
lld/trunk/test/pecoff/safeseh.test
lld/trunk/test/pecoff/secrel.test
lld/trunk/test/pecoff/section-attribute.test
lld/trunk/test/pecoff/section-renaming.test
lld/trunk/test/pecoff/seh.test
lld/trunk/test/pecoff/seh64.test
lld/trunk/test/pecoff/subsystem.test
lld/trunk/test/pecoff/tls.test
lld/trunk/test/pecoff/trivial.test
lld/trunk/test/pecoff/unknown-drectve.test
lld/trunk/test/pecoff/weak-external.test
lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp
lld/trunk/unittests/DriverTests/WinLinkModuleDefTest.cpp
Modified:
lld/trunk/include/lld/Driver/Driver.h
lld/trunk/lib/Driver/CMakeLists.txt
lld/trunk/lib/Driver/UniversalDriver.cpp
lld/trunk/lib/ReaderWriter/CMakeLists.txt
lld/trunk/test/COFF/alternatename.test
lld/trunk/test/COFF/ar-comdat.test
lld/trunk/test/COFF/armnt-blx23t.test
lld/trunk/test/COFF/armnt-branch24t.test
lld/trunk/test/COFF/armnt-entry-point.test
lld/trunk/test/COFF/armnt-imports.test
lld/trunk/test/COFF/armnt-mov32t-exec.test
lld/trunk/test/COFF/armnt-movt32t.test
lld/trunk/test/COFF/base.test
lld/trunk/test/COFF/baserel.test
lld/trunk/test/COFF/common.test
lld/trunk/test/COFF/conflict.test
lld/trunk/test/COFF/debug.test
lld/trunk/test/COFF/defparser.test
lld/trunk/test/COFF/delayimports.test
lld/trunk/test/COFF/delayimports32.test
lld/trunk/test/COFF/dll.test
lld/trunk/test/COFF/driver.test
lld/trunk/test/COFF/entry-inference.test
lld/trunk/test/COFF/entry-inference2.test
lld/trunk/test/COFF/entry-inference32.test
lld/trunk/test/COFF/entry-mangled.test
lld/trunk/test/COFF/entrylib.ll
lld/trunk/test/COFF/export.test
lld/trunk/test/COFF/export32.test
lld/trunk/test/COFF/failifmismatch.test
lld/trunk/test/COFF/filetype.test
lld/trunk/test/COFF/force.test
lld/trunk/test/COFF/heap.test
lld/trunk/test/COFF/hello32.test
lld/trunk/test/COFF/help.test
lld/trunk/test/COFF/icf.test
lld/trunk/test/COFF/imports-mangle.test
lld/trunk/test/COFF/imports.test
lld/trunk/test/COFF/include.test
lld/trunk/test/COFF/include2.test
lld/trunk/test/COFF/internal.test
lld/trunk/test/COFF/largeaddressaware.test
lld/trunk/test/COFF/libpath.test
lld/trunk/test/COFF/linkenv.test
lld/trunk/test/COFF/lldmap.test
lld/trunk/test/COFF/loadcfg.ll
lld/trunk/test/COFF/loadcfg.test
lld/trunk/test/COFF/loadcfg32.test
lld/trunk/test/COFF/locally-imported.test
lld/trunk/test/COFF/locally-imported32.test
lld/trunk/test/COFF/long-section-name.test
lld/trunk/test/COFF/lto-chkstk.ll
lld/trunk/test/COFF/lto-comdat.ll
lld/trunk/test/COFF/lto-linker-opts.ll
lld/trunk/test/COFF/lto-new-symbol.ll
lld/trunk/test/COFF/lto.ll
lld/trunk/test/COFF/machine.test
lld/trunk/test/COFF/manifest.test
lld/trunk/test/COFF/merge.test
lld/trunk/test/COFF/nodefaultlib.test
lld/trunk/test/COFF/noentry.test
lld/trunk/test/COFF/opt.test
lld/trunk/test/COFF/options.test
lld/trunk/test/COFF/order.test
lld/trunk/test/COFF/out.test
lld/trunk/test/COFF/reloc-arm.test
lld/trunk/test/COFF/reloc-x64.test
lld/trunk/test/COFF/reloc-x86.test
lld/trunk/test/COFF/resource.test
lld/trunk/test/COFF/responsefile.test
lld/trunk/test/COFF/safeseh.test
lld/trunk/test/COFF/seh.test
lld/trunk/test/COFF/sort-debug.test
lld/trunk/test/COFF/stack.test
lld/trunk/test/COFF/subsystem-inference.test
lld/trunk/test/COFF/subsystem.test
lld/trunk/test/COFF/symtab.test
lld/trunk/test/COFF/tls.test
lld/trunk/test/COFF/tls32.test
lld/trunk/test/COFF/unwind.test
lld/trunk/test/COFF/version.test
lld/trunk/test/COFF/weak-external.test
lld/trunk/test/COFF/weak-external2.test
lld/trunk/test/COFF/weak-external3.test
lld/trunk/unittests/DriverTests/CMakeLists.txt
Modified: lld/trunk/include/lld/Driver/Driver.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Driver/Driver.h?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/include/lld/Driver/Driver.h (original)
+++ lld/trunk/include/lld/Driver/Driver.h Thu Aug 6 11:19:35 2015
@@ -117,31 +117,6 @@ private:
};
/// Driver for Windows 'link.exe' command line options
-class WinLinkDriver : public Driver {
-public:
- /// Parses command line arguments same as Windows link.exe and performs link.
- /// Returns true iff there was an error.
- static bool linkPECOFF(llvm::ArrayRef<const char *> args,
- raw_ostream &diag = llvm::errs());
-
- /// Uses Windows style link command line options to fill in options struct.
- /// Returns true iff there was an error.
- static bool parse(llvm::ArrayRef<const char *> args,
- PECOFFLinkingContext &info,
- raw_ostream &diag = llvm::errs(), bool isDirective = false);
-
- // Same as parse(), but restricted to the context of directives.
- static bool parseDirectives(int argc, const char **argv,
- PECOFFLinkingContext &info,
- raw_ostream &diag = llvm::errs()) {
- return parse(llvm::makeArrayRef(argv, argc), info, diag, true);
- }
-
-private:
- WinLinkDriver() = delete;
-};
-
-/// Driver for Windows 'link.exe' command line options
namespace coff {
void link(llvm::ArrayRef<const char *> args);
}
Removed: lld/trunk/include/lld/Driver/WinLinkModuleDef.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Driver/WinLinkModuleDef.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/include/lld/Driver/WinLinkModuleDef.h (original)
+++ lld/trunk/include/lld/Driver/WinLinkModuleDef.h (removed)
@@ -1,200 +0,0 @@
-//===- lld/Driver/WinLinkModuleDef.h --------------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief Windows module definition file parser.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_DRIVER_WIN_LINK_MODULE_DEF_H
-#define LLD_DRIVER_WIN_LINK_MODULE_DEF_H
-
-#include "lld/Core/LLVM.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/ADT/Optional.h"
-#include "llvm/Support/Allocator.h"
-#include <vector>
-
-namespace lld {
-namespace moduledef {
-
-enum class Kind {
- unknown,
- eof,
- identifier,
- comma,
- equal,
- kw_base,
- kw_data,
- kw_exports,
- kw_heapsize,
- kw_library,
- kw_name,
- kw_noname,
- kw_private,
- kw_stacksize,
- kw_version,
-};
-
-class Token {
-public:
- Token() : _kind(Kind::unknown) {}
- Token(Kind kind, StringRef range) : _kind(kind), _range(range) {}
-
- Kind _kind;
- StringRef _range;
-};
-
-class Lexer {
-public:
- explicit Lexer(std::unique_ptr<MemoryBuffer> mb) : _buffer(mb->getBuffer()) {
- _sourceManager.AddNewSourceBuffer(std::move(mb), llvm::SMLoc());
- }
-
- Token lex();
- const llvm::SourceMgr &getSourceMgr() const { return _sourceManager; }
-
-private:
- StringRef _buffer;
- llvm::SourceMgr _sourceManager;
-};
-
-class Directive {
-public:
- enum class Kind { exports, heapsize, library, name, stacksize, version };
-
- Kind getKind() const { return _kind; }
- virtual ~Directive() {}
-
-protected:
- explicit Directive(Kind k) : _kind(k) {}
-
-private:
- Kind _kind;
-};
-
-class Exports : public Directive {
-public:
- explicit Exports(const std::vector<PECOFFLinkingContext::ExportDesc> &exports)
- : Directive(Kind::exports), _exports(exports) {}
-
- static bool classof(const Directive *dir) {
- return dir->getKind() == Kind::exports;
- }
-
- const std::vector<PECOFFLinkingContext::ExportDesc> &getExports() const {
- return _exports;
- }
-
-private:
- const std::vector<PECOFFLinkingContext::ExportDesc> _exports;
-};
-
-template <Directive::Kind kind>
-class MemorySize : public Directive {
-public:
- MemorySize(uint64_t reserve, uint64_t commit)
- : Directive(kind), _reserve(reserve), _commit(commit) {}
-
- static bool classof(const Directive *dir) {
- return dir->getKind() == kind;
- }
-
- uint64_t getReserve() const { return _reserve; }
- uint64_t getCommit() const { return _commit; }
-
-private:
- const uint64_t _reserve;
- const uint64_t _commit;
-};
-
-typedef MemorySize<Directive::Kind::heapsize> Heapsize;
-typedef MemorySize<Directive::Kind::stacksize> Stacksize;
-
-class Name : public Directive {
-public:
- Name(StringRef outputPath, uint64_t baseaddr)
- : Directive(Kind::name), _outputPath(outputPath), _baseaddr(baseaddr) {}
-
- static bool classof(const Directive *dir) {
- return dir->getKind() == Kind::name;
- }
-
- StringRef getOutputPath() const { return _outputPath; }
- uint64_t getBaseAddress() const { return _baseaddr; }
-
-private:
- const std::string _outputPath;
- const uint64_t _baseaddr;
-};
-
-class Library : public Directive {
-public:
- Library(StringRef name, uint64_t baseaddr)
- : Directive(Kind::library), _name(name), _baseaddr(baseaddr) {}
-
- static bool classof(const Directive *dir) {
- return dir->getKind() == Kind::library;
- }
-
- StringRef getName() const { return _name; }
- uint64_t getBaseAddress() const { return _baseaddr; }
-
-private:
- const std::string _name;
- const uint64_t _baseaddr;
-};
-
-class Version : public Directive {
-public:
- Version(int major, int minor)
- : Directive(Kind::version), _major(major), _minor(minor) {}
-
- static bool classof(const Directive *dir) {
- return dir->getKind() == Kind::version;
- }
-
- int getMajorVersion() const { return _major; }
- int getMinorVersion() const { return _minor; }
-
-private:
- const int _major;
- const int _minor;
-};
-
-class Parser {
-public:
- Parser(Lexer &lex, llvm::BumpPtrAllocator &alloc)
- : _lex(lex), _alloc(alloc) {}
-
- bool parse(std::vector<Directive *> &ret);
-
-private:
- void consumeToken();
- bool consumeTokenAsInt(uint64_t &result);
- bool expectAndConsume(Kind kind, Twine msg);
-
- void ungetToken();
- void error(const Token &tok, Twine msg);
-
- bool parseOne(Directive *&dir);
- bool parseExport(PECOFFLinkingContext::ExportDesc &result);
- bool parseMemorySize(uint64_t &reserve, uint64_t &commit);
- bool parseName(std::string &outfile, uint64_t &baseaddr);
- bool parseVersion(int &major, int &minor);
-
- Lexer &_lex;
- llvm::BumpPtrAllocator &_alloc;
- Token _tok;
- std::vector<Token> _tokBuf;
-};
-}
-}
-
-#endif
Removed: lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h (removed)
@@ -1,445 +0,0 @@
-//===- lld/ReaderWriter/PECOFFLinkingContext.h ----------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PECOFF_LINKING_CONTEXT_H
-#define LLD_READER_WRITER_PECOFF_LINKING_CONTEXT_H
-
-#include "lld/Core/LinkingContext.h"
-#include "lld/Core/Reader.h"
-#include "lld/Core/Writer.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/Support/Allocator.h"
-#include "llvm/Support/COFF.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/FileUtilities.h"
-#include <map>
-#include <mutex>
-#include <set>
-#include <vector>
-
-using llvm::COFF::MachineTypes;
-using llvm::COFF::WindowsSubsystem;
-
-static const uint8_t DEFAULT_DOS_STUB[128] = {'M', 'Z'};
-
-namespace lld {
-
-class PECOFFLinkingContext : public LinkingContext {
-public:
- PECOFFLinkingContext() { setDeadStripping(true); }
-
- struct Version {
- Version(int v1, int v2) : majorVersion(v1), minorVersion(v2) {}
- int majorVersion;
- int minorVersion;
- };
-
- struct ExportDesc {
- ExportDesc()
- : ordinal(-1), noname(false), isData(false), isPrivate(false) {}
-
- bool operator<(const ExportDesc &other) const {
- return getExternalName().compare(other.getExternalName()) < 0;
- }
-
- StringRef getRealName() const {
- return mangledName.empty() ? name : mangledName;
- }
-
- StringRef getExternalName() const {
- return externalName.empty() ? name : externalName;
- }
-
- std::string name;
- std::string externalName;
- std::string mangledName;
- int ordinal;
- bool noname;
- bool isData;
- bool isPrivate;
- };
-
- typedef bool (*ParseDirectives)(int, const char **, PECOFFLinkingContext &,
- raw_ostream &);
-
- /// \brief Casting support
- static bool classof(const LinkingContext *info) { return true; }
-
- Writer &writer() const override;
- bool validateImpl(raw_ostream &diagnostics) override;
-
- void addPasses(PassManager &pm) override;
-
- void createImplicitFiles(std::vector<std::unique_ptr<File>> &result) override;
-
- bool is64Bit() const {
- return _machineType == llvm::COFF::IMAGE_FILE_MACHINE_AMD64;
- }
-
- // Returns a set of all defined symbols in input files.
- const std::set<std::string> &definedSymbols();
-
- /// Page size of x86 processor. Some data needs to be aligned at page boundary
- /// when loaded into memory.
- uint64_t getPageSize() const {
- return 0x1000;
- }
-
- void appendInputSearchPath(StringRef dirPath) {
- _inputSearchPaths.push_back(dirPath);
- }
-
- const std::vector<StringRef> getInputSearchPaths() {
- return _inputSearchPaths;
- }
-
- void registerTemporaryFile(StringRef path) {
- std::unique_ptr<llvm::FileRemover> fileRemover(
- new llvm::FileRemover(Twine(allocate(path))));
- _tempFiles.push_back(std::move(fileRemover));
- }
-
- StringRef searchLibraryFile(StringRef path) const;
-
- StringRef decorateSymbol(StringRef name) const;
- StringRef undecorateSymbol(StringRef name) const;
-
- void setEntrySymbolName(StringRef name) { _entry = name; }
- StringRef getEntrySymbolName() const { return _entry; }
-
- void setHasEntry(bool val) { _hasEntry = val; }
- bool hasEntry() const { return _hasEntry; }
-
- void setBaseAddress(uint64_t addr) { _baseAddress = addr; }
- uint64_t getBaseAddress() const;
-
- void setStackReserve(uint64_t size) { _stackReserve = size; }
- void setStackCommit(uint64_t size) { _stackCommit = size; }
- uint64_t getStackReserve() const { return _stackReserve; }
- uint64_t getStackCommit() const { return _stackCommit; }
-
- void setHeapReserve(uint64_t size) { _heapReserve = size; }
- void setHeapCommit(uint64_t size) { _heapCommit = size; }
- uint64_t getHeapReserve() const { return _heapReserve; }
- uint64_t getHeapCommit() const { return _heapCommit; }
-
- void setSectionDefaultAlignment(uint32_t val) {
- _sectionDefaultAlignment = val;
- }
- uint32_t getSectionDefaultAlignment() const {
- return _sectionDefaultAlignment;
- }
-
- void setSubsystem(WindowsSubsystem ss) { _subsystem = ss; }
- WindowsSubsystem getSubsystem() const { return _subsystem; }
-
- void setMachineType(MachineTypes type) { _machineType = type; }
- MachineTypes getMachineType() const { return _machineType; }
-
- void setImageVersion(const Version &version) { _imageVersion = version; }
- Version getImageVersion() const { return _imageVersion; }
-
- void setMinOSVersion(const Version &version) { _minOSVersion = version; }
- Version getMinOSVersion() const { return _minOSVersion; }
-
- void setNxCompat(bool nxCompat) { _nxCompat = nxCompat; }
- bool isNxCompat() const { return _nxCompat; }
-
- void setLargeAddressAware(bool val) { _largeAddressAware = val; }
- bool getLargeAddressAware() const { return _largeAddressAware; }
-
- void setAllowBind(bool val) { _allowBind = val; }
- bool getAllowBind() const { return _allowBind; }
-
- void setAllowIsolation(bool val) { _allowIsolation = val; }
- bool getAllowIsolation() const { return _allowIsolation; }
-
- void setSwapRunFromCD(bool val) { _swapRunFromCD = val; }
- bool getSwapRunFromCD() const { return _swapRunFromCD; }
-
- void setSwapRunFromNet(bool val) { _swapRunFromNet = val; }
- bool getSwapRunFromNet() const { return _swapRunFromNet; }
-
- void setBaseRelocationEnabled(bool val) { _baseRelocationEnabled = val; }
- bool getBaseRelocationEnabled() const { return _baseRelocationEnabled; }
-
- void setTerminalServerAware(bool val) { _terminalServerAware = val; }
- bool isTerminalServerAware() const { return _terminalServerAware; }
-
- void setDynamicBaseEnabled(bool val) { _dynamicBaseEnabled = val; }
- bool getDynamicBaseEnabled() const { return _dynamicBaseEnabled; }
-
- void setCreateManifest(bool val) { _createManifest = val; }
- bool getCreateManifest() const { return _createManifest; }
-
- void setManifestOutputPath(std::string val) { _manifestOutputPath = val; }
- const std::string &getManifestOutputPath() const {
- return _manifestOutputPath;
- }
-
- void setEmbedManifest(bool val) { _embedManifest = val; }
- bool getEmbedManifest() const { return _embedManifest; }
-
- void setManifestId(int val) { _manifestId = val; }
- int getManifestId() const { return _manifestId; }
-
- void setManifestUAC(bool val) { _manifestUAC = val; }
- bool getManifestUAC() const { return _manifestUAC; }
-
- void setManifestLevel(std::string val) { _manifestLevel = std::move(val); }
- const std::string &getManifestLevel() const { return _manifestLevel; }
-
- void setManifestUiAccess(std::string val) { _manifestUiAccess = val; }
- const std::string &getManifestUiAccess() const { return _manifestUiAccess; }
-
- void setManifestDependency(std::string val) { _manifestDependency = val; }
- const std::string &getManifestDependency() const {
- return _manifestDependency;
- }
-
- void setIsDll(bool val) { _isDll = val; }
- bool isDll() const { return _isDll; }
-
- void setSafeSEH(bool val) {
- if (val)
- _requireSEH = true;
- else
- _noSEH = true;
- }
- bool requireSEH() const { return _requireSEH; }
- bool noSEH() const { return _noSEH; }
-
- void setHighEntropyVA(bool val) { _highEntropyVA = val; }
- bool getHighEntropyVA() const { return _highEntropyVA; }
-
- void setOutputImportLibraryPath(const std::string &val) { _implib = val; }
- std::string getOutputImportLibraryPath() const;
-
- void setDebug(bool val) { _debug = val; }
- bool getDebug() { return _debug; }
-
- void setPDBFilePath(StringRef str) { _pdbFilePath = str; }
- std::string getPDBFilePath() const;
-
- void addDelayLoadDLL(StringRef dll) {
- _delayLoadDLLs.insert(dll.lower());
- }
- bool isDelayLoadDLL(StringRef dll) const {
- return _delayLoadDLLs.count(dll.lower()) == 1;
- }
-
- StringRef getOutputSectionName(StringRef sectionName) const;
- bool addSectionRenaming(raw_ostream &diagnostics,
- StringRef from, StringRef to);
-
- const std::set<std::string> &getAlternateNames(StringRef name) {
- return _alternateNames[name];
- }
-
- void addAlternateName(StringRef weak, StringRef def) {
- _alternateNames[def].insert(weak);
- }
-
- void addNoDefaultLib(StringRef path) {
- if (path.endswith_lower(".lib"))
- _noDefaultLibs.insert(path.drop_back(4).lower());
- else
- _noDefaultLibs.insert(path.lower());
- }
-
- bool hasNoDefaultLib(StringRef path) const {
- if (path.endswith_lower(".lib"))
- return _noDefaultLibs.count(path.drop_back(4).lower()) > 0;
- return _noDefaultLibs.count(path.lower()) > 0;
- }
-
- void setNoDefaultLibAll(bool val) { _noDefaultLibAll = val; }
- bool getNoDefaultLibAll() const { return _noDefaultLibAll; }
-
- void setSectionSetMask(StringRef sectionName, uint32_t flags);
- void setSectionClearMask(StringRef sectionName, uint32_t flags);
- uint32_t getSectionAttributes(StringRef sectionName, uint32_t flags) const;
-
- void setDosStub(ArrayRef<uint8_t> data) { _dosStub = data; }
- ArrayRef<uint8_t> getDosStub() const { return _dosStub; }
-
- void addDllExport(ExportDesc &desc);
- std::vector<ExportDesc> &getDllExports() { return _dllExports; }
- const std::vector<ExportDesc> &getDllExports() const { return _dllExports; }
-
- StringRef getDelayLoadHelperName() const {
- return is64Bit() ? "__delayLoadHelper2" : "___delayLoadHelper2 at 8";
- }
-
- llvm::BumpPtrAllocator &getAllocator() { return _allocator; }
-
- StringRef allocate(StringRef ref) const {
- _allocMutex.lock();
- char *x = _allocator.Allocate<char>(ref.size() + 1);
- _allocMutex.unlock();
- memcpy(x, ref.data(), ref.size());
- x[ref.size()] = '\0';
- return x;
- }
-
- ArrayRef<uint8_t> allocate(ArrayRef<uint8_t> array) const {
- size_t size = array.size();
- _allocMutex.lock();
- uint8_t *p = _allocator.Allocate<uint8_t>(size);
- _allocMutex.unlock();
- memcpy(p, array.data(), size);
- return ArrayRef<uint8_t>(p, p + array.size());
- }
-
- template <typename T> T &allocateCopy(const T &x) const {
- _allocMutex.lock();
- T *r = new (_allocator) T(x);
- _allocMutex.unlock();
- return *r;
- }
-
- void addLibraryFile(std::unique_ptr<FileNode> file);
-
- void setModuleDefinitionFile(const std::string val) {
- _moduleDefinitionFile = val;
- }
- std::string getModuleDefinitionFile() const {
- return _moduleDefinitionFile;
- }
-
- std::recursive_mutex &getMutex() { return _mutex; }
-
- void setParseDirectives(ParseDirectives parseDirectives) {
- _parseDirectives = parseDirectives;
- }
-
- ParseDirectives getParseDirectives() {
- return _parseDirectives;
- }
-
-protected:
- /// Method to create a internal file for the entry symbol
- std::unique_ptr<File> createEntrySymbolFile() const override;
-
- /// Method to create a internal file for an undefined symbol
- std::unique_ptr<File> createUndefinedSymbolFile() const override;
-
-private:
- enum : uint64_t {
- invalidBaseAddress = UINT64_MAX,
- pe32DefaultBaseAddress = 0x400000U,
- pe32PlusDefaultBaseAddress = 0x140000000U
- };
-
- std::recursive_mutex _mutex;
- mutable std::mutex _allocMutex;
-
- std::string _entry;
-
- // False if /noentry option is given.
- bool _hasEntry = true;
-
- // The start address for the program. The default value for the executable is
- // 0x400000, but can be altered using /base command line option.
- uint64_t _baseAddress = invalidBaseAddress;
- uint64_t _stackReserve = 1024 * 1024;
- uint64_t _stackCommit = 4096;
- uint64_t _heapReserve = 1024 * 1024;
- uint64_t _heapCommit = 4096;
- bool _noDefaultLibAll = false;
- uint32_t _sectionDefaultAlignment = 4096;
- WindowsSubsystem _subsystem = llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN;
- MachineTypes _machineType = llvm::COFF::IMAGE_FILE_MACHINE_I386;
- Version _imageVersion = {0, 0};
- Version _minOSVersion = {6, 0};
- bool _nxCompat = true;
- bool _largeAddressAware = false;
- bool _allowBind = true;
- bool _allowIsolation = true;
- bool _swapRunFromCD = false;
- bool _swapRunFromNet = false;
- bool _baseRelocationEnabled = true;
- bool _terminalServerAware = true;
- bool _dynamicBaseEnabled = true;
- bool _createManifest = true;
- std::string _manifestOutputPath;
- bool _embedManifest = false;
- int _manifestId = 1;
- bool _manifestUAC = true;
- std::string _manifestLevel = "'asInvoker'";
- std::string _manifestUiAccess = "'false'";
- std::string _manifestDependency;
- bool _isDll = false;
- bool _highEntropyVA = true;
-
- // True if /SAFESEH option is specified. Valid only for x86. If true, LLD will
- // produce an image with SEH table. If any modules were not compatible with
- // SEH, LLD will exit with an error.
- bool _requireSEH = false;
-
- // True if /SAFESEH:no option is specified. Valid only for x86. If true, LLD
- // will not produce an image with SEH table even if all input object files are
- // compatible with SEH.
- bool _noSEH = false;
-
- // /IMPLIB command line option.
- std::string _implib = "";
-
- // True if /DEBUG is given.
- bool _debug = false;
-
- // PDB file output path. NB: this is dummy -- LLD just creates the empty file.
- std::string _pdbFilePath = "";
-
- // /DELAYLOAD option.
- std::set<std::string> _delayLoadDLLs;
-
- // The set to store /nodefaultlib arguments.
- std::set<std::string> _noDefaultLibs;
-
- std::vector<StringRef> _inputSearchPaths;
- std::unique_ptr<Writer> _writer;
-
- // A map for weak aliases.
- std::map<std::string, std::set<std::string>> _alternateNames;
-
- // A map for section renaming. For example, if there is an entry in the map
- // whose value is .rdata -> .text, the section contens of .rdata will be
- // merged to .text in the resulting executable.
- std::map<std::string, std::string> _renamedSections;
-
- // Section attributes specified by /section option.
- std::map<std::string, uint32_t> _sectionSetMask;
- std::map<std::string, uint32_t> _sectionClearMask;
-
- // DLLExport'ed symbols.
- std::vector<ExportDesc> _dllExports;
-
- // List of files that will be removed on destruction.
- std::vector<std::unique_ptr<llvm::FileRemover> > _tempFiles;
-
- // DOS Stub. DOS stub is data located at the beginning of PE/COFF file.
- // Windows loader do not really care about DOS stub contents, but it's usually
- // a small DOS program that prints out a message "This program requires
- // Microsoft Windows." This feature was somewhat useful before Windows 95.
- ArrayRef<uint8_t> _dosStub = llvm::makeArrayRef(DEFAULT_DOS_STUB);
-
- // Name of the temporary file for lib.exe subcommand. For debugging
- // only.
- std::string _moduleDefinitionFile;
-
- std::set<std::string> _definedSyms;
- std::set<Node *> _seen;
-
- ParseDirectives _parseDirectives = nullptr;
-};
-
-} // end namespace lld
-
-#endif
Modified: lld/trunk/lib/Driver/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/CMakeLists.txt?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/lib/Driver/CMakeLists.txt (original)
+++ lld/trunk/lib/Driver/CMakeLists.txt Thu Aug 6 11:19:35 2015
@@ -6,8 +6,6 @@ set(LLVM_TARGET_DEFINITIONS CoreOptions.
tablegen(LLVM CoreOptions.inc -gen-opt-parser-defs)
set(LLVM_TARGET_DEFINITIONS DarwinLdOptions.td)
tablegen(LLVM DarwinLdOptions.inc -gen-opt-parser-defs)
-set(LLVM_TARGET_DEFINITIONS WinLinkOptions.td)
-tablegen(LLVM WinLinkOptions.inc -gen-opt-parser-defs)
add_public_tablegen_target(DriverOptionsTableGen)
add_llvm_library(lldDriver
@@ -16,13 +14,10 @@ add_llvm_library(lldDriver
Driver.cpp
GnuLdDriver.cpp
UniversalDriver.cpp
- WinLinkDriver.cpp
- WinLinkModuleDef.cpp
LINK_LIBS
lldConfig
lldMachO
lldCOFF
- lldPECOFF
lldELF
lldELF2
lldAArch64ELFTarget
Modified: lld/trunk/lib/Driver/UniversalDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/UniversalDriver.cpp?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/lib/Driver/UniversalDriver.cpp (original)
+++ lld/trunk/lib/Driver/UniversalDriver.cpp Thu Aug 6 11:19:35 2015
@@ -71,7 +71,6 @@ enum class Flavor {
gnu_ld, // -flavor gnu
gnu_ld2, // -flavor gnu2
win_link, // -flavor link
- win_link2, // -flavor link2
darwin_ld, // -flavor darwin
core // -flavor core OR -core
};
@@ -89,8 +88,8 @@ static Flavor strToFlavor(StringRef str)
.Case("gnu2", Flavor::gnu_ld2)
.Case("link", Flavor::win_link)
.Case("lld-link", Flavor::win_link)
- .Case("link2", Flavor::win_link2)
- .Case("lld-link2", Flavor::win_link2)
+ .Case("link2", Flavor::win_link)
+ .Case("lld-link2", Flavor::win_link)
.Case("darwin", Flavor::darwin_ld)
.Case("core", Flavor::core)
.Case("ld", Flavor::gnu_ld)
@@ -210,8 +209,6 @@ bool UniversalDriver::link(llvm::Mutable
case Flavor::darwin_ld:
return DarwinLdDriver::linkMachO(args, diagnostics);
case Flavor::win_link:
- return WinLinkDriver::linkPECOFF(args, diagnostics);
- case Flavor::win_link2:
coff::link(args);
return true;
case Flavor::core:
Removed: lld/trunk/lib/Driver/WinLinkDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/WinLinkDriver.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/Driver/WinLinkDriver.cpp (original)
+++ lld/trunk/lib/Driver/WinLinkDriver.cpp (removed)
@@ -1,1357 +0,0 @@
-//===- lib/Driver/WinLinkDriver.cpp ---------------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-///
-/// Concrete instance of the Driver for Windows link.exe.
-///
-//===----------------------------------------------------------------------===//
-
-#include "lld/Driver/Driver.h"
-#include "lld/Driver/WinLinkModuleDef.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/ADT/StringSwitch.h"
-#include "llvm/Object/COFF.h"
-#include "llvm/Option/Arg.h"
-#include "llvm/Option/Option.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/Process.h"
-#include "llvm/Support/Program.h"
-#include "llvm/Support/StringSaver.h"
-#include "llvm/Support/raw_ostream.h"
-#include <algorithm>
-#include <cctype>
-#include <map>
-#include <memory>
-#include <sstream>
-#include <tuple>
-
-namespace lld {
-
-//
-// Option definitions
-//
-
-// Create enum with OPT_xxx values for each option in WinLinkOptions.td
-enum {
- OPT_INVALID = 0,
-#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
- HELP, META) \
- OPT_##ID,
-#include "WinLinkOptions.inc"
-#undef OPTION
-};
-
-// Create prefix string literals used in WinLinkOptions.td
-#define PREFIX(NAME, VALUE) const char *const NAME[] = VALUE;
-#include "WinLinkOptions.inc"
-#undef PREFIX
-
-// Create table mapping all options defined in WinLinkOptions.td
-static const llvm::opt::OptTable::Info infoTable[] = {
-#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
- HELPTEXT, METAVAR) \
- { PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, llvm::opt::Option::KIND##Class, \
- PARAM, FLAGS, OPT_##GROUP, OPT_##ALIAS, ALIASARGS },
-#include "WinLinkOptions.inc"
-#undef OPTION
-};
-
-namespace {
-
-// Create OptTable class for parsing actual command line arguments
-class WinLinkOptTable : public llvm::opt::OptTable {
-public:
- // link.exe's command line options are case insensitive, unlike
- // other driver's options for Unix.
- WinLinkOptTable()
- : OptTable(infoTable, llvm::array_lengthof(infoTable),
- /* ignoreCase */ true) {}
-};
-
-} // anonymous namespace
-
-//
-// Functions to parse each command line option
-//
-
-// Split the given string with spaces.
-static std::vector<std::string> splitArgList(const std::string &str) {
- std::stringstream stream(str);
- std::istream_iterator<std::string> begin(stream);
- std::istream_iterator<std::string> end;
- return std::vector<std::string>(begin, end);
-}
-
-// Split the given string with the path separator.
-static std::vector<StringRef> splitPathList(StringRef str) {
- std::vector<StringRef> ret;
- while (!str.empty()) {
- StringRef path;
- std::tie(path, str) = str.split(';');
- ret.push_back(path);
- }
- return ret;
-}
-
-// Parse an argument for /alternatename. The expected string is
-// "<string>=<string>".
-static bool parseAlternateName(StringRef arg, StringRef &weak, StringRef &def,
- raw_ostream &diag) {
- std::tie(weak, def) = arg.split('=');
- if (weak.empty() || def.empty()) {
- diag << "Error: malformed /alternatename option: " << arg << "\n";
- return false;
- }
- return true;
-}
-
-// Parse an argument for /base, /stack or /heap. The expected string
-// is "<integer>[,<integer>]".
-static bool parseMemoryOption(StringRef arg, uint64_t &reserve,
- uint64_t &commit) {
- StringRef reserveStr, commitStr;
- std::tie(reserveStr, commitStr) = arg.split(',');
- if (reserveStr.getAsInteger(0, reserve))
- return false;
- if (!commitStr.empty() && commitStr.getAsInteger(0, commit))
- return false;
- return true;
-}
-
-// Parse an argument for /version or /subsystem. The expected string is
-// "<integer>[.<integer>]".
-static bool parseVersion(StringRef arg, uint32_t &major, uint32_t &minor) {
- StringRef majorVersion, minorVersion;
- std::tie(majorVersion, minorVersion) = arg.split('.');
- if (minorVersion.empty())
- minorVersion = "0";
- if (majorVersion.getAsInteger(0, major))
- return false;
- if (minorVersion.getAsInteger(0, minor))
- return false;
- return true;
-}
-
-// Returns subsystem type for the given string.
-static llvm::COFF::WindowsSubsystem stringToWinSubsystem(StringRef str) {
- return llvm::StringSwitch<llvm::COFF::WindowsSubsystem>(str.lower())
- .Case("windows", llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI)
- .Case("console", llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI)
- .Case("boot_application",
- llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION)
- .Case("efi_application", llvm::COFF::IMAGE_SUBSYSTEM_EFI_APPLICATION)
- .Case("efi_boot_service_driver",
- llvm::COFF::IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER)
- .Case("efi_rom", llvm::COFF::IMAGE_SUBSYSTEM_EFI_ROM)
- .Case("efi_runtime_driver",
- llvm::COFF::IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER)
- .Case("native", llvm::COFF::IMAGE_SUBSYSTEM_NATIVE)
- .Case("posix", llvm::COFF::IMAGE_SUBSYSTEM_POSIX_CUI)
- .Default(llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN);
-}
-
-// Parse /subsystem command line option. The form of /subsystem is
-// "subsystem_name[,majorOSVersion[.minorOSVersion]]".
-static bool parseSubsystem(StringRef arg,
- llvm::COFF::WindowsSubsystem &subsystem,
- llvm::Optional<uint32_t> &major,
- llvm::Optional<uint32_t> &minor, raw_ostream &diag) {
- StringRef subsystemStr, osVersion;
- std::tie(subsystemStr, osVersion) = arg.split(',');
- if (!osVersion.empty()) {
- uint32_t v1, v2;
- if (!parseVersion(osVersion, v1, v2))
- return false;
- major = v1;
- minor = v2;
- }
- subsystem = stringToWinSubsystem(subsystemStr);
- if (subsystem == llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN) {
- diag << "error: unknown subsystem name: " << subsystemStr << "\n";
- return false;
- }
- return true;
-}
-
-static llvm::COFF::MachineTypes stringToMachineType(StringRef str) {
- // FIXME: we have no way to differentiate between ARM and ARMNT currently.
- // However, given that LLVM only supports ARM NT, default to that for now.
- return llvm::StringSwitch<llvm::COFF::MachineTypes>(str.lower())
- .Case("arm", llvm::COFF::IMAGE_FILE_MACHINE_ARMNT)
- .Case("x64", llvm::COFF::IMAGE_FILE_MACHINE_AMD64)
- .Case("x86", llvm::COFF::IMAGE_FILE_MACHINE_I386)
- .Default(llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN);
-}
-
-// Parse /section:name,[[!]{DEKPRSW}]
-//
-// /section option is to set non-default bits in the Characteristics fields of
-// the section header. D, E, K, P, R, S, and W represent discardable,
-// execute, not_cachable, not_pageable, read, shared, and write bits,
-// respectively. You can specify multiple flags in one /section option.
-//
-// If the flag starts with "!", the flags represent a mask that should be turned
-// off regardless of the default value. You can even create a section which is
-// not readable, writable nor executable with this -- although it's probably
-// useless.
-static bool parseSection(StringRef option, std::string §ion,
- llvm::Optional<uint32_t> &flags,
- llvm::Optional<uint32_t> &mask) {
- StringRef flagString;
- std::tie(section, flagString) = option.split(",");
-
- bool negative = false;
- if (flagString.startswith("!")) {
- negative = true;
- flagString = flagString.substr(1);
- }
- if (flagString.empty())
- return false;
-
- uint32_t attribs = 0;
- for (size_t i = 0, e = flagString.size(); i < e; ++i) {
- switch (tolower(flagString[i])) {
-#define CASE(c, flag) \
- case c: \
- attribs |= flag; \
- break
- CASE('d', llvm::COFF::IMAGE_SCN_MEM_DISCARDABLE);
- CASE('e', llvm::COFF::IMAGE_SCN_MEM_EXECUTE);
- CASE('k', llvm::COFF::IMAGE_SCN_MEM_NOT_CACHED);
- CASE('p', llvm::COFF::IMAGE_SCN_MEM_NOT_PAGED);
- CASE('r', llvm::COFF::IMAGE_SCN_MEM_READ);
- CASE('s', llvm::COFF::IMAGE_SCN_MEM_SHARED);
- CASE('w', llvm::COFF::IMAGE_SCN_MEM_WRITE);
-#undef CASE
- default:
- return false;
- }
- }
-
- if (negative) {
- mask = attribs;
- } else {
- flags = attribs;
- }
- return true;
-}
-
-static bool readFile(PECOFFLinkingContext &ctx, StringRef path,
- ArrayRef<uint8_t> &result) {
- ErrorOr<std::unique_ptr<MemoryBuffer>> buf = MemoryBuffer::getFile(path);
- if (!buf)
- return false;
- StringRef Data = buf.get()->getBuffer();
- result = ctx.allocate(ArrayRef<uint8_t>(
- reinterpret_cast<const uint8_t *>(Data.begin()), Data.size()));
- return true;
-}
-
-// Parse /manifest:EMBED[,ID=#]|NO.
-static bool parseManifest(StringRef option, bool &enable, bool &embed,
- int &id) {
- if (option.equals_lower("no")) {
- enable = false;
- return true;
- }
- if (!option.startswith_lower("embed"))
- return false;
-
- embed = true;
- option = option.substr(strlen("embed"));
- if (option.empty())
- return true;
- if (!option.startswith_lower(",id="))
- return false;
- option = option.substr(strlen(",id="));
- if (option.getAsInteger(0, id))
- return false;
- return true;
-}
-
-static bool isLibraryFile(StringRef path) {
- return path.endswith_lower(".lib") || path.endswith_lower(".imp");
-}
-
-static StringRef getObjectPath(PECOFFLinkingContext &ctx, StringRef path) {
- std::string result;
- if (isLibraryFile(path)) {
- result = ctx.searchLibraryFile(path);
- } else if (llvm::sys::path::extension(path).empty()) {
- result = path.str() + ".obj";
- } else {
- result = path;
- }
- return ctx.allocate(result);
-}
-
-static StringRef getLibraryPath(PECOFFLinkingContext &ctx, StringRef path) {
- std::string result = isLibraryFile(path)
- ? ctx.searchLibraryFile(path)
- : ctx.searchLibraryFile(path.str() + ".lib");
- return ctx.allocate(result);
-}
-
-// Returns true if the given file is a Windows resource file.
-static bool isResoruceFile(StringRef path) {
- llvm::sys::fs::file_magic fileType;
- if (llvm::sys::fs::identify_magic(path, fileType)) {
- // If we cannot read the file, assume it's not a resource file.
- // The further stage will raise an error on this unreadable file.
- return false;
- }
- return fileType == llvm::sys::fs::file_magic::windows_resource;
-}
-
-// Merge Windows resource files and convert them to a single COFF file.
-// The temporary file path is set to result.
-static bool convertResourceFiles(PECOFFLinkingContext &ctx,
- std::vector<std::string> inFiles,
- std::string &result) {
- // Create an output file path.
- SmallString<128> outFile;
- if (llvm::sys::fs::createTemporaryFile("resource", "obj", outFile))
- return false;
- std::string outFileArg = ("/out:" + outFile).str();
-
- // Construct CVTRES.EXE command line and execute it.
- std::string program = "cvtres.exe";
- ErrorOr<std::string> programPathOrErr = llvm::sys::findProgramByName(program);
- if (!programPathOrErr) {
- llvm::errs() << "Unable to find " << program << " in PATH\n";
- return false;
- }
- const std::string &programPath = *programPathOrErr;
-
- std::vector<const char *> args;
- args.push_back(programPath.c_str());
- args.push_back(ctx.is64Bit() ? "/machine:x64" : "/machine:x86");
- args.push_back("/readonly");
- args.push_back("/nologo");
- args.push_back(outFileArg.c_str());
- for (const std::string &path : inFiles)
- args.push_back(path.c_str());
- args.push_back(nullptr);
-
- if (llvm::sys::ExecuteAndWait(programPath.c_str(), &args[0]) != 0) {
- llvm::errs() << program << " failed\n";
- return false;
- }
- result = outFile.str();
- return true;
-}
-
-// Parse /manifestuac:(level=<string>|uiAccess=<string>).
-//
-// The arguments will be embedded to the manifest XML file with no error check,
-// so the values given via the command line must be valid as XML attributes.
-// This may sound a bit odd, but that's how link.exe works, so we will follow.
-static bool parseManifestUAC(StringRef option,
- llvm::Optional<std::string> &level,
- llvm::Optional<std::string> &uiAccess) {
- for (;;) {
- option = option.ltrim();
- if (option.empty())
- return true;
- if (option.startswith_lower("level=")) {
- option = option.substr(strlen("level="));
- StringRef value;
- std::tie(value, option) = option.split(" ");
- level = value.str();
- continue;
- }
- if (option.startswith_lower("uiaccess=")) {
- option = option.substr(strlen("uiaccess="));
- StringRef value;
- std::tie(value, option) = option.split(" ");
- uiAccess = value.str();
- continue;
- }
- return false;
- }
-}
-
-// Returns the machine type (e.g. x86) of the given input file.
-// If the file is not COFF, returns false.
-static bool getMachineType(StringRef path, llvm::COFF::MachineTypes &result) {
- llvm::sys::fs::file_magic fileType;
- if (llvm::sys::fs::identify_magic(path, fileType))
- return false;
- if (fileType != llvm::sys::fs::file_magic::coff_object)
- return false;
- ErrorOr<std::unique_ptr<MemoryBuffer>> buf = MemoryBuffer::getFile(path);
- if (!buf)
- return false;
- std::error_code ec;
- llvm::object::COFFObjectFile obj(buf.get()->getMemBufferRef(), ec);
- if (ec)
- return false;
- result = static_cast<llvm::COFF::MachineTypes>(obj.getMachine());
- return true;
-}
-
-// Parse /export:entryname[=internalname][, at ordinal[,NONAME]][,DATA][,PRIVATE].
-//
-// MSDN doesn't say anything about /export:foo=bar style option or PRIVATE
-// attribtute, but link.exe actually accepts them.
-static bool parseExport(StringRef option,
- PECOFFLinkingContext::ExportDesc &ret) {
- StringRef name;
- StringRef rest;
- std::tie(name, rest) = option.split(",");
- if (name.empty())
- return false;
- if (name.find('=') == StringRef::npos) {
- ret.name = name;
- } else {
- std::tie(ret.externalName, ret.name) = name.split("=");
- if (ret.name.empty())
- return false;
- }
-
- for (;;) {
- if (rest.empty())
- return true;
- StringRef arg;
- std::tie(arg, rest) = rest.split(",");
- if (arg.equals_lower("noname")) {
- if (ret.ordinal < 0)
- return false;
- ret.noname = true;
- continue;
- }
- if (arg.equals_lower("data")) {
- ret.isData = true;
- continue;
- }
- if (arg.equals_lower("private")) {
- ret.isPrivate = true;
- continue;
- }
- if (arg.startswith("@")) {
- int ordinal;
- if (arg.substr(1).getAsInteger(0, ordinal))
- return false;
- if (ordinal <= 0 || 65535 < ordinal)
- return false;
- ret.ordinal = ordinal;
- continue;
- }
- return false;
- }
-}
-
-// Read module-definition file.
-static bool parseDef(StringRef option, llvm::BumpPtrAllocator &alloc,
- std::vector<moduledef::Directive *> &result) {
- ErrorOr<std::unique_ptr<MemoryBuffer>> buf = MemoryBuffer::getFile(option);
- if (!buf)
- return false;
- moduledef::Lexer lexer(std::move(buf.get()));
- moduledef::Parser parser(lexer, alloc);
- return parser.parse(result);
-}
-
-static StringRef replaceExtension(PECOFFLinkingContext &ctx, StringRef path,
- StringRef extension) {
- SmallString<128> val = path;
- llvm::sys::path::replace_extension(val, extension);
- return ctx.allocate(val.str());
-}
-
-// Create a manifest file contents.
-static std::string createManifestXml(PECOFFLinkingContext &ctx) {
- std::string ret;
- llvm::raw_string_ostream out(ret);
- // Emit the XML. Note that we do *not* verify that the XML attributes are
- // syntactically correct. This is intentional for link.exe compatibility.
- out << "<?xml version=\"1.0\" standalone=\"yes\"?>\n"
- "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\"\n"
- " manifestVersion=\"1.0\">\n";
- if (ctx.getManifestUAC()) {
- out << " <trustInfo>\n"
- " <security>\n"
- " <requestedPrivileges>\n"
- " <requestedExecutionLevel level=" << ctx.getManifestLevel()
- << " uiAccess=" << ctx.getManifestUiAccess()
- << "/>\n"
- " </requestedPrivileges>\n"
- " </security>\n"
- " </trustInfo>\n";
- const std::string &dependency = ctx.getManifestDependency();
- if (!dependency.empty()) {
- out << " <dependency>\n"
- " <dependentAssembly>\n"
- " <assemblyIdentity " << dependency
- << " />\n"
- " </dependentAssembly>\n"
- " </dependency>\n";
- }
- }
- out << "</assembly>\n";
- out.flush();
- return ret;
-}
-
-// Convert one doublequote to two doublequotes, so that we can embed the string
-// into a resource script file.
-static void quoteAndPrintXml(raw_ostream &out, StringRef str) {
- for (;;) {
- if (str.empty())
- return;
- StringRef line;
- std::tie(line, str) = str.split("\n");
- if (line.empty())
- continue;
- out << '\"';
- const char *p = line.data();
- for (int i = 0, size = line.size(); i < size; ++i) {
- switch (p[i]) {
- case '\"':
- out << '\"';
- // fallthrough
- default:
- out << p[i];
- }
- }
- out << "\"\n";
- }
-}
-
-// Create a resource file (.res file) containing the manifest XML. This is done
-// in two steps:
-//
-// 1. Create a resource script file containing the XML as a literal string.
-// 2. Run RC.EXE command to compile the script file to a resource file.
-//
-// The temporary file created in step 1 will be deleted on exit from this
-// function. The file created in step 2 will have the same lifetime as the
-// PECOFFLinkingContext.
-static bool createManifestResourceFile(PECOFFLinkingContext &ctx,
- raw_ostream &diag,
- std::string &resFile) {
- // Create a temporary file for the resource script file.
- SmallString<128> rcFileSmallString;
- if (llvm::sys::fs::createTemporaryFile("tmp", "rc", rcFileSmallString)) {
- diag << "Cannot create a temporary file\n";
- return false;
- }
- StringRef rcFile(rcFileSmallString.str());
- llvm::FileRemover rcFileRemover((Twine(rcFile)));
-
- // Open the temporary file for writing.
- std::error_code ec;
- llvm::raw_fd_ostream out(rcFileSmallString, ec, llvm::sys::fs::F_Text);
- if (ec) {
- diag << "Failed to open " << ctx.getManifestOutputPath() << ": "
- << ec.message() << "\n";
- return false;
- }
-
- // Write resource script to the RC file.
- out << "#define LANG_ENGLISH 9\n"
- << "#define SUBLANG_DEFAULT 1\n"
- << "#define APP_MANIFEST " << ctx.getManifestId() << "\n"
- << "#define RT_MANIFEST 24\n"
- << "LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT\n"
- << "APP_MANIFEST RT_MANIFEST {\n";
- quoteAndPrintXml(out, createManifestXml(ctx));
- out << "}\n";
- out.close();
-
- // Create output resource file.
- SmallString<128> resFileSmallString;
- if (llvm::sys::fs::createTemporaryFile("tmp", "res", resFileSmallString)) {
- diag << "Cannot create a temporary file";
- return false;
- }
- resFile = resFileSmallString.str();
-
- // Register the resource file path so that the file will be deleted when the
- // context's destructor is called.
- ctx.registerTemporaryFile(resFile);
-
- // Run RC.EXE /fo tmp.res tmp.rc
- std::string program = "rc.exe";
- ErrorOr<std::string> programPathOrErr = llvm::sys::findProgramByName(program);
- if (!programPathOrErr) {
- diag << "Unable to find " << program << " in PATH\n";
- return false;
- }
- const std::string &programPath = *programPathOrErr;
- std::vector<const char *> args;
- args.push_back(programPath.c_str());
- args.push_back("/fo");
- args.push_back(resFile.c_str());
- args.push_back("/nologo");
- args.push_back(rcFileSmallString.c_str());
- args.push_back(nullptr);
-
- if (llvm::sys::ExecuteAndWait(programPath.c_str(), &args[0]) != 0) {
- diag << program << " failed\n";
- return false;
- }
- return true;
-}
-
-
-// Create the a side-by-side manifest file.
-//
-// The manifest file will convey some information to the linker, such as whether
-// the binary needs to run as Administrator or not. Instead of being placed in
-// the PE/COFF header, it's in XML format for some reason -- I guess it's
-// probably because it's invented in the early dot-com era.
-//
-// The side-by-side manifest file is a separate XML file having ".manifest"
-// extension. It will be created in the same directory as the resulting
-// executable.
-static bool createSideBySideManifestFile(PECOFFLinkingContext &ctx,
- raw_ostream &diag) {
- std::string path = ctx.getManifestOutputPath();
- if (path.empty()) {
- // Default name of the manifest file is "foo.exe.manifest" where "foo.exe" is
- // the output path.
- path = ctx.outputPath();
- path.append(".manifest");
- }
-
- std::error_code ec;
- llvm::raw_fd_ostream out(path, ec, llvm::sys::fs::F_Text);
- if (ec) {
- diag << ec.message() << "\n";
- return false;
- }
- out << createManifestXml(ctx);
- return true;
-}
-
-// Handle /failifmismatch option.
-static bool
-handleFailIfMismatchOption(StringRef option,
- std::map<StringRef, StringRef> &mustMatch,
- raw_ostream &diag) {
- StringRef key, value;
- std::tie(key, value) = option.split('=');
- if (key.empty() || value.empty()) {
- diag << "error: malformed /failifmismatch option: " << option << "\n";
- return true;
- }
- auto it = mustMatch.find(key);
- if (it != mustMatch.end() && it->second != value) {
- diag << "error: mismatch detected: '" << it->second << "' and '" << value
- << "' for key '" << key << "'\n";
- return true;
- }
- mustMatch[key] = value;
- return false;
-}
-
-//
-// Environment variable
-//
-
-// Process "LINK" environment variable. If defined, the value of the variable
-// should be processed as command line arguments.
-static std::vector<const char *>
-processLinkEnv(PECOFFLinkingContext &ctx, llvm::ArrayRef<const char *> args) {
- std::vector<const char *> ret;
- // The first argument is the name of the command. This should stay at the head
- // of the argument list.
- assert(!args.empty());
- ret.push_back(args[0]);
-
- // Add arguments specified by the LINK environment variable.
- llvm::Optional<std::string> env = llvm::sys::Process::GetEnv("LINK");
- if (env.hasValue())
- for (std::string &arg : splitArgList(*env))
- ret.push_back(ctx.allocate(arg).data());
-
- // Add the rest of arguments passed via the command line.
- for (const char *arg : args.slice(1))
- ret.push_back(arg);
- ret.push_back(nullptr);
- return ret;
-}
-
-// Process "LIB" environment variable. The variable contains a list of search
-// paths separated by semicolons.
-static void processLibEnv(PECOFFLinkingContext &ctx) {
- llvm::Optional<std::string> env = llvm::sys::Process::GetEnv("LIB");
- if (env.hasValue())
- for (StringRef path : splitPathList(*env))
- ctx.appendInputSearchPath(ctx.allocate(path));
-}
-
-// Tokenize command line options in a given file and add them to result.
-static bool readResponseFile(StringRef path, PECOFFLinkingContext &ctx,
- std::vector<const char *> &result) {
- ArrayRef<uint8_t> contents;
- if (!readFile(ctx, path, contents))
- return false;
- StringRef contentsStr(reinterpret_cast<const char *>(contents.data()),
- contents.size());
- llvm::BumpPtrStringSaver saver(ctx.getAllocator());
- SmallVector<const char *, 0> args;
- llvm::cl::TokenizeWindowsCommandLine(contentsStr, saver, args);
- for (const char *s : args)
- result.push_back(s);
- return true;
-}
-
-// Expand arguments starting with "@". It's an error if a specified file does
-// not exist. Returns true on success.
-static bool expandResponseFiles(llvm::ArrayRef<const char *> &args,
- PECOFFLinkingContext &ctx, raw_ostream &diag,
- bool &expanded) {
- std::vector<const char *> newArgv;
- for (const char *arg : args) {
- if (arg[0] != '@') {
- newArgv.push_back(arg);
- continue;
- }
- StringRef filename = StringRef(arg + 1);
- if (!readResponseFile(filename, ctx, newArgv)) {
- diag << "error: cannot read response file: " << filename << "\n";
- return false;
- }
- expanded = true;
- }
- if (!expanded)
- return true;
- newArgv.push_back(nullptr);
- args = llvm::makeArrayRef(&ctx.allocateCopy(newArgv)[0], newArgv.size() - 1);
- return true;
-}
-
-// Parses the given command line options and returns the result. Returns NULL if
-// there's an error in the options.
-static llvm::Optional<llvm::opt::InputArgList>
-parseArgs(llvm::ArrayRef<const char *> args, PECOFFLinkingContext &ctx,
- raw_ostream &diag, bool isReadingDirectiveSection) {
- // Expand arguments starting with "@".
- bool expanded = false;
- if (!expandResponseFiles(args, ctx, diag, expanded))
- return llvm::None;
-
- // Parse command line options using WinLinkOptions.td
- WinLinkOptTable table;
- unsigned missingIndex;
- unsigned missingCount;
- llvm::opt::InputArgList parsedArgs =
- table.ParseArgs(args.slice(1), missingIndex, missingCount);
- if (missingCount) {
- diag << "error: missing arg value for '"
- << parsedArgs.getArgString(missingIndex) << "' expected "
- << missingCount << " argument(s).\n";
- return llvm::None;
- }
-
- // Show warning for unknown arguments. In .drectve section, unknown options
- // starting with "-?" are silently ignored. This is a COFF's feature to embed a
- // new linker option to an object file while keeping backward compatibility.
- for (auto unknownArg : parsedArgs.filtered(OPT_UNKNOWN)) {
- StringRef arg = unknownArg->getSpelling();
- if (isReadingDirectiveSection && arg.startswith("-?"))
- continue;
- diag << "warning: ignoring unknown argument: " << arg << "\n";
- }
-
- // Copy mllvm
- for (auto arg : parsedArgs.filtered(OPT_mllvm))
- ctx.appendLLVMOption(arg->getValue());
-
- // If we have expaneded response files and /verbose is given, print out the
- // final command line.
- if (!isReadingDirectiveSection && expanded &&
- parsedArgs.getLastArg(OPT_verbose)) {
- diag << "Command line:";
- for (const char *arg : args)
- diag << " " << arg;
- diag << "\n\n";
- }
-
- return std::move(parsedArgs);
-}
-
-// Returns true if the given file node has already been added to the input
-// graph.
-static bool hasLibrary(PECOFFLinkingContext &ctx, File *file) {
- StringRef path = file->path();
- for (std::unique_ptr<Node> &p : ctx.getNodes())
- if (auto *f = dyn_cast<FileNode>(p.get()))
- if (f->getFile()->path() == path)
- return true;
- return false;
-}
-
-// If the first command line argument is "/lib", link.exe acts as if it's
-// "lib.exe" command. This is for backward compatibility.
-// http://msdn.microsoft.com/en-us/library/h34w59b3.aspx
-static bool maybeRunLibCommand(llvm::ArrayRef<const char *> args,
- raw_ostream &diag) {
- if (args.size() <= 1)
- return false;
- if (!StringRef(args[1]).equals_lower("/lib"))
- return false;
- ErrorOr<std::string> pathOrErr = llvm::sys::findProgramByName("lib.exe");
- if (!pathOrErr) {
- diag << "Unable to find lib.exe in PATH\n";
- return true;
- }
- const std::string &path = *pathOrErr;
-
- // Run lib.exe
- std::vector<const char *> vec;
- vec.push_back(path.c_str());
- for (const char *arg : args.slice(2))
- vec.push_back(arg);
- vec.push_back(nullptr);
-
- if (llvm::sys::ExecuteAndWait(path.c_str(), &vec[0]) != 0)
- diag << "lib.exe failed\n";
- return true;
-}
-
-/// \brief Parse the input file to lld::File.
-void addFiles(PECOFFLinkingContext &ctx, StringRef path, raw_ostream &diag,
- std::vector<std::unique_ptr<File>> &files) {
- for (std::unique_ptr<File> &file : loadFile(ctx, path, false)) {
- if (ctx.logInputFiles())
- diag << file->path() << "\n";
- files.push_back(std::move(file));
- }
-}
-
-//
-// Main driver
-//
-
-bool WinLinkDriver::linkPECOFF(llvm::ArrayRef<const char *> args,
- raw_ostream &diag) {
- if (maybeRunLibCommand(args, diag))
- return true;
-
- PECOFFLinkingContext ctx;
- ctx.setParseDirectives(parseDirectives);
- ctx.registry().addSupportCOFFObjects(ctx);
- ctx.registry().addSupportCOFFImportLibraries(ctx);
- ctx.registry().addSupportArchives(ctx.logInputFiles());
- ctx.registry().addSupportYamlFiles();
-
- std::vector<const char *> newargv = processLinkEnv(ctx, args);
- processLibEnv(ctx);
- if (!parse(llvm::makeArrayRef(newargv).drop_back(1), ctx, diag))
- return false;
-
- // Create the file if needed.
- if (ctx.getCreateManifest() && !ctx.getEmbedManifest())
- if (!createSideBySideManifestFile(ctx, diag))
- return false;
-
- return link(ctx, diag);
-}
-
-bool WinLinkDriver::parse(llvm::ArrayRef<const char *> args,
- PECOFFLinkingContext &ctx, raw_ostream &diag,
- bool isReadingDirectiveSection) {
- // Parse may be called from multiple threads simultaneously to parse .drectve
- // sections. This function is not thread-safe because it mutates the context
- // object. So acquire the lock.
- std::lock_guard<std::recursive_mutex> lock(ctx.getMutex());
-
- std::map<StringRef, StringRef> failIfMismatchMap;
- // Parse the options.
- llvm::Optional<llvm::opt::InputArgList> parsedArgs =
- parseArgs(args, ctx, diag, isReadingDirectiveSection);
- if (!parsedArgs)
- return false;
-
- // The list of input files.
- std::vector<std::unique_ptr<File>> files;
- std::vector<std::unique_ptr<File>> libraries;
-
- // Handle /help
- if (parsedArgs->hasArg(OPT_help)) {
- WinLinkOptTable table;
- table.PrintHelp(llvm::outs(), args[0], "LLVM Linker", false);
- return false;
- }
-
- // Handle /machine before parsing all the other options, as the target machine
- // type affects how to handle other options. For example, x86 needs the
- // leading underscore to mangle symbols, while x64 doesn't need it.
- if (llvm::opt::Arg *inputArg = parsedArgs->getLastArg(OPT_machine)) {
- StringRef arg = inputArg->getValue();
- llvm::COFF::MachineTypes type = stringToMachineType(arg);
- if (type == llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN) {
- diag << "error: unknown machine type: " << arg << "\n";
- return false;
- }
- ctx.setMachineType(type);
- } else {
- // If /machine option is missing, we need to take a look at
- // the magic byte of the first object file to infer machine type.
- std::vector<StringRef> filePaths;
- for (auto arg : *parsedArgs)
- if (arg->getOption().getID() == OPT_INPUT)
- filePaths.push_back(arg->getValue());
- if (llvm::opt::Arg *arg = parsedArgs->getLastArg(OPT_DASH_DASH))
- filePaths.insert(filePaths.end(), arg->getValues().begin(),
- arg->getValues().end());
- for (StringRef path : filePaths) {
- llvm::COFF::MachineTypes type;
- if (!getMachineType(path, type))
- continue;
- if (type == llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN)
- continue;
- ctx.setMachineType(type);
- break;
- }
- }
-
- // Handle /nodefaultlib:<lib>. The same option without argument is handled in
- // the following for loop.
- for (auto *arg : parsedArgs->filtered(OPT_nodefaultlib))
- ctx.addNoDefaultLib(arg->getValue());
-
- // Handle /defaultlib. Argument of the option is added to the input file list
- // unless it's blacklisted by /nodefaultlib.
- std::vector<StringRef> defaultLibs;
- for (auto *arg : parsedArgs->filtered(OPT_defaultlib))
- defaultLibs.push_back(arg->getValue());
-
- // -alternatename:<alias>=<symbol>
- for (auto *arg : parsedArgs->filtered(OPT_alternatename)) {
- StringRef weak, def;
- if (!parseAlternateName(arg->getValue(), weak, def, diag))
- return false;
- ctx.addAlternateName(weak, def);
- }
-
- // Parse /base command line option. The argument for the parameter is in
- // the form of "<address>[:<size>]".
- if (auto *arg = parsedArgs->getLastArg(OPT_base)) {
- uint64_t addr, size;
- // Size should be set to SizeOfImage field in the COFF header, and if
- // it's smaller than the actual size, the linker should warn about that.
- // Currently we just ignore the value of size parameter.
- if (!parseMemoryOption(arg->getValue(), addr, size))
- return false;
- ctx.setBaseAddress(addr);
- }
-
- // Parse /dll command line option
- if (parsedArgs->hasArg(OPT_dll)) {
- ctx.setIsDll(true);
- // Default base address of a DLL is 0x10000000.
- if (!parsedArgs->hasArg(OPT_base))
- ctx.setBaseAddress(0x10000000);
- }
-
- // Parse /stack command line option
- if (auto *arg = parsedArgs->getLastArg(OPT_stack)) {
- uint64_t reserve;
- uint64_t commit = ctx.getStackCommit();
- if (!parseMemoryOption(arg->getValue(), reserve, commit))
- return false;
- ctx.setStackReserve(reserve);
- ctx.setStackCommit(commit);
- }
-
- // Parse /heap command line option
- if (auto *arg = parsedArgs->getLastArg(OPT_heap)) {
- uint64_t reserve;
- uint64_t commit = ctx.getHeapCommit();
- if (!parseMemoryOption(arg->getValue(), reserve, commit))
- return false;
- ctx.setHeapReserve(reserve);
- ctx.setHeapCommit(commit);
- }
-
- if (auto *arg = parsedArgs->getLastArg(OPT_align)) {
- uint32_t align;
- StringRef val = arg->getValue();
- if (val.getAsInteger(10, align)) {
- diag << "error: invalid value for /align: " << val << "\n";
- return false;
- }
- ctx.setSectionDefaultAlignment(align);
- }
-
- if (auto *arg = parsedArgs->getLastArg(OPT_version)) {
- uint32_t major, minor;
- if (!parseVersion(arg->getValue(), major, minor))
- return false;
- ctx.setImageVersion(PECOFFLinkingContext::Version(major, minor));
- }
-
- // Parse /merge:<from>=<to>.
- for (auto *arg : parsedArgs->filtered(OPT_merge)) {
- StringRef from, to;
- std::tie(from, to) = StringRef(arg->getValue()).split('=');
- if (from.empty() || to.empty()) {
- diag << "error: malformed /merge option: " << arg->getValue() << "\n";
- return false;
- }
- if (!ctx.addSectionRenaming(diag, from, to))
- return false;
- }
-
- // Parse /subsystem:<subsystem>[,<majorOSVersion>[.<minorOSVersion>]].
- if (auto *arg = parsedArgs->getLastArg(OPT_subsystem)) {
- llvm::COFF::WindowsSubsystem subsystem;
- llvm::Optional<uint32_t> major, minor;
- if (!parseSubsystem(arg->getValue(), subsystem, major, minor, diag))
- return false;
- ctx.setSubsystem(subsystem);
- if (major.hasValue())
- ctx.setMinOSVersion(PECOFFLinkingContext::Version(*major, *minor));
- }
-
- // Parse /section:name,[[!]{DEKPRSW}]
- for (auto *arg : parsedArgs->filtered(OPT_section)) {
- std::string section;
- llvm::Optional<uint32_t> flags, mask;
- if (!parseSection(arg->getValue(), section, flags, mask)) {
- diag << "Unknown argument for /section: " << arg->getValue() << "\n";
- return false;
- }
- if (flags.hasValue())
- ctx.setSectionSetMask(section, *flags);
- if (mask.hasValue())
- ctx.setSectionClearMask(section, *mask);
- }
-
- // Parse /manifest:EMBED[,ID=#]|NO.
- if (auto *arg = parsedArgs->getLastArg(OPT_manifest_colon)) {
- bool enable = true;
- bool embed = false;
- int id = 1;
- if (!parseManifest(arg->getValue(), enable, embed, id)) {
- diag << "Unknown argument for /manifest: " << arg->getValue() << "\n";
- return false;
- }
- ctx.setCreateManifest(enable);
- ctx.setEmbedManifest(embed);
- ctx.setManifestId(id);
- }
-
- // Parse /manifestuac.
- if (auto *arg = parsedArgs->getLastArg(OPT_manifestuac)) {
- if (StringRef(arg->getValue()).equals_lower("no")) {
- ctx.setManifestUAC(false);
- } else {
- llvm::Optional<std::string> privilegeLevel;
- llvm::Optional<std::string> uiAccess;
- if (!parseManifestUAC(arg->getValue(), privilegeLevel, uiAccess)) {
- diag << "Unknown argument for /manifestuac: " << arg->getValue()
- << "\n";
- return false;
- }
- if (privilegeLevel.hasValue())
- ctx.setManifestLevel(privilegeLevel.getValue());
- if (uiAccess.hasValue())
- ctx.setManifestUiAccess(uiAccess.getValue());
- }
- }
-
- if (auto *arg = parsedArgs->getLastArg(OPT_manifestfile))
- ctx.setManifestOutputPath(ctx.allocate(arg->getValue()));
-
- // /manifestdependency:<string> option. Note that the argument will be
- // embedded to the manifest XML file with no error check, for link.exe
- // compatibility. We do not gurantete that the resulting XML file is
- // valid.
- if (auto *arg = parsedArgs->getLastArg(OPT_manifestdependency))
- ctx.setManifestDependency(ctx.allocate(arg->getValue()));
-
- for (auto *arg : parsedArgs->filtered(OPT_failifmismatch))
- if (handleFailIfMismatchOption(arg->getValue(), failIfMismatchMap, diag))
- return false;
-
- if (auto *arg = parsedArgs->getLastArg(OPT_entry))
- ctx.setEntrySymbolName(ctx.allocate(arg->getValue()));
-
- for (auto *arg : parsedArgs->filtered(OPT_export)) {
- PECOFFLinkingContext::ExportDesc desc;
- if (!parseExport(arg->getValue(), desc)) {
- diag << "Error: malformed /export option: " << arg->getValue() << "\n";
- return false;
- }
-
- // Mangle the symbol name only if it is reading user-supplied command line
- // arguments. Because the symbol name in the .drectve section is already
- // mangled by the compiler, we shouldn't add a leading underscore in that
- // case. It's odd that the command line option has different semantics in
- // the .drectve section, but this behavior is needed for compatibility
- // with MSVC's link.exe.
- if (!isReadingDirectiveSection)
- desc.name = ctx.decorateSymbol(desc.name);
- ctx.addDllExport(desc);
- }
-
- for (auto *arg : parsedArgs->filtered(OPT_deffile)) {
- llvm::BumpPtrAllocator alloc;
- std::vector<moduledef::Directive *> dirs;
- if (!parseDef(arg->getValue(), alloc, dirs)) {
- diag << "Error: invalid module-definition file\n";
- return false;
- }
- for (moduledef::Directive *dir : dirs) {
- if (auto *exp = dyn_cast<moduledef::Exports>(dir)) {
- for (PECOFFLinkingContext::ExportDesc desc : exp->getExports()) {
- desc.name = ctx.decorateSymbol(desc.name);
- ctx.addDllExport(desc);
- }
- } else if (auto *hs = dyn_cast<moduledef::Heapsize>(dir)) {
- ctx.setHeapReserve(hs->getReserve());
- ctx.setHeapCommit(hs->getCommit());
- } else if (auto *lib = dyn_cast<moduledef::Library>(dir)) {
- ctx.setIsDll(true);
- ctx.setOutputPath(ctx.allocate(lib->getName()));
- if (lib->getBaseAddress() && !ctx.getBaseAddress())
- ctx.setBaseAddress(lib->getBaseAddress());
- } else if (auto *name = dyn_cast<moduledef::Name>(dir)) {
- if (!name->getOutputPath().empty() && ctx.outputPath().empty())
- ctx.setOutputPath(ctx.allocate(name->getOutputPath()));
- if (name->getBaseAddress() && ctx.getBaseAddress())
- ctx.setBaseAddress(name->getBaseAddress());
- } else if (auto *ver = dyn_cast<moduledef::Version>(dir)) {
- ctx.setImageVersion(PECOFFLinkingContext::Version(
- ver->getMajorVersion(), ver->getMinorVersion()));
- } else {
- llvm::dbgs() << static_cast<int>(dir->getKind()) << "\n";
- llvm_unreachable("Unknown module-definition directive.\n");
- }
- }
- }
-
- for (auto *arg : parsedArgs->filtered(OPT_libpath))
- ctx.appendInputSearchPath(ctx.allocate(arg->getValue()));
-
- for (auto *arg : parsedArgs->filtered(OPT_opt)) {
- std::string val = StringRef(arg->getValue()).lower();
- if (val == "noref") {
- ctx.setDeadStripping(false);
- } else if (val != "ref" && val != "icf" && val != "noicf" &&
- val != "lbr" && val != "nolbr" &&
- !StringRef(val).startswith("icf=")) {
- diag << "unknown option for /opt: " << val << "\n";
- return false;
- }
- }
-
- // LLD is not yet capable of creating a PDB file, so /debug does not have
- // any effect.
- // TODO: This should disable dead stripping. Currently we can't do that
- // because removal of associative sections depends on dead stripping.
- if (parsedArgs->hasArg(OPT_debug))
- ctx.setDebug(true);
-
- if (parsedArgs->hasArg(OPT_verbose))
- ctx.setLogInputFiles(true);
-
- // /force and /force:unresolved mean the same thing. We do not currently
- // support /force:multiple.
- if (parsedArgs->hasArg(OPT_force) ||
- parsedArgs->hasArg(OPT_force_unresolved)) {
- ctx.setAllowRemainingUndefines(true);
- }
-
- if (parsedArgs->hasArg(OPT_fixed)) {
- // /fixed is not compatible with /dynamicbase. Check for it.
- if (parsedArgs->hasArg(OPT_dynamicbase)) {
- diag << "/dynamicbase must not be specified with /fixed\n";
- return false;
- }
- ctx.setBaseRelocationEnabled(false);
- ctx.setDynamicBaseEnabled(false);
- }
-
- // /swaprun:{cd,net} options set IMAGE_FILE_{REMOVABLE,NET}_RUN_FROM_SWAP
- // bits in the COFF header, respectively. If one of the bits is on, the
- // Windows loader will copy the entire file to swap area then execute it,
- // so that the user can eject a CD or disconnect from the network.
- if (parsedArgs->hasArg(OPT_swaprun_cd))
- ctx.setSwapRunFromCD(true);
-
- if (parsedArgs->hasArg(OPT_swaprun_net))
- ctx.setSwapRunFromNet(true);
-
- if (parsedArgs->hasArg(OPT_profile)) {
- // /profile implies /opt:ref, /opt:noicf, /incremental:no and /fixed:no.
- ctx.setDeadStripping(true);
- ctx.setBaseRelocationEnabled(true);
- ctx.setDynamicBaseEnabled(true);
- }
-
- for (auto *arg : parsedArgs->filtered(OPT_implib))
- ctx.setOutputImportLibraryPath(arg->getValue());
-
- for (auto *arg : parsedArgs->filtered(OPT_delayload)) {
- ctx.addInitialUndefinedSymbol(ctx.getDelayLoadHelperName());
- ctx.addDelayLoadDLL(arg->getValue());
- }
-
- if (auto *arg = parsedArgs->getLastArg(OPT_stub)) {
- ArrayRef<uint8_t> contents;
- if (!readFile(ctx, arg->getValue(), contents)) {
- diag << "Failed to read DOS stub file " << arg->getValue() << "\n";
- return false;
- }
- ctx.setDosStub(contents);
- }
-
- for (auto *arg : parsedArgs->filtered(OPT_incl))
- ctx.addInitialUndefinedSymbol(ctx.allocate(arg->getValue()));
-
- if (parsedArgs->hasArg(OPT_noentry))
- ctx.setHasEntry(false);
-
- if (parsedArgs->hasArg(OPT_nodefaultlib_all))
- ctx.setNoDefaultLibAll(true);
-
- if (auto *arg = parsedArgs->getLastArg(OPT_out))
- ctx.setOutputPath(ctx.allocate(arg->getValue()));
-
- if (auto *arg = parsedArgs->getLastArg(OPT_pdb))
- ctx.setPDBFilePath(arg->getValue());
-
- if (auto *arg = parsedArgs->getLastArg(OPT_lldmoduledeffile))
- ctx.setModuleDefinitionFile(arg->getValue());
-
- std::vector<StringRef> inputFiles;
- for (auto *arg : parsedArgs->filtered(OPT_INPUT))
- inputFiles.push_back(ctx.allocate(arg->getValue()));
-
-#define BOOLEAN_FLAG(name, setter) \
- if (auto *arg = parsedArgs->getLastArg(OPT_##name, OPT_##name##_no)) \
- ctx.setter(arg->getOption().matches(OPT_##name));
-
- BOOLEAN_FLAG(nxcompat, setNxCompat);
- BOOLEAN_FLAG(largeaddressaware, setLargeAddressAware);
- BOOLEAN_FLAG(allowbind, setAllowBind);
- BOOLEAN_FLAG(allowisolation, setAllowIsolation);
- BOOLEAN_FLAG(dynamicbase, setDynamicBaseEnabled);
- BOOLEAN_FLAG(tsaware, setTerminalServerAware);
- BOOLEAN_FLAG(highentropyva, setHighEntropyVA);
- BOOLEAN_FLAG(safeseh, setSafeSEH);
-#undef BOOLEAN_FLAG
-
- // Arguments after "--" are interpreted as filenames even if they
- // start with a hypen or a slash. This is not compatible with link.exe
- // but useful for us to test lld on Unix.
- if (llvm::opt::Arg *dashdash = parsedArgs->getLastArg(OPT_DASH_DASH))
- for (const StringRef value : dashdash->getValues())
- inputFiles.push_back(value);
-
- // Compile Windows resource files to compiled resource file.
- if (ctx.getCreateManifest() && ctx.getEmbedManifest() &&
- !isReadingDirectiveSection) {
- std::string resFile;
- if (!createManifestResourceFile(ctx, diag, resFile))
- return false;
- inputFiles.push_back(ctx.allocate(resFile));
- }
-
- // A Windows Resource file is not an object file. It contains data,
- // such as an icon image, and is not in COFF file format. If resource
- // files are given, the linker merge them into one COFF file using
- // CVTRES.EXE and then link the resulting file.
- {
- auto it = std::partition(inputFiles.begin(), inputFiles.end(),
- isResoruceFile);
- if (it != inputFiles.begin()) {
- std::vector<std::string> resFiles(inputFiles.begin(), it);
- std::string resObj;
- if (!convertResourceFiles(ctx, resFiles, resObj)) {
- diag << "Failed to convert resource files\n";
- return false;
- }
- inputFiles = std::vector<StringRef>(it, inputFiles.end());
- inputFiles.push_back(ctx.allocate(resObj));
- ctx.registerTemporaryFile(resObj);
- }
- }
-
- // Prepare objects to add them to the list of input files.
- for (StringRef path : inputFiles) {
- path = ctx.allocate(path);
- if (isLibraryFile(path)) {
- addFiles(ctx, getLibraryPath(ctx, path), diag, libraries);
- } else {
- addFiles(ctx, getObjectPath(ctx, path), diag, files);
- }
- }
-
- // If dead-stripping is enabled, we need to add the entry symbol and
- // symbols given by /include to the dead strip root set, so that it
- // won't be removed from the output.
- if (ctx.deadStrip())
- for (const StringRef symbolName : ctx.initialUndefinedSymbols())
- ctx.addDeadStripRoot(symbolName);
-
- // Add the libraries specified by /defaultlib unless they are already added
- // nor blacklisted by /nodefaultlib.
- if (!ctx.getNoDefaultLibAll())
- for (const StringRef path : defaultLibs)
- if (!ctx.hasNoDefaultLib(path))
- addFiles(ctx, getLibraryPath(ctx, path.lower()), diag, libraries);
-
- if (files.empty() && !isReadingDirectiveSection) {
- diag << "No input files\n";
- return false;
- }
-
- // If /out option was not specified, the default output file name is
- // constructed by replacing an extension of the first input file
- // with ".exe".
- if (ctx.outputPath().empty()) {
- StringRef path = files[0]->path();
- ctx.setOutputPath(replaceExtension(ctx, path, ".exe"));
- }
-
- // Add the input files to the linking context.
- for (std::unique_ptr<File> &file : files) {
- if (isReadingDirectiveSection) {
- File *f = file.get();
- ctx.getTaskGroup().spawn([f] { f->parse(); });
- }
- ctx.getNodes().push_back(llvm::make_unique<FileNode>(std::move(file)));
- }
-
- // Add the library group to the linking context.
- if (!isReadingDirectiveSection) {
- // Add a group-end marker.
- ctx.getNodes().push_back(llvm::make_unique<GroupEnd>(0));
- }
-
- // Add the library files to the library group.
- for (std::unique_ptr<File> &file : libraries) {
- if (!hasLibrary(ctx, file.get())) {
- if (isReadingDirectiveSection) {
- File *f = file.get();
- ctx.getTaskGroup().spawn([f] { f->parse(); });
- }
- ctx.addLibraryFile(llvm::make_unique<FileNode>(std::move(file)));
- }
- }
-
- // Validate the combination of options used.
- return ctx.validate(diag);
-}
-
-} // namespace lld
Removed: lld/trunk/lib/Driver/WinLinkModuleDef.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/WinLinkModuleDef.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/Driver/WinLinkModuleDef.cpp (original)
+++ lld/trunk/lib/Driver/WinLinkModuleDef.cpp (removed)
@@ -1,295 +0,0 @@
-//===- lib/Driver/WinLinkModuleDef.cpp ------------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief Windows module definition file parser.
-///
-//===----------------------------------------------------------------------===//
-
-#include "lld/Driver/WinLinkModuleDef.h"
-#include "llvm/ADT/StringSwitch.h"
-
-namespace lld {
-namespace moduledef {
-
-Token Lexer::lex() {
- for (;;) {
- _buffer = _buffer.trim();
- if (_buffer.empty() || _buffer[0] == '\0')
- return Token(Kind::eof, _buffer);
-
- switch (_buffer[0]) {
- case ';': {
- size_t end = _buffer.find('\n');
- _buffer = (end == _buffer.npos) ? "" : _buffer.drop_front(end);
- continue;
- }
- case '=':
- _buffer = _buffer.drop_front();
- return Token(Kind::equal, "=");
- case ',':
- _buffer = _buffer.drop_front();
- return Token(Kind::comma, ",");
- case '"': {
- size_t end = _buffer.find('"', 1);
- Token ret;
- if (end == _buffer.npos) {
- ret = Token(Kind::identifier, _buffer.substr(1, end));
- _buffer = "";
- } else {
- ret = Token(Kind::identifier, _buffer.substr(1, end - 1));
- _buffer = _buffer.drop_front(end + 1);
- }
- return ret;
- }
- default: {
- size_t end = _buffer.find_first_not_of(
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789_.*~+!@#$%^&*()/");
- StringRef word = _buffer.substr(0, end);
- Kind kind = llvm::StringSwitch<Kind>(word)
- .Case("BASE", Kind::kw_base)
- .Case("DATA", Kind::kw_data)
- .Case("EXPORTS", Kind::kw_exports)
- .Case("HEAPSIZE", Kind::kw_heapsize)
- .Case("LIBRARY", Kind::kw_library)
- .Case("NAME", Kind::kw_name)
- .Case("NONAME", Kind::kw_noname)
- .Case("PRIVATE", Kind::kw_private)
- .Case("STACKSIZE", Kind::kw_stacksize)
- .Case("VERSION", Kind::kw_version)
- .Default(Kind::identifier);
- _buffer = (end == _buffer.npos) ? "" : _buffer.drop_front(end);
- return Token(kind, word);
- }
- }
- }
-}
-
-void Parser::consumeToken() {
- if (_tokBuf.empty()) {
- _tok = _lex.lex();
- return;
- }
- _tok = _tokBuf.back();
- _tokBuf.pop_back();
-}
-
-bool Parser::consumeTokenAsInt(uint64_t &result) {
- consumeToken();
- if (_tok._kind != Kind::identifier) {
- ungetToken();
- error(_tok, "Integer expected");
- return false;
- }
- if (_tok._range.getAsInteger(10, result)) {
- error(_tok, "Integer expected");
- return false;
- }
- return true;
-}
-
-bool Parser::expectAndConsume(Kind kind, Twine msg) {
- consumeToken();
- if (_tok._kind != kind) {
- error(_tok, msg);
- return false;
- }
- return true;
-}
-
-void Parser::ungetToken() { _tokBuf.push_back(_tok); }
-
-void Parser::error(const Token &tok, Twine msg) {
- _lex.getSourceMgr().PrintMessage(
- llvm::SMLoc::getFromPointer(tok._range.data()), llvm::SourceMgr::DK_Error,
- msg);
-}
-
-bool Parser::parse(std::vector<Directive *> &ret) {
- for (;;) {
- Directive *dir = nullptr;
- if (!parseOne(dir))
- return false;
- if (!dir)
- return true;
- ret.push_back(dir);
- }
-}
-
-bool Parser::parseOne(Directive *&ret) {
- consumeToken();
- switch (_tok._kind) {
- case Kind::eof:
- return true;
- case Kind::kw_exports: {
- // EXPORTS
- std::vector<PECOFFLinkingContext::ExportDesc> exports;
- for (;;) {
- PECOFFLinkingContext::ExportDesc desc;
- if (!parseExport(desc))
- break;
- exports.push_back(desc);
- }
- ret = new (_alloc) Exports(exports);
- return true;
- }
- case Kind::kw_heapsize: {
- // HEAPSIZE
- uint64_t reserve, commit;
- if (!parseMemorySize(reserve, commit))
- return false;
- ret = new (_alloc) Heapsize(reserve, commit);
- return true;
- }
- case Kind::kw_library: {
- // LIBRARY
- std::string name;
- uint64_t baseaddr;
- if (!parseName(name, baseaddr))
- return false;
- if (!StringRef(name).endswith_lower(".dll"))
- name.append(".dll");
- ret = new (_alloc) Library(name, baseaddr);
- return true;
- }
- case Kind::kw_stacksize: {
- // STACKSIZE
- uint64_t reserve, commit;
- if (!parseMemorySize(reserve, commit))
- return false;
- ret = new (_alloc) Stacksize(reserve, commit);
- return true;
- }
- case Kind::kw_name: {
- // NAME
- std::string outputPath;
- uint64_t baseaddr;
- if (!parseName(outputPath, baseaddr))
- return false;
- ret = new (_alloc) Name(outputPath, baseaddr);
- return true;
- }
- case Kind::kw_version: {
- // VERSION
- int major, minor;
- if (!parseVersion(major, minor))
- return false;
- ret = new (_alloc) Version(major, minor);
- return true;
- }
- default:
- error(_tok, Twine("Unknown directive: ") + _tok._range);
- return false;
- }
-}
-
-bool Parser::parseExport(PECOFFLinkingContext::ExportDesc &result) {
- consumeToken();
- if (_tok._kind != Kind::identifier) {
- ungetToken();
- return false;
- }
- result.name = _tok._range;
-
- consumeToken();
- if (_tok._kind == Kind::equal) {
- consumeToken();
- if (_tok._kind != Kind::identifier)
- return false;
- result.externalName = result.name;
- result.name = _tok._range;
- } else {
- ungetToken();
- }
-
- for (;;) {
- consumeToken();
- if (_tok._kind == Kind::identifier && _tok._range[0] == '@') {
- _tok._range.drop_front().getAsInteger(10, result.ordinal);
- consumeToken();
- if (_tok._kind == Kind::kw_noname) {
- result.noname = true;
- } else {
- ungetToken();
- }
- continue;
- }
- if (_tok._kind == Kind::kw_data) {
- result.isData = true;
- continue;
- }
- if (_tok._kind == Kind::kw_private) {
- result.isPrivate = true;
- continue;
- }
- ungetToken();
- return true;
- }
-}
-
-// HEAPSIZE/STACKSIZE reserve[,commit]
-bool Parser::parseMemorySize(uint64_t &reserve, uint64_t &commit) {
- if (!consumeTokenAsInt(reserve))
- return false;
-
- consumeToken();
- if (_tok._kind != Kind::comma) {
- ungetToken();
- commit = 0;
- return true;
- }
-
- if (!consumeTokenAsInt(commit))
- return false;
- return true;
-}
-
-// NAME [outputPath] [BASE=address]
-bool Parser::parseName(std::string &outputPath, uint64_t &baseaddr) {
- consumeToken();
- if (_tok._kind == Kind::identifier) {
- outputPath = _tok._range;
- } else {
- outputPath = "";
- ungetToken();
- return true;
- }
- consumeToken();
- if (_tok._kind == Kind::kw_base) {
- if (!expectAndConsume(Kind::equal, "'=' expected"))
- return false;
- if (!consumeTokenAsInt(baseaddr))
- return false;
- } else {
- ungetToken();
- baseaddr = 0;
- }
- return true;
-}
-
-// VERSION major[.minor]
-bool Parser::parseVersion(int &major, int &minor) {
- consumeToken();
- if (_tok._kind != Kind::identifier)
- return false;
- StringRef v1, v2;
- std::tie(v1, v2) = _tok._range.split('.');
- if (v1.getAsInteger(10, major))
- return false;
- if (v2.empty()) {
- minor = 0;
- } else if (v2.getAsInteger(10, minor)) {
- return false;
- }
- return true;
-}
-
-} // moddef
-} // namespace lld
Removed: lld/trunk/lib/Driver/WinLinkOptions.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/WinLinkOptions.td?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/Driver/WinLinkOptions.td (original)
+++ lld/trunk/lib/Driver/WinLinkOptions.td (removed)
@@ -1,120 +0,0 @@
-include "llvm/Option/OptParser.td"
-
-// link.exe accepts options starting with either a dash or a slash.
-
-// Flag that takes no arguments.
-class F<string name> : Flag<["/", "-", "-?"], name>;
-
-// Flag that takes one argument after ":".
-class P<string name, string help> :
- Joined<["/", "-", "-?"], name#":">, HelpText<help>;
-
-// Boolean flag suffixed by ":no".
-multiclass B<string name, string help> {
- def "" : F<name>;
- def _no : F<name#":no">, HelpText<help>;
-}
-
-def alternatename : P<"alternatename", "Define weak alias">;
-def base : P<"base", "Base address of the program">;
-def defaultlib : P<"defaultlib", "Add the library to the list of input files">;
-def nodefaultlib : P<"nodefaultlib", "Remove a default library">;
-def disallowlib : Joined<["/", "-", "-?"], "disallowlib:">, Alias<nodefaultlib>;
-def entry : P<"entry", "Name of entry point symbol">;
-// No help text because /failifmismatch is not intended to be used by the user.
-def export : P<"export", "Export a function">;
-def failifmismatch : P<"failifmismatch", "">;
-def heap : P<"heap", "Size of the heap">;
-def align : P<"align", "Section alignment">;
-def libpath : P<"libpath", "Additional library search path">;
-def mllvm : P<"mllvm", "Options to pass to LLVM">;
-def out : P<"out", "Path to file to write output">;
-def stack : P<"stack", "Size of the stack">;
-def machine : P<"machine", "Specify target platform">;
-def version : P<"version", "Specify a version number in the PE header">;
-def merge : P<"merge", "Combine sections">;
-def section : P<"section", "Specify section attributes">;
-def subsystem : P<"subsystem", "Specify subsystem">;
-def stub : P<"stub", "Specify DOS stub file">;
-def opt : P<"opt", "Control optimizations">;
-def implib : P<"implib", "Import library name">;
-def delayload : P<"delayload", "Delay loaded DLL name">;
-def pdb : P<"pdb", "PDB file path">;
-
-def manifest : F<"manifest">;
-def manifest_colon : P<"manifest", "Create manifest file">;
-def manifestuac : P<"manifestuac", "User access control">;
-def manifestfile : P<"manifestfile", "Manifest file path">;
-def manifestdependency : P<"manifestdependency",
- "Attributes for <dependency> in manifest file">;
-
-// We cannot use multiclass P because class name "incl" is different
-// from its command line option name. We do this because "include" is
-// a reserved keyword in tablegen.
-def incl : Joined<["/", "-"], "include:">,
- HelpText<"Force symbol to be added to symbol table as undefined one">;
-
-// "def" is also a keyword.
-def deffile : Joined<["/", "-"], "def:">,
- HelpText<"Use module-definition file">;
-
-def nodefaultlib_all : F<"nodefaultlib">;
-def noentry : F<"noentry">;
-def dll : F<"dll">;
-def verbose : F<"verbose">;
-def debug : F<"debug">;
-def swaprun_cd : F<"swaprun:cd">;
-def swaprun_net : F<"swaprun:net">;
-def profile : F<"profile">;
-
-def force : F<"force">,
- HelpText<"Allow undefined symbols when creating executables">;
-def force_unresolved : F<"force:unresolved">;
-
-defm nxcompat : B<"nxcompat", "Disable data execution provention">;
-defm largeaddressaware : B<"largeaddressaware", "Disable large addresses">;
-defm allowbind: B<"allowbind", "Disable DLL binding">;
-defm fixed : B<"fixed", "Enable base relocations">;
-defm tsaware : B<"tsaware", "Create non-Terminal Server aware executable">;
-defm allowisolation : B<"allowisolation", "Set NO_ISOLATION bit">;
-defm dynamicbase : B<"dynamicbase",
- "Disable address space layout randomization">;
-defm safeseh : B<"safeseh", "Produce an image with Safe Exception Handler">;
-defm highentropyva : B<"highentropyva", "Set HIGH_ENTROPY_VA bit">;
-
-def help : F<"help">;
-def help_q : Flag<["/?", "-?"], "">, Alias<help>;
-
-def DASH_DASH : Option<["--"], "", KIND_REMAINING_ARGS>;
-
-// Flag for debug
-def lldmoduledeffile : Joined<["/", "-"], "lldmoduledeffile:">;
-
-//==============================================================================
-// The flags below do nothing. They are defined only for link.exe compatibility.
-//==============================================================================
-
-class QF<string name> : Joined<["/", "-", "-?"], name#":">;
-
-multiclass QB<string name> {
- def "" : F<name>;
- def _no : F<name#":no">;
-}
-
-def functionpadmin : F<"functionpadmin">;
-def ignoreidl : F<"ignoreidl">;
-def incremental : F<"incremental">;
-def no_incremental : F<"incremental:no">;
-def nologo : F<"nologo">;
-
-def delay : QF<"delay">;
-def errorreport : QF<"errorreport">;
-def idlout : QF<"idlout">;
-def ignore : QF<"ignore">;
-def maxilksize : QF<"maxilksize">;
-def pdbaltpath : QF<"pdbaltpath">;
-def tlbid : QF<"tlbid">;
-def tlbout : QF<"tlbout">;
-def verbose_all : QF<"verbose">;
-
-defm wx : QB<"wx">;
Modified: lld/trunk/lib/ReaderWriter/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/CMakeLists.txt?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/CMakeLists.txt (original)
+++ lld/trunk/lib/ReaderWriter/CMakeLists.txt Thu Aug 6 11:19:35 2015
@@ -1,6 +1,5 @@
add_subdirectory(ELF)
add_subdirectory(MachO)
-add_subdirectory(PECOFF)
add_subdirectory(YAML)
if (MSVC)
Removed: lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/Atoms.h (removed)
@@ -1,312 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/Atoms.h ------------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_ATOMS_H
-#define LLD_READER_WRITER_PE_COFF_ATOMS_H
-
-#include "lld/Core/File.h"
-#include "lld/Core/Simple.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/Object/COFF.h"
-#include <vector>
-
-namespace lld {
-namespace pecoff {
-class COFFDefinedAtom;
-
-class COFFUndefinedAtom : public UndefinedAtom {
-public:
- COFFUndefinedAtom(const File &file, StringRef name,
- const UndefinedAtom *fallback = nullptr)
- : _owningFile(file), _name(name), _fallback(fallback) {}
-
- const File &file() const override { return _owningFile; }
- StringRef name() const override { return _name; }
- CanBeNull canBeNull() const override { return CanBeNull::canBeNullNever; }
- const UndefinedAtom *fallback() const override { return _fallback; }
-
-private:
- const File &_owningFile;
- StringRef _name;
- const UndefinedAtom *_fallback;
-};
-
-/// The base class of all COFF defined atoms. A derived class of
-/// COFFBaseDefinedAtom may represent atoms read from a file or atoms created
-/// by the linker. An example of the latter case is the jump table for symbols
-/// in a DLL.
-class COFFBaseDefinedAtom : public DefinedAtom {
-public:
- enum class Kind {
- File,
- Internal
- };
-
- const File &file() const override { return _file; }
- StringRef name() const override { return _name; }
- Interposable interposable() const override { return interposeNo; }
- Merge merge() const override { return mergeNo; }
- Alignment alignment() const override { return 1; }
- StringRef customSectionName() const override { return ""; }
- DeadStripKind deadStrip() const override { return deadStripNormal; }
-
- Kind getKind() const { return _kind; }
-
- void addReference(std::unique_ptr<SimpleReference> reference) {
- _references.push_back(std::move(reference));
- }
-
- reference_iterator begin() const override {
- return reference_iterator(*this, reinterpret_cast<const void *>(0));
- }
-
- reference_iterator end() const override {
- return reference_iterator(
- *this, reinterpret_cast<const void *>(_references.size()));
- }
-
-protected:
- COFFBaseDefinedAtom(const File &file, StringRef name, Kind kind)
- : _file(file), _name(name), _kind(kind) {}
-
-private:
- const Reference *derefIterator(const void *iter) const override {
- size_t index = reinterpret_cast<size_t>(iter);
- return _references[index].get();
- }
-
- void incrementIterator(const void *&iter) const override {
- size_t index = reinterpret_cast<size_t>(iter);
- iter = reinterpret_cast<const void *>(index + 1);
- }
-
- const File &_file;
- StringRef _name;
- Kind _kind;
- std::vector<std::unique_ptr<SimpleReference>> _references;
-};
-
-/// This is the root class of the atom read from a file. This class have two
-/// subclasses; one for the regular atom and another for the BSS atom.
-class COFFDefinedFileAtom : public COFFBaseDefinedAtom {
-public:
- COFFDefinedFileAtom(const File &file, StringRef name, StringRef sectionName,
- uint64_t sectionSize, Scope scope,
- ContentType contentType, ContentPermissions perms,
- uint64_t ordinal)
- : COFFBaseDefinedAtom(file, name, Kind::File), _sectionName(sectionName),
- _sectionSize(sectionSize), _scope(scope), _contentType(contentType),
- _permissions(perms), _ordinal(ordinal), _alignment(1) {}
-
- static bool classof(const COFFBaseDefinedAtom *atom) {
- return atom->getKind() == Kind::File;
- }
-
- void setAlignment(Alignment val) { _alignment = val; }
- SectionChoice sectionChoice() const override { return sectionCustomRequired; }
- StringRef customSectionName() const override { return _sectionName; }
- uint64_t sectionSize() const override { return _sectionSize; }
- Scope scope() const override { return _scope; }
- ContentType contentType() const override { return _contentType; }
- ContentPermissions permissions() const override { return _permissions; }
- uint64_t ordinal() const override { return _ordinal; }
- Alignment alignment() const override { return _alignment; }
-
- void addAssociate(const DefinedAtom *other) {
- auto *ref = new SimpleReference(Reference::KindNamespace::all,
- Reference::KindArch::all,
- lld::Reference::kindAssociate, 0, other, 0);
- addReference(std::unique_ptr<SimpleReference>(ref));
- }
-
-private:
- StringRef _sectionName;
- uint64_t _sectionSize;
- Scope _scope;
- ContentType _contentType;
- ContentPermissions _permissions;
- uint64_t _ordinal;
- Alignment _alignment;
- std::vector<std::unique_ptr<SimpleReference>> _references;
-};
-
-// A COFFDefinedAtom represents an atom read from a file and has contents.
-class COFFDefinedAtom : public COFFDefinedFileAtom {
-public:
- COFFDefinedAtom(const File &file, StringRef name, StringRef sectionName,
- uint64_t sectionSize, Scope scope, ContentType type,
- bool isComdat, ContentPermissions perms, Merge merge,
- ArrayRef<uint8_t> data, uint64_t ordinal)
- : COFFDefinedFileAtom(file, name, sectionName, sectionSize,
- scope, type, perms, ordinal),
- _isComdat(isComdat), _merge(merge), _dataref(data) {}
-
- Merge merge() const override { return _merge; }
- uint64_t size() const override { return _dataref.size(); }
- ArrayRef<uint8_t> rawContent() const override { return _dataref; }
-
- DeadStripKind deadStrip() const override {
- // Only COMDAT symbols would be dead-stripped.
- return _isComdat ? deadStripNormal : deadStripNever;
- }
-
-private:
- bool _isComdat;
- Merge _merge;
- ArrayRef<uint8_t> _dataref;
-};
-
-// A COFFDefinedAtom represents an atom for BSS section.
-class COFFBSSAtom : public COFFDefinedFileAtom {
-public:
- COFFBSSAtom(const File &file, StringRef name, Scope scope,
- ContentPermissions perms, Merge merge, uint32_t size,
- uint64_t ordinal)
- : COFFDefinedFileAtom(file, name, ".bss", 0, scope, typeZeroFill,
- perms, ordinal),
- _merge(merge), _size(size) {}
-
- Merge merge() const override { return _merge; }
- uint64_t size() const override { return _size; }
- ArrayRef<uint8_t> rawContent() const override { return _contents; }
-
-private:
- Merge _merge;
- uint32_t _size;
- std::vector<uint8_t> _contents;
-};
-
-/// A COFFLinkerInternalAtom represents a defined atom created by the linker,
-/// not read from file.
-class COFFLinkerInternalAtom : public COFFBaseDefinedAtom {
-public:
- SectionChoice sectionChoice() const override { return sectionBasedOnContent; }
- uint64_t ordinal() const override { return _ordinal; }
- Scope scope() const override { return scopeGlobal; }
- Alignment alignment() const override { return 1; }
- uint64_t size() const override { return _data.size(); }
- ArrayRef<uint8_t> rawContent() const override { return _data; }
-
-protected:
- COFFLinkerInternalAtom(const File &file, uint64_t ordinal,
- std::vector<uint8_t> data, StringRef symbolName = "")
- : COFFBaseDefinedAtom(file, symbolName, Kind::Internal),
- _ordinal(ordinal), _data(std::move(data)) {}
-
-private:
- uint64_t _ordinal;
- std::vector<uint8_t> _data;
-};
-
-class COFFStringAtom : public COFFLinkerInternalAtom {
-public:
- COFFStringAtom(const File &file, uint64_t ordinal, StringRef sectionName,
- StringRef contents)
- : COFFLinkerInternalAtom(file, ordinal, stringRefToVector(contents)),
- _sectionName(sectionName) {}
-
- SectionChoice sectionChoice() const override { return sectionCustomRequired; }
- StringRef customSectionName() const override { return _sectionName; }
- ContentType contentType() const override { return typeData; }
- ContentPermissions permissions() const override { return permR__; }
-
-private:
- StringRef _sectionName;
-
- std::vector<uint8_t> stringRefToVector(StringRef name) const {
- std::vector<uint8_t> ret(name.size() + 1);
- memcpy(&ret[0], name.data(), name.size());
- ret[name.size()] = 0;
- return ret;
- }
-};
-
-// A COFFSharedLibraryAtom represents a symbol for data in an import library. A
-// reference to a COFFSharedLibraryAtom will be transformed to a real reference
-// to an import address table entry in Idata pass.
-class COFFSharedLibraryAtom : public SharedLibraryAtom {
-public:
- COFFSharedLibraryAtom(const File &file, uint16_t hint, StringRef symbolName,
- StringRef importName, StringRef dllName)
- : _file(file), _hint(hint), _mangledName(addImpPrefix(symbolName)),
- _importName(importName), _dllName(dllName), _importTableEntry(nullptr) {
- }
-
- const File &file() const override { return _file; }
- uint16_t hint() const { return _hint; }
-
- /// Returns the symbol name to be used by the core linker.
- StringRef name() const override { return _mangledName; }
-
- /// Returns the symbol name to be used in the import description table in the
- /// COFF header.
- virtual StringRef importName() const { return _importName; }
-
- StringRef loadName() const override { return _dllName; }
- bool canBeNullAtRuntime() const override { return false; }
- Type type() const override { return Type::Unknown; }
- uint64_t size() const override { return 0; }
-
- void setImportTableEntry(const DefinedAtom *atom) {
- _importTableEntry = atom;
- }
-
- const DefinedAtom *getImportTableEntry() const { return _importTableEntry; }
-
-private:
- /// Mangle the symbol name by adding "__imp_" prefix. See the file comment of
- /// ReaderImportHeader.cpp for details about the prefix.
- std::string addImpPrefix(StringRef symbolName) {
- std::string ret("__imp_");
- ret.append(symbolName);
- return ret;
- }
-
- const File &_file;
- uint16_t _hint;
- std::string _mangledName;
- std::string _importName;
- StringRef _dllName;
- const DefinedAtom *_importTableEntry;
-};
-
-// An instance of this class represents "input file" for atoms created in a
-// pass. Atoms need to be associated to an input file even if it's not read from
-// a file, so we use this class for that.
-class VirtualFile : public SimpleFile {
-public:
- VirtualFile(const LinkingContext &ctx)
- : SimpleFile("<virtual-file>"), _nextOrdinal(0) {
- setOrdinal(ctx.getNextOrdinalAndIncrement());
- }
-
- uint64_t getNextOrdinal() { return _nextOrdinal++; }
-
-private:
- uint64_t _nextOrdinal;
-};
-
-//===----------------------------------------------------------------------===//
-//
-// Utility functions to handle layout edges.
-//
-//===----------------------------------------------------------------------===//
-
-template <typename T, typename U>
-void addLayoutEdge(T *a, U *b, uint32_t which) {
- auto ref = new SimpleReference(Reference::KindNamespace::all,
- Reference::KindArch::all,
- which, 0, b, 0);
- a->addReference(std::unique_ptr<SimpleReference>(ref));
-}
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/CMakeLists.txt?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/CMakeLists.txt (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/CMakeLists.txt (removed)
@@ -1,16 +0,0 @@
-add_llvm_library(lldPECOFF
- EdataPass.cpp
- IdataPass.cpp
- LinkerGeneratedSymbolFile.cpp
- LoadConfigPass.cpp
- PECOFFLinkingContext.cpp
- Pass.cpp
- ReaderCOFF.cpp
- ReaderImportHeader.cpp
- WriterImportLibrary.cpp
- WriterPECOFF.cpp
- LINK_LIBS
- lldCore
- LLVMObject
- LLVMSupport
- )
Removed: lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.cpp (removed)
@@ -1,229 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/EdataPass.cpp ------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Pass.h"
-#include "EdataPass.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Pass.h"
-#include "lld/Core/Simple.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/Path.h"
-#include <climits>
-#include <ctime>
-#include <utility>
-
-using lld::pecoff::edata::EdataAtom;
-using lld::pecoff::edata::TableEntry;
-using llvm::object::export_address_table_entry;
-using llvm::object::export_directory_table_entry;
-
-namespace lld {
-namespace pecoff {
-
-typedef PECOFFLinkingContext::ExportDesc ExportDesc;
-
-// dedupExports removes duplicate export entries. If two exports are
-// referring the same symbol, they are considered duplicates.
-// This could happen if the same symbol name is specified as an argument
-// to /export more than once, or an unmangled and mangled name of the
-// same symbol are given to /export. In the latter case, we choose
-// unmangled (shorter) name.
-static void dedupExports(PECOFFLinkingContext &ctx) {
- std::vector<ExportDesc> &exports = ctx.getDllExports();
- // Pass 1: find duplicate entries
- std::set<const ExportDesc *> dup;
- std::map<StringRef, ExportDesc *> map;
- for (ExportDesc &exp : exports) {
- if (!exp.externalName.empty())
- continue;
- StringRef symbol = exp.getRealName();
- auto it = map.find(symbol);
- if (it == map.end()) {
- map[symbol] = &exp;
- } else if (symbol.size() < it->second->getRealName().size()) {
- map[symbol] = &exp;
- dup.insert(it->second);
- } else {
- dup.insert(&exp);
- }
- }
- // Pass 2: remove duplicate entries
- auto pred = [&](const ExportDesc &exp) {
- return dup.count(&exp) == 1;
- };
- exports.erase(std::remove_if(exports.begin(), exports.end(), pred),
- exports.end());
-}
-
-static void assignOrdinals(PECOFFLinkingContext &ctx) {
- std::vector<ExportDesc> &exports = ctx.getDllExports();
- int maxOrdinal = -1;
- for (ExportDesc &desc : exports)
- maxOrdinal = std::max(maxOrdinal, desc.ordinal);
-
- std::sort(exports.begin(), exports.end(),
- [](const ExportDesc &a, const ExportDesc &b) {
- return a.getExternalName().compare(b.getExternalName()) < 0;
- });
-
- int nextOrdinal = (maxOrdinal == -1) ? 1 : (maxOrdinal + 1);
- for (ExportDesc &desc : exports)
- if (desc.ordinal == -1)
- desc.ordinal = nextOrdinal++;
-}
-
-static bool getExportedAtoms(PECOFFLinkingContext &ctx, const SimpleFile &file,
- std::vector<TableEntry> &ret) {
- std::map<StringRef, const DefinedAtom *> definedAtoms;
- for (const DefinedAtom *atom : file.defined())
- definedAtoms[atom->name()] = atom;
-
- for (PECOFFLinkingContext::ExportDesc &desc : ctx.getDllExports()) {
- auto it = definedAtoms.find(desc.getRealName());
- if (it == definedAtoms.end()) {
- llvm::errs() << "Symbol <" << desc.name
- << "> is exported but not defined.\n";
- return false;
- }
- const DefinedAtom *atom = it->second;
-
- // One can export a symbol with a different name than the symbol
- // name used in DLL. If such name is specified, use it in the
- // .edata section.
- ret.push_back(TableEntry(ctx.undecorateSymbol(desc.getExternalName()),
- desc.ordinal, atom, desc.noname));
- }
- std::sort(ret.begin(), ret.end(),
- [](const TableEntry &a, const TableEntry &b) {
- return a.exportName.compare(b.exportName) < 0;
- });
-
- return true;
-}
-
-static std::pair<int, int> getOrdinalBase(std::vector<TableEntry> &entries) {
- int ordinalBase = INT_MAX;
- int maxOrdinal = -1;
- for (TableEntry &e : entries) {
- ordinalBase = std::min(ordinalBase, e.ordinal);
- maxOrdinal = std::max(maxOrdinal, e.ordinal);
- }
- return std::pair<int, int>(ordinalBase, maxOrdinal);
-}
-
-edata::EdataAtom *
-EdataPass::createAddressTable(const std::vector<TableEntry> &entries,
- int ordinalBase, int maxOrdinal) {
- EdataAtom *addressTable =
- new (_alloc) EdataAtom(_file, sizeof(export_address_table_entry) *
- (maxOrdinal - ordinalBase + 1));
-
- for (const TableEntry &e : entries) {
- int index = e.ordinal - ordinalBase;
- size_t offset = index * sizeof(export_address_table_entry);
- addDir32NBReloc(addressTable, e.atom, _ctx.getMachineType(), offset);
- }
- return addressTable;
-}
-
-edata::EdataAtom *
-EdataPass::createNamePointerTable(const PECOFFLinkingContext &ctx,
- const std::vector<TableEntry> &entries,
- SimpleFile *file) {
- EdataAtom *table =
- new (_alloc) EdataAtom(_file, sizeof(uint32_t) * entries.size());
-
- size_t offset = 0;
- for (const TableEntry &e : entries) {
- auto *stringAtom = new (_alloc) COFFStringAtom(
- _file, _stringOrdinal++, ".edata", e.exportName);
- file->addAtom(*stringAtom);
- addDir32NBReloc(table, stringAtom, _ctx.getMachineType(), offset);
- offset += sizeof(uint32_t);
- }
- return table;
-}
-
-edata::EdataAtom *EdataPass::createExportDirectoryTable(
- const std::vector<edata::TableEntry> &namedEntries, int ordinalBase,
- int maxOrdinal) {
- EdataAtom *ret =
- new (_alloc) EdataAtom(_file, sizeof(export_directory_table_entry));
- auto *data = ret->getContents<export_directory_table_entry>();
- data->TimeDateStamp = time(nullptr);
- data->OrdinalBase = ordinalBase;
- data->AddressTableEntries = maxOrdinal - ordinalBase + 1;
- data->NumberOfNamePointers = namedEntries.size();
- return ret;
-}
-
-edata::EdataAtom *
-EdataPass::createOrdinalTable(const std::vector<TableEntry> &entries,
- int ordinalBase) {
- EdataAtom *ret =
- new (_alloc) EdataAtom(_file, sizeof(uint16_t) * entries.size());
- uint16_t *data = ret->getContents<uint16_t>();
- int i = 0;
- for (const TableEntry &e : entries)
- data[i++] = e.ordinal - ordinalBase;
- return ret;
-}
-
-std::error_code EdataPass::perform(SimpleFile &file) {
- dedupExports(_ctx);
- assignOrdinals(_ctx);
-
- std::vector<TableEntry> entries;
- if (!getExportedAtoms(_ctx, file, entries))
- return std::error_code();
- if (entries.empty())
- return std::error_code();
-
- int ordinalBase, maxOrdinal;
- std::tie(ordinalBase, maxOrdinal) = getOrdinalBase(entries);
-
- std::vector<TableEntry> namedEntries;
- for (TableEntry &e : entries)
- if (!e.noname)
- namedEntries.push_back(e);
-
- EdataAtom *table =
- createExportDirectoryTable(namedEntries, ordinalBase, maxOrdinal);
- file.addAtom(*table);
-
- COFFStringAtom *dllName =
- new (_alloc) COFFStringAtom(_file, _stringOrdinal++, ".edata",
- llvm::sys::path::filename(_ctx.outputPath()));
- file.addAtom(*dllName);
- addDir32NBReloc(table, dllName, _ctx.getMachineType(),
- offsetof(export_directory_table_entry, NameRVA));
-
- EdataAtom *addressTable =
- createAddressTable(entries, ordinalBase, maxOrdinal);
- file.addAtom(*addressTable);
- addDir32NBReloc(
- table, addressTable, _ctx.getMachineType(),
- offsetof(export_directory_table_entry, ExportAddressTableRVA));
-
- EdataAtom *namePointerTable =
- createNamePointerTable(_ctx, namedEntries, &file);
- file.addAtom(*namePointerTable);
- addDir32NBReloc(table, namePointerTable, _ctx.getMachineType(),
- offsetof(export_directory_table_entry, NamePointerRVA));
-
- EdataAtom *ordinalTable = createOrdinalTable(namedEntries, ordinalBase);
- file.addAtom(*ordinalTable);
- addDir32NBReloc(table, ordinalTable, _ctx.getMachineType(),
- offsetof(export_directory_table_entry, OrdinalTableRVA));
-
- return std::error_code();
-}
-
-} // namespace pecoff
-} // namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/EdataPass.h (removed)
@@ -1,99 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/EdataPass.h --------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file \brief This linker pass creates atoms for the DLL export
-/// information. The defined atoms constructed in this pass will go into .edata
-/// section.
-///
-/// For the details of the .edata section format, see Microsoft PE/COFF
-/// Specification section 5.3, The .edata Section.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_EDATA_PASS_H
-#define LLD_READER_WRITER_PE_COFF_EDATA_PASS_H
-
-#include "Atoms.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Pass.h"
-#include "lld/Core/Simple.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/Support/COFF.h"
-#include <map>
-
-using llvm::COFF::ImportDirectoryTableEntry;
-
-namespace lld {
-namespace pecoff {
-namespace edata {
-
-struct TableEntry {
- TableEntry(StringRef exp, int ord, const DefinedAtom *a, bool n)
- : exportName(exp), ordinal(ord), atom(a), noname(n) {}
- std::string exportName;
- int ordinal;
- const DefinedAtom *atom;
- bool noname;
-};
-
-/// The root class of all edata atoms.
-class EdataAtom : public COFFLinkerInternalAtom {
-public:
- EdataAtom(VirtualFile &file, size_t size)
- : COFFLinkerInternalAtom(file, file.getNextOrdinal(),
- std::vector<uint8_t>(size)) {}
-
- SectionChoice sectionChoice() const override { return sectionCustomRequired; }
- StringRef customSectionName() const override { return ".edata"; }
- ContentType contentType() const override { return typeData; }
- ContentPermissions permissions() const override { return permR__; }
-
- template <typename T> T *getContents() const {
- return (T *)const_cast<uint8_t *>(rawContent().data());
- }
-};
-
-} // namespace edata
-
-class EdataPass : public lld::Pass {
-public:
- EdataPass(PECOFFLinkingContext &ctx)
- : _ctx(ctx), _file(ctx), _is64(ctx.is64Bit()), _stringOrdinal(1024) {}
-
- std::error_code perform(SimpleFile &file) override;
-
-private:
- edata::EdataAtom *
- createExportDirectoryTable(const std::vector<edata::TableEntry> &namedEntries,
- int ordinalBase, int maxOrdinal);
-
- edata::EdataAtom *
- createAddressTable(const std::vector<edata::TableEntry> &entries,
- int ordinalBase, int maxOrdinal);
-
- edata::EdataAtom *
- createNamePointerTable(const PECOFFLinkingContext &ctx,
- const std::vector<edata::TableEntry> &entries,
- SimpleFile *file);
-
- edata::EdataAtom *
- createOrdinalTable(const std::vector<edata::TableEntry> &entries,
- int ordinalBase);
-
- PECOFFLinkingContext &_ctx;
- VirtualFile _file;
- bool _is64;
- int _stringOrdinal;
- mutable llvm::BumpPtrAllocator _alloc;
-};
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.cpp (removed)
@@ -1,360 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/IdataPass.cpp ------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "IdataPass.h"
-#include "Pass.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Pass.h"
-#include "lld/Core/Simple.h"
-#include "llvm/Support/COFF.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/Endian.h"
-#include <algorithm>
-#include <cstddef>
-#include <cstring>
-#include <map>
-#include <vector>
-
-using namespace llvm::support::endian;
-using llvm::object::delay_import_directory_table_entry;
-
-namespace lld {
-namespace pecoff {
-namespace idata {
-
-IdataAtom::IdataAtom(IdataContext &context, std::vector<uint8_t> data)
- : COFFLinkerInternalAtom(context.dummyFile,
- context.dummyFile.getNextOrdinal(), data) {
- context.file.addAtom(*this);
-}
-
-HintNameAtom::HintNameAtom(IdataContext &context, uint16_t hint,
- StringRef importName)
- : IdataAtom(context, assembleRawContent(hint, importName)),
- _importName(importName) {}
-
-std::vector<uint8_t> HintNameAtom::assembleRawContent(uint16_t hint,
- StringRef importName) {
- size_t size =
- llvm::RoundUpToAlignment(sizeof(hint) + importName.size() + 1, 2);
- std::vector<uint8_t> ret(size);
- ret[importName.size()] = 0;
- ret[importName.size() - 1] = 0;
- write16le(&ret[0], hint);
- std::memcpy(&ret[2], importName.data(), importName.size());
- return ret;
-}
-
-std::vector<uint8_t>
-ImportTableEntryAtom::assembleRawContent(uint64_t rva, bool is64) {
- // The element size of the import table is 32 bit in PE and 64 bit
- // in PE+. In PE+, bits 62-31 are filled with zero.
- if (is64) {
- std::vector<uint8_t> ret(8);
- write64le(&ret[0], rva);
- return ret;
- }
- std::vector<uint8_t> ret(4);
- write32le(&ret[0], rva);
- return ret;
-}
-
-static std::vector<ImportTableEntryAtom *>
-createImportTableAtoms(IdataContext &context,
- const std::vector<COFFSharedLibraryAtom *> &sharedAtoms,
- bool shouldAddReference, StringRef sectionName,
- std::map<StringRef, HintNameAtom *> &hintNameCache,
- llvm::BumpPtrAllocator &alloc) {
- std::vector<ImportTableEntryAtom *> ret;
- for (COFFSharedLibraryAtom *atom : sharedAtoms) {
- ImportTableEntryAtom *entry = nullptr;
- if (atom->importName().empty()) {
- // Import by ordinal
- uint64_t hint = atom->hint();
- hint |= context.ctx.is64Bit() ? (uint64_t(1) << 63) : (uint64_t(1) << 31);
- entry = new (alloc) ImportTableEntryAtom(context, hint, sectionName);
- } else {
- // Import by name
- entry = new (alloc) ImportTableEntryAtom(context, 0, sectionName);
- HintNameAtom *hintNameAtom;
- auto it = hintNameCache.find(atom->importName());
- if (it == hintNameCache.end()) {
- hintNameAtom = new (alloc) HintNameAtom(
- context, atom->hint(), atom->importName());
- hintNameCache[atom->importName()] = hintNameAtom;
- } else {
- hintNameAtom = it->second;
- }
- addDir32NBReloc(entry, hintNameAtom, context.ctx.getMachineType(), 0);
- }
- ret.push_back(entry);
- if (shouldAddReference)
- atom->setImportTableEntry(entry);
- }
- // Add the NULL entry.
- ret.push_back(new (alloc) ImportTableEntryAtom(context, 0, sectionName));
- return ret;
-}
-
-// Creates atoms for an import lookup table. The import lookup table is an
-// array of pointers to hint/name atoms. The array needs to be terminated with
-// the NULL entry.
-void ImportDirectoryAtom::addRelocations(
- IdataContext &context, StringRef loadName,
- const std::vector<COFFSharedLibraryAtom *> &sharedAtoms) {
- // Create parallel arrays. The contents of the two are initially the
- // same. The PE/COFF loader overwrites the import address tables with the
- // pointers to the referenced items after loading the executable into
- // memory.
- std::map<StringRef, HintNameAtom *> hintNameCache;
- std::vector<ImportTableEntryAtom *> importLookupTables =
- createImportTableAtoms(context, sharedAtoms, false, ".idata.t",
- hintNameCache, _alloc);
- std::vector<ImportTableEntryAtom *> importAddressTables =
- createImportTableAtoms(context, sharedAtoms, true, ".idata.a",
- hintNameCache, _alloc);
-
- addDir32NBReloc(this, importLookupTables[0], context.ctx.getMachineType(),
- offsetof(ImportDirectoryTableEntry, ImportLookupTableRVA));
- addDir32NBReloc(this, importAddressTables[0], context.ctx.getMachineType(),
- offsetof(ImportDirectoryTableEntry, ImportAddressTableRVA));
- auto *atom = new (_alloc)
- COFFStringAtom(context.dummyFile, context.dummyFile.getNextOrdinal(),
- ".idata", loadName);
- context.file.addAtom(*atom);
- addDir32NBReloc(this, atom, context.ctx.getMachineType(),
- offsetof(ImportDirectoryTableEntry, NameRVA));
-}
-
-// Create the contents for the delay-import table.
-std::vector<uint8_t> DelayImportDirectoryAtom::createContent() {
- std::vector<uint8_t> r(sizeof(delay_import_directory_table_entry), 0);
- auto entry = reinterpret_cast<delay_import_directory_table_entry *>(&r[0]);
- // link.exe seems to set 1 to Attributes field, so do we.
- entry->Attributes = 1;
- return r;
-}
-
-// Find "___delayLoadHelper2 at 8" (or "__delayLoadHelper2" on x64).
-// This is not efficient but should be OK for now.
-static const Atom *findDelayLoadHelper(SimpleFile &file,
- const PECOFFLinkingContext &ctx) {
- StringRef sym = ctx.getDelayLoadHelperName();
- for (const DefinedAtom *atom : file.defined())
- if (atom->name() == sym)
- return atom;
- std::string msg = (sym + " was not found").str();
- llvm_unreachable(msg.c_str());
-}
-
-// Create the data referred by the delay-import table.
-void DelayImportDirectoryAtom::addRelocations(
- IdataContext &context, StringRef loadName,
- const std::vector<COFFSharedLibraryAtom *> &sharedAtoms) {
- // "ModuleHandle" field. This points to an array of pointer-size data
- // in ".data" section. Initially the array is initialized with zero.
- // The delay-load import helper will set DLL base address at runtime.
- auto *hmodule = new (_alloc) DelayImportAddressAtom(context);
- addDir32NBReloc(this, hmodule, context.ctx.getMachineType(),
- offsetof(delay_import_directory_table_entry, ModuleHandle));
-
- // "NameTable" field. The data structure of this field is the same
- // as (non-delay) import table's Import Lookup Table. Contains
- // imported function names. This is a parallel array of AddressTable
- // field.
- std::map<StringRef, HintNameAtom *> hintNameCache;
- std::vector<ImportTableEntryAtom *> nameTable =
- createImportTableAtoms(
- context, sharedAtoms, false, ".didat", hintNameCache, _alloc);
- addDir32NBReloc(
- this, nameTable[0], context.ctx.getMachineType(),
- offsetof(delay_import_directory_table_entry, DelayImportNameTable));
-
- // "Name" field. This points to the NUL-terminated DLL name string.
- auto *name = new (_alloc)
- COFFStringAtom(context.dummyFile, context.dummyFile.getNextOrdinal(),
- ".didat", loadName);
- context.file.addAtom(*name);
- addDir32NBReloc(this, name, context.ctx.getMachineType(),
- offsetof(delay_import_directory_table_entry, Name));
-
- // "AddressTable" field. This points to an array of pointers, which
- // in turn pointing to delay-load functions.
- std::vector<DelayImportAddressAtom *> addrTable;
- for (int i = 0, e = sharedAtoms.size() + 1; i < e; ++i)
- addrTable.push_back(new (_alloc) DelayImportAddressAtom(context));
- for (int i = 0, e = sharedAtoms.size(); i < e; ++i)
- sharedAtoms[i]->setImportTableEntry(addrTable[i]);
- addDir32NBReloc(
- this, addrTable[0], context.ctx.getMachineType(),
- offsetof(delay_import_directory_table_entry, DelayImportAddressTable));
-
- const Atom *delayLoadHelper = findDelayLoadHelper(context.file, context.ctx);
- for (int i = 0, e = sharedAtoms.size(); i < e; ++i) {
- const DefinedAtom *loader = new (_alloc) DelayLoaderAtom(
- context, addrTable[i], this, delayLoadHelper);
- if (context.ctx.is64Bit())
- addDir64Reloc(addrTable[i], loader, context.ctx.getMachineType(), 0);
- else
- addDir32Reloc(addrTable[i], loader, context.ctx.getMachineType(), 0);
- }
-}
-
-DelayLoaderAtom::DelayLoaderAtom(IdataContext &context, const Atom *impAtom,
- const Atom *descAtom, const Atom *delayLoadHelperAtom)
- : IdataAtom(context, createContent(context.ctx.getMachineType())) {
- MachineTypes machine = context.ctx.getMachineType();
- switch (machine) {
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- addDir32Reloc(this, impAtom, machine, 3);
- addDir32Reloc(this, descAtom, machine, 8);
- addRel32Reloc(this, delayLoadHelperAtom, machine, 13);
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- addRel32Reloc(this, impAtom, machine, 36);
- addRel32Reloc(this, descAtom, machine, 43);
- addRel32Reloc(this, delayLoadHelperAtom, machine, 48);
- break;
- default:
- llvm::report_fatal_error("unsupported machine type");
- }
-}
-
-// DelayLoaderAtom contains a wrapper function for __delayLoadHelper2.
-//
-// __delayLoadHelper2 takes two pointers: a pointer to the delay-load
-// table descripter and a pointer to _imp_ symbol for the function
-// to be resolved.
-//
-// __delayLoadHelper2 looks at the table descriptor to know the DLL
-// name, calls dlopen()-like function to load it, resolves all
-// imported symbols, and then writes the resolved addresses to the
-// import address table. It returns a pointer to the resolved
-// function.
-//
-// __delayLoadHelper2 is defined in delayimp.lib.
-std::vector<uint8_t>
-DelayLoaderAtom::createContent(MachineTypes machine) const {
- static const uint8_t x86[] = {
- 0x51, // push ecx
- 0x52, // push edx
- 0x68, 0, 0, 0, 0, // push offset ___imp__<FUNCNAME>
- 0x68, 0, 0, 0, 0, // push offset ___DELAY_IMPORT_DESCRIPTOR_<DLLNAME>_dll
- 0xE8, 0, 0, 0, 0, // call ___delayLoadHelper2 at 8
- 0x5A, // pop edx
- 0x59, // pop ecx
- 0xFF, 0xE0, // jmp eax
- };
- static const uint8_t x64[] = {
- 0x51, // push rcx
- 0x52, // push rdx
- 0x41, 0x50, // push r8
- 0x41, 0x51, // push r9
- 0x48, 0x83, 0xEC, 0x48, // sub rsp, 48h
- 0x66, 0x0F, 0x7F, 0x04, 0x24, // movdqa xmmword ptr [rsp], xmm0
- 0x66, 0x0F, 0x7F, 0x4C, 0x24, 0x10, // movdqa xmmword ptr [rsp+10h], xmm1
- 0x66, 0x0F, 0x7F, 0x54, 0x24, 0x20, // movdqa xmmword ptr [rsp+20h], xmm2
- 0x66, 0x0F, 0x7F, 0x5C, 0x24, 0x30, // movdqa xmmword ptr [rsp+30h], xmm3
- 0x48, 0x8D, 0x15, 0, 0, 0, 0, // lea rdx, [__imp_<FUNCNAME>]
- 0x48, 0x8D, 0x0D, 0, 0, 0, 0, // lea rcx, [___DELAY_IMPORT_...]
- 0xE8, 0, 0, 0, 0, // call __delayLoadHelper2
- 0x66, 0x0F, 0x6F, 0x04, 0x24, // movdqa xmm0, xmmword ptr [rsp]
- 0x66, 0x0F, 0x6F, 0x4C, 0x24, 0x10, // movdqa xmm1, xmmword ptr [rsp+10h]
- 0x66, 0x0F, 0x6F, 0x54, 0x24, 0x20, // movdqa xmm2, xmmword ptr [rsp+20h]
- 0x66, 0x0F, 0x6F, 0x5C, 0x24, 0x30, // movdqa xmm3, xmmword ptr [rsp+30h]
- 0x48, 0x83, 0xC4, 0x48, // add rsp, 48h
- 0x41, 0x59, // pop r9
- 0x41, 0x58, // pop r8
- 0x5A, // pop rdx
- 0x59, // pop rcx
- 0xFF, 0xE0, // jmp rax
- };
- switch (machine) {
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- return std::vector<uint8_t>(x86, x86 + sizeof(x86));
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- return std::vector<uint8_t>(x64, x64 + sizeof(x64));
- default:
- llvm::report_fatal_error("unsupported machine type");
- }
-}
-
-} // namespace idata
-
-std::error_code IdataPass::perform(SimpleFile &file) {
- if (file.sharedLibrary().empty())
- return std::error_code();
-
- idata::IdataContext context(file, _dummyFile, _ctx);
- std::map<StringRef, std::vector<COFFSharedLibraryAtom *>> sharedAtoms =
- groupByLoadName(file);
- bool hasImports = false;
- bool hasDelayImports = false;
-
- // Create the import table and terminate it with the null entry.
- for (auto i : sharedAtoms) {
- StringRef loadName = i.first;
- if (_ctx.isDelayLoadDLL(loadName))
- continue;
- hasImports = true;
- std::vector<COFFSharedLibraryAtom *> &atoms = i.second;
- new (_alloc) idata::ImportDirectoryAtom(context, loadName, atoms);
- }
- if (hasImports)
- new (_alloc) idata::NullImportDirectoryAtom(context);
-
- // Create the delay import table and terminate it with the null entry.
- for (auto i : sharedAtoms) {
- StringRef loadName = i.first;
- if (!_ctx.isDelayLoadDLL(loadName))
- continue;
- hasDelayImports = true;
- std::vector<COFFSharedLibraryAtom *> &atoms = i.second;
- new (_alloc) idata::DelayImportDirectoryAtom(context, loadName, atoms);
- }
- if (hasDelayImports)
- new (_alloc) idata::DelayNullImportDirectoryAtom(context);
-
- replaceSharedLibraryAtoms(&file);
-
- return std::error_code();
-}
-
-std::map<StringRef, std::vector<COFFSharedLibraryAtom *>>
-IdataPass::groupByLoadName(SimpleFile &file) {
- std::map<StringRef, COFFSharedLibraryAtom *> uniqueAtoms;
- for (const SharedLibraryAtom *atom : file.sharedLibrary())
- uniqueAtoms[atom->name()] =
- (COFFSharedLibraryAtom *)const_cast<SharedLibraryAtom *>(atom);
-
- std::map<StringRef, std::vector<COFFSharedLibraryAtom *> > ret;
- for (auto i : uniqueAtoms) {
- COFFSharedLibraryAtom *atom = i.second;
- ret[atom->loadName()].push_back(atom);
- }
- return ret;
-}
-
-/// Transforms a reference to a COFFSharedLibraryAtom to a real reference.
-void IdataPass::replaceSharedLibraryAtoms(SimpleFile *file) {
- for (const DefinedAtom *atom : file->defined()) {
- for (const Reference *ref : *atom) {
- const Atom *target = ref->target();
- auto *sharedAtom = dyn_cast<SharedLibraryAtom>(target);
- if (!sharedAtom)
- continue;
- const auto *coffSharedAtom = (const COFFSharedLibraryAtom *)sharedAtom;
- const DefinedAtom *entry = coffSharedAtom->getImportTableEntry();
- const_cast<Reference *>(ref)->setTarget(entry);
- }
- }
-}
-
-} // namespace pecoff
-} // namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/IdataPass.h (removed)
@@ -1,218 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/IdataPass.h---------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file \brief This linker pass creates atoms for the DLL import
-/// information. The defined atoms constructed in this pass will go into .idata
-/// section, unless .idata section is merged with other section such as .data.
-///
-/// For the details of the .idata section format, see Microsoft PE/COFF
-/// Specification section 5.4, The .idata Section.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_IDATA_PASS_H
-#define LLD_READER_WRITER_PE_COFF_IDATA_PASS_H
-
-#include "Atoms.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Pass.h"
-#include "lld/Core/Simple.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/Support/COFF.h"
-#include <algorithm>
-#include <map>
-
-using llvm::COFF::ImportDirectoryTableEntry;
-
-namespace lld {
-namespace pecoff {
-namespace idata {
-
-class DLLNameAtom;
-class HintNameAtom;
-class ImportTableEntryAtom;
-
-// A state object of this pass.
-struct IdataContext {
- IdataContext(SimpleFile &f, VirtualFile &g, const PECOFFLinkingContext &c)
- : file(f), dummyFile(g), ctx(c) {}
- SimpleFile &file;
- VirtualFile &dummyFile;
- const PECOFFLinkingContext &ctx;
-};
-
-/// The root class of all idata atoms.
-class IdataAtom : public COFFLinkerInternalAtom {
-public:
- SectionChoice sectionChoice() const override { return sectionCustomRequired; }
- StringRef customSectionName() const override { return ".idata"; }
- ContentType contentType() const override { return typeData; }
- ContentPermissions permissions() const override { return permR__; }
-
-protected:
- IdataAtom(IdataContext &context, std::vector<uint8_t> data);
-};
-
-/// A HintNameAtom represents a symbol that will be imported from a DLL at
-/// runtime. It consists with an optional hint, which is a small integer, and a
-/// symbol name.
-///
-/// A hint is an index of the export pointer table in a DLL. If the import
-/// library and DLL is in sync (i.e., ".lib" and ".dll" is for the same version
-/// or the symbol ordinal is maintained by hand with ".exp" file), the PE/COFF
-/// loader can find the symbol quickly.
-class HintNameAtom : public IdataAtom {
-public:
- HintNameAtom(IdataContext &context, uint16_t hint, StringRef importName);
-
- StringRef getContentString() { return _importName; }
-
-private:
- std::vector<uint8_t> assembleRawContent(uint16_t hint, StringRef importName);
- StringRef _importName;
-};
-
-class ImportTableEntryAtom : public IdataAtom {
-public:
- ImportTableEntryAtom(IdataContext &ctx, uint64_t contents,
- StringRef sectionName)
- : IdataAtom(ctx, assembleRawContent(contents, ctx.ctx.is64Bit())),
- _sectionName(sectionName) {}
-
- StringRef customSectionName() const override {
- return _sectionName;
- }
-
-private:
- std::vector<uint8_t> assembleRawContent(uint64_t contents, bool is64);
- StringRef _sectionName;
-};
-
-/// An ImportDirectoryAtom includes information to load a DLL, including a DLL
-/// name, symbols that will be resolved from the DLL, and the import address
-/// table that are overwritten by the loader with the pointers to the referenced
-/// items. The executable has one ImportDirectoryAtom per one imported DLL.
-class ImportDirectoryAtom : public IdataAtom {
-public:
- ImportDirectoryAtom(IdataContext &context, StringRef loadName,
- const std::vector<COFFSharedLibraryAtom *> &sharedAtoms)
- : IdataAtom(context, std::vector<uint8_t>(20, 0)) {
- addRelocations(context, loadName, sharedAtoms);
- }
-
- StringRef customSectionName() const override { return ".idata.d"; }
-
-private:
- void addRelocations(IdataContext &context, StringRef loadName,
- const std::vector<COFFSharedLibraryAtom *> &sharedAtoms);
-
- mutable llvm::BumpPtrAllocator _alloc;
-};
-
-/// The last NULL entry in the import directory.
-class NullImportDirectoryAtom : public IdataAtom {
-public:
- explicit NullImportDirectoryAtom(IdataContext &context)
- : IdataAtom(context, std::vector<uint8_t>(20, 0)) {}
-
- StringRef customSectionName() const override { return ".idata.d"; }
-};
-
-/// The class for the the delay-load import table.
-class DelayImportDirectoryAtom : public IdataAtom {
-public:
- DelayImportDirectoryAtom(
- IdataContext &context, StringRef loadName,
- const std::vector<COFFSharedLibraryAtom *> &sharedAtoms)
- : IdataAtom(context, createContent()) {
- addRelocations(context, loadName, sharedAtoms);
- }
-
- StringRef customSectionName() const override { return ".didat.d"; }
-
-private:
- std::vector<uint8_t> createContent();
- void addRelocations(IdataContext &context, StringRef loadName,
- const std::vector<COFFSharedLibraryAtom *> &sharedAtoms);
-
- mutable llvm::BumpPtrAllocator _alloc;
-};
-
-/// Terminator of the delay-load import table. The content of this atom is all
-/// zero.
-class DelayNullImportDirectoryAtom : public IdataAtom {
-public:
- explicit DelayNullImportDirectoryAtom(IdataContext &context)
- : IdataAtom(context, createContent()) {}
- StringRef customSectionName() const override { return ".didat.d"; }
-
-private:
- std::vector<uint8_t> createContent() const {
- return std::vector<uint8_t>(
- sizeof(llvm::object::delay_import_directory_table_entry), 0);
- }
-};
-
-class DelayImportAddressAtom : public IdataAtom {
-public:
- explicit DelayImportAddressAtom(IdataContext &context)
- : IdataAtom(context, createContent(context.ctx)),
- _align(context.ctx.is64Bit() ? 8 : 4) {}
- StringRef customSectionName() const override { return ".data"; }
- ContentPermissions permissions() const override { return permRW_; }
- Alignment alignment() const override { return _align; }
-
-private:
- std::vector<uint8_t> createContent(const PECOFFLinkingContext &ctx) const {
- return std::vector<uint8_t>(ctx.is64Bit() ? 8 : 4, 0);
- }
-
- Alignment _align;
-};
-
-// DelayLoaderAtom contains a wrapper function for __delayLoadHelper2.
-class DelayLoaderAtom : public IdataAtom {
-public:
- DelayLoaderAtom(IdataContext &context, const Atom *impAtom,
- const Atom *descAtom, const Atom *delayLoadHelperAtom);
- StringRef customSectionName() const override { return ".text"; }
- ContentPermissions permissions() const override { return permR_X; }
- Alignment alignment() const override { return 1; }
-
-private:
- std::vector<uint8_t> createContent(MachineTypes machine) const;
-};
-
-} // namespace idata
-
-class IdataPass : public lld::Pass {
-public:
- IdataPass(const PECOFFLinkingContext &ctx) : _dummyFile(ctx), _ctx(ctx) {}
-
- std::error_code perform(SimpleFile &file) override;
-
-private:
- std::map<StringRef, std::vector<COFFSharedLibraryAtom *>>
- groupByLoadName(SimpleFile &file);
-
- void replaceSharedLibraryAtoms(SimpleFile *file);
-
- // A dummy file with which all the atoms created in the pass will be
- // associated. Atoms need to be associated to an input file even if it's not
- // read from a file, so we use this object.
- VirtualFile _dummyFile;
-
- const PECOFFLinkingContext &_ctx;
- llvm::BumpPtrAllocator _alloc;
-};
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/InferSubsystemPass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/InferSubsystemPass.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/InferSubsystemPass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/InferSubsystemPass.h (removed)
@@ -1,68 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/InferSubsystemPass.h ----------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_INFER_SUBSYSTEM_PASS_H
-#define LLD_READER_WRITER_PE_COFF_INFER_SUBSYSTEM_PASS_H
-
-#include "Atoms.h"
-#include "lld/Core/Pass.h"
-#include <vector>
-
-namespace lld {
-namespace pecoff {
-
-// Infers subsystem from entry point function name.
-class InferSubsystemPass : public lld::Pass {
-public:
- InferSubsystemPass(PECOFFLinkingContext &ctx) : _ctx(ctx) {}
-
- std::error_code perform(SimpleFile &file) override {
- if (_ctx.getSubsystem() != WindowsSubsystem::IMAGE_SUBSYSTEM_UNKNOWN)
- return std::error_code();
-
- if (_ctx.isDll()) {
- _ctx.setSubsystem(WindowsSubsystem::IMAGE_SUBSYSTEM_WINDOWS_GUI);
- return std::error_code();
- }
-
- // Scan the resolved symbols to infer the subsystem.
- const std::string wWinMain = _ctx.decorateSymbol("wWinMainCRTStartup");
- const std::string wWinMainAt = _ctx.decorateSymbol("wWinMainCRTStartup@");
- const std::string winMain = _ctx.decorateSymbol("WinMainCRTStartup");
- const std::string winMainAt = _ctx.decorateSymbol("WinMainCRTStartup@");
- const std::string wmain = _ctx.decorateSymbol("wmainCRTStartup");
- const std::string wmainAt = _ctx.decorateSymbol("wmainCRTStartup@");
- const std::string main = _ctx.decorateSymbol("mainCRTStartup");
- const std::string mainAt = _ctx.decorateSymbol("mainCRTStartup@");
-
- for (const DefinedAtom *atom : file.definedAtoms()) {
- if (atom->name() == wWinMain || atom->name().startswith(wWinMainAt) ||
- atom->name() == winMain || atom->name().startswith(winMainAt)) {
- _ctx.setSubsystem(WindowsSubsystem::IMAGE_SUBSYSTEM_WINDOWS_GUI);
- return std::error_code();
- }
- if (atom->name() == wmain || atom->name().startswith(wmainAt) ||
- atom->name() == main || atom->name().startswith(mainAt)) {
- _ctx.setSubsystem(WindowsSubsystem::IMAGE_SUBSYSTEM_WINDOWS_CUI);
- return std::error_code();
- }
- }
- llvm::report_fatal_error("Failed to infer subsystem");
-
- return std::error_code();
- }
-
-private:
- PECOFFLinkingContext &_ctx;
-};
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.cpp (removed)
@@ -1,48 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.cpp --------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "LinkerGeneratedSymbolFile.h"
-
-namespace lld {
-namespace pecoff {
-
-// Find decorated symbol, namely /sym@[0-9]+/ or /\?sym@@.+/.
-bool findDecoratedSymbol(PECOFFLinkingContext *ctx,
- std::string sym, std::string &res) {
- const std::set<std::string> &defined = ctx->definedSymbols();
- // Search for /sym@[0-9]+/
- {
- std::string s = sym + '@';
- auto it = defined.lower_bound(s);
- for (auto e = defined.end(); it != e; ++it) {
- if (!StringRef(*it).startswith(s))
- break;
- if (it->size() == s.size())
- continue;
- StringRef suffix = StringRef(*it).substr(s.size());
- if (suffix.find_first_not_of("0123456789") != StringRef::npos)
- continue;
- res = *it;
- return true;
- }
- }
- // Search for /\?sym@@.+/
- {
- std::string s = "?" + ctx->undecorateSymbol(sym).str() + "@@";
- auto it = defined.lower_bound(s);
- if (it != defined.end() && StringRef(*it).startswith(s)) {
- res = *it;
- return true;
- }
- }
- return false;
-}
-
-} // namespace pecoff
-} // namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h (removed)
@@ -1,309 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h ----------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Atoms.h"
-#include "lld/Core/Simple.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/Support/Allocator.h"
-#include <algorithm>
-#include <mutex>
-
-using llvm::COFF::WindowsSubsystem;
-
-namespace lld {
-namespace pecoff {
-
-bool findDecoratedSymbol(PECOFFLinkingContext *ctx,
- std::string sym, std::string &res);
-
-namespace impl {
-
-/// The defined atom for dllexported symbols with __imp_ prefix.
-class ImpPointerAtom : public COFFLinkerInternalAtom {
-public:
- ImpPointerAtom(const File &file, StringRef symbolName, uint64_t ordinal)
- : COFFLinkerInternalAtom(file, /*oridnal*/ 0, std::vector<uint8_t>(4),
- symbolName),
- _ordinal(ordinal) {}
-
- uint64_t ordinal() const override { return _ordinal; }
- Scope scope() const override { return scopeGlobal; }
- ContentType contentType() const override { return typeData; }
- Alignment alignment() const override { return 16; }
- ContentPermissions permissions() const override { return permR__; }
-
-private:
- uint64_t _ordinal;
-};
-
-class ImpSymbolFile : public SimpleFile {
-public:
- ImpSymbolFile(StringRef defsym, StringRef undefsym, uint64_t ordinal,
- bool is64)
- : SimpleFile(defsym), _undefined(*this, undefsym),
- _defined(*this, defsym, ordinal) {
- SimpleReference *ref;
- if (is64) {
- ref = new SimpleReference(Reference::KindNamespace::COFF,
- Reference::KindArch::x86_64,
- llvm::COFF::IMAGE_REL_AMD64_ADDR32,
- 0, &_undefined, 0);
- } else {
- ref = new SimpleReference(Reference::KindNamespace::COFF,
- Reference::KindArch::x86,
- llvm::COFF::IMAGE_REL_I386_DIR32,
- 0, &_undefined, 0);
- }
- _defined.addReference(std::unique_ptr<SimpleReference>(ref));
- addAtom(_defined);
- addAtom(_undefined);
- }
-
-private:
- SimpleUndefinedAtom _undefined;
- ImpPointerAtom _defined;
-};
-
-// A file to make Resolver to resolve a symbol TO instead of a symbol FROM,
-// using fallback mechanism for an undefined symbol. One can virtually rename an
-// undefined symbol using this file.
-class SymbolRenameFile : public SimpleFile {
-public:
- SymbolRenameFile(StringRef from, StringRef to)
- : SimpleFile("<symbol-rename>"), _fromSym(from), _toSym(to),
- _from(*this, _fromSym, &_to), _to(*this, _toSym) {
- addAtom(_from);
- }
-
-private:
- std::string _fromSym;
- std::string _toSym;
- COFFUndefinedAtom _from;
- COFFUndefinedAtom _to;
-};
-
-} // namespace impl
-
-// A virtual file containing absolute symbol __ImageBase. __ImageBase (or
-// ___ImageBase on x86) is a linker-generated symbol whose address is the same
-// as the image base address.
-class LinkerGeneratedSymbolFile : public SimpleFile {
-public:
- LinkerGeneratedSymbolFile(const PECOFFLinkingContext &ctx)
- : SimpleFile("<linker-internal-file>"),
- _imageBaseAtom(*this, ctx.decorateSymbol("__ImageBase"),
- Atom::scopeGlobal, ctx.getBaseAddress()) {
- addAtom(_imageBaseAtom);
- }
-
-private:
- SimpleAbsoluteAtom _imageBaseAtom;
-};
-
-// A LocallyImporteSymbolFile is an archive file containing __imp_
-// symbols for local use.
-//
-// For each defined symbol, linker creates an implicit defined symbol
-// by appending "__imp_" prefix to the original name. The content of
-// the implicit symbol is a pointer to the original symbol
-// content. This feature allows one to compile and link the following
-// code without error, although _imp__hello is not defined in the
-// code. (the leading "_" in this example is automatically appended,
-// assuming it's x86.)
-//
-// void hello() { printf("Hello\n"); }
-// extern void (*_imp__hello)();
-// int main() {
-// _imp__hello();
-// return 0;
-// }
-//
-// This odd feature is for the compatibility with MSVC link.exe.
-class LocallyImportedSymbolFile : public SimpleArchiveLibraryFile {
-public:
- LocallyImportedSymbolFile(const PECOFFLinkingContext &ctx)
- : SimpleArchiveLibraryFile("__imp_"), _is64(ctx.is64Bit()),
- _ordinal(0) {}
-
- File *find(StringRef sym, bool dataSymbolOnly) override {
- std::string prefix = "__imp_";
- if (!sym.startswith(prefix))
- return nullptr;
- StringRef undef = sym.substr(prefix.size());
- return new (_alloc) impl::ImpSymbolFile(sym, undef, _ordinal++, _is64);
- }
-
-private:
- bool _is64;
- uint64_t _ordinal;
- llvm::BumpPtrAllocator _alloc;
-};
-
-// A ExportedSymbolRenameFile is a virtual archive file for dllexported symbols.
-//
-// One usually has to specify the exact symbol name to resolve it. That's true
-// in most cases for PE/COFF, except the one described below.
-//
-// DLLExported symbols can be specified using a module definition file. In a
-// file, one can write an EXPORT directive followed by symbol names. Such
-// symbols may not be fully decorated.
-//
-// If a symbol FOO is specified to be dllexported by a module definition file,
-// linker has to search not only for /FOO/ but also for /FOO@[0-9]+/ for stdcall
-// and for /\?FOO@@.+/ for C++. This ambiguous matching semantics does not fit
-// well with Resolver.
-//
-// We could probably modify Resolver to resolve ambiguous symbols, but I think
-// we don't want to do that because it'd be rarely used, and only this Windows
-// specific feature would use it. It's probably not a good idea to make the core
-// linker to be able to deal with it.
-//
-// So, instead of tweaking Resolver, we chose to do some hack here. An
-// ExportedSymbolRenameFile maintains a set containing all possibly defined
-// symbol names. That set would be a union of (1) all the defined symbols that
-// are already parsed and read and (2) all the defined symbols in archive files
-// that are not yet be parsed.
-//
-// If Resolver asks this file to return an atom for a dllexported symbol, find()
-// looks up the set, doing ambiguous matching. If there's a symbol with @
-// prefix, it returns an atom to rename the dllexported symbol, hoping that
-// Resolver will find the new symbol with atsign from an archive file at the
-// next visit.
-class ExportedSymbolRenameFile : public SimpleArchiveLibraryFile {
-public:
- ExportedSymbolRenameFile(const PECOFFLinkingContext &ctx)
- : SimpleArchiveLibraryFile("<export>"),
- _ctx(const_cast<PECOFFLinkingContext *>(&ctx)) {
- for (PECOFFLinkingContext::ExportDesc &desc : _ctx->getDllExports())
- _exportedSyms.insert(desc.name);
- }
-
- File *find(StringRef sym, bool dataSymbolOnly) override {
- typedef PECOFFLinkingContext::ExportDesc ExportDesc;
- if (_exportedSyms.count(sym) == 0)
- return nullptr;
- std::string replace;
- if (!findDecoratedSymbol(_ctx, sym.str(), replace))
- return nullptr;
-
- for (ExportDesc &exp : _ctx->getDllExports())
- if (exp.name == sym)
- exp.mangledName = replace;
- if (_ctx->deadStrip())
- _ctx->addDeadStripRoot(_ctx->allocate(replace));
- return new (_alloc) impl::SymbolRenameFile(sym, replace);
- }
-
-private:
- std::set<std::string> _exportedSyms;
- llvm::BumpPtrAllocator _alloc;
- PECOFFLinkingContext *_ctx;
-};
-
-// Windows has not only one but many entry point functions. The
-// appropriate one is automatically selected based on the subsystem
-// setting and the user-supplied entry point function.
-//
-// http://msdn.microsoft.com/en-us/library/f9t8842e.aspx
-class EntryPointFile : public SimpleFile {
-public:
- EntryPointFile(const PECOFFLinkingContext &ctx)
- : SimpleFile("<entry>"), _ctx(const_cast<PECOFFLinkingContext *>(&ctx)),
- _firstTime(true) {}
-
- const AtomVector<UndefinedAtom> &undefined() const override {
- return const_cast<EntryPointFile *>(this)->getUndefinedAtoms();
- }
-
-private:
- const AtomVector<UndefinedAtom> &getUndefinedAtoms() {
- std::lock_guard<std::mutex> lock(_mutex);
- if (!_firstTime)
- return _undefinedAtoms;
- _firstTime = false;
-
- if (_ctx->hasEntry()) {
- StringRef entrySym = _ctx->allocate(getEntry());
- _undefinedAtoms.push_back(
- new (_alloc) SimpleUndefinedAtom(*this, entrySym));
- _ctx->setHasEntry(true);
- _ctx->setEntrySymbolName(entrySym);
- if (_ctx->deadStrip())
- _ctx->addDeadStripRoot(entrySym);
- }
- return _undefinedAtoms;
- }
-
- // Returns the entry point function name.
- std::string getEntry() const {
- StringRef opt = _ctx->getEntrySymbolName();
- if (!opt.empty()) {
- std::string mangled;
- if (findDecoratedSymbol(_ctx, opt, mangled))
- return mangled;
- return _ctx->decorateSymbol(opt);
- }
- return _ctx->decorateSymbol(getDefaultEntry());
- }
-
- std::string getDefaultEntry() const {
- const std::string wWinMainCRTStartup = "wWinMainCRTStartup";
- const std::string WinMainCRTStartup = "WinMainCRTStartup";
- const std::string wmainCRTStartup = "wmainCRTStartup";
- const std::string mainCRTStartup = "mainCRTStartup";
-
- if (_ctx->isDll()) {
- if (_ctx->getMachineType() == llvm::COFF::IMAGE_FILE_MACHINE_I386)
- return "_DllMainCRTStartup at 12";
- return "_DllMainCRTStartup";
- }
-
- // Returns true if a given name exists in an input object file.
- auto defined = [&](StringRef name) -> bool {
- StringRef sym = _ctx->decorateSymbol(name);
- if (_ctx->definedSymbols().count(sym))
- return true;
- std::string ignore;
- return findDecoratedSymbol(_ctx, sym, ignore);
- };
-
- switch (_ctx->getSubsystem()) {
- case WindowsSubsystem::IMAGE_SUBSYSTEM_UNKNOWN: {
- if (defined("wWinMain"))
- return wWinMainCRTStartup;
- if (defined("WinMain"))
- return WinMainCRTStartup;
- if (defined("wmain"))
- return wmainCRTStartup;
- if (!defined("main"))
- llvm::errs() << "Cannot infer subsystem; assuming /subsystem:console\n";
- return mainCRTStartup;
- }
- case WindowsSubsystem::IMAGE_SUBSYSTEM_WINDOWS_GUI:
- if (defined("WinMain"))
- return WinMainCRTStartup;
- return wWinMainCRTStartup;
- case WindowsSubsystem::IMAGE_SUBSYSTEM_WINDOWS_CUI:
- if (defined("wmain"))
- return wmainCRTStartup;
- return mainCRTStartup;
- default:
- return mainCRTStartup;
- }
- }
-
- PECOFFLinkingContext *_ctx;
- AtomVector<UndefinedAtom> _undefinedAtoms;
- std::mutex _mutex;
- llvm::BumpPtrAllocator _alloc;
- bool _firstTime;
-};
-
-} // end namespace pecoff
-} // end namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.cpp (removed)
@@ -1,77 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/LoadConfigPass.cpp -------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// A Load Configuration is a data structure for x86 containing an address of the
-// SEH handler table. The Data Directory in the file header points to a load
-// configuration. Technically that indirection is not needed but exists for
-// historical reasons.
-//
-// If the file being handled has .sxdata section containing SEH handler table,
-// this pass will create a Load Configuration atom.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Pass.h"
-#include "LoadConfigPass.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Pass.h"
-#include "lld/Core/Simple.h"
-#include "llvm/Object/COFF.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/Path.h"
-#include <climits>
-#include <ctime>
-#include <utility>
-
-using llvm::object::coff_load_configuration32;
-
-namespace lld {
-namespace pecoff {
-namespace loadcfg {
-
-LoadConfigAtom::LoadConfigAtom(VirtualFile &file, const DefinedAtom *sxdata,
- int count)
- : COFFLinkerInternalAtom(
- file, file.getNextOrdinal(),
- std::vector<uint8_t>(sizeof(coff_load_configuration32))) {
- addDir32Reloc(
- this, sxdata, llvm::COFF::IMAGE_FILE_MACHINE_I386,
- offsetof(llvm::object::coff_load_configuration32, SEHandlerTable));
- auto *data = getContents<llvm::object::coff_load_configuration32>();
- data->SEHandlerCount = count;
-}
-
-} // namespace loadcfg
-
-std::error_code LoadConfigPass::perform(SimpleFile &file) {
- if (_ctx.noSEH())
- return std::error_code();
-
- // Find the first atom in .sxdata section.
- const DefinedAtom *sxdata = nullptr;
- int sectionSize = 0;
- for (const DefinedAtom *atom : file.defined()) {
- if (atom->customSectionName() == ".sxdata") {
- if (!sxdata)
- sxdata = atom;
- sectionSize += sxdata->size();
- }
- }
- if (!sxdata)
- return std::error_code();
-
- auto *loadcfg = new (_alloc)
- loadcfg::LoadConfigAtom(_file, sxdata, sectionSize / sizeof(uint32_t));
- file.addAtom(*loadcfg);
-
- return std::error_code();
-}
-
-} // namespace pecoff
-} // namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/LoadConfigPass.h (removed)
@@ -1,63 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/LoadConfigPass.h ---------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file \brief This linker pass creates an atom for Load Configuration
-/// structure.
-///
-/// For the details of the Load Configuration structure, see Microsoft PE/COFF
-/// Specification section 5.8. The Load Configuration Structure (Image Only).
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_LOAD_CONFIG_PASS_H
-#define LLD_READER_WRITER_PE_COFF_LOAD_CONFIG_PASS_H
-
-#include "Atoms.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Pass.h"
-#include "lld/Core/Simple.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include <map>
-
-namespace lld {
-namespace pecoff {
-namespace loadcfg {
-
-class LoadConfigAtom : public COFFLinkerInternalAtom {
-public:
- LoadConfigAtom(VirtualFile &file, const DefinedAtom *sxdata, int count);
-
- SectionChoice sectionChoice() const override { return sectionCustomRequired; }
- StringRef customSectionName() const override { return ".loadcfg"; }
- ContentType contentType() const override { return typeData; }
- ContentPermissions permissions() const override { return permR__; }
-
- template <typename T> T *getContents() const {
- return (T *)const_cast<uint8_t *>(rawContent().data());
- }
-};
-
-} // namespace loadcfg
-
-class LoadConfigPass : public lld::Pass {
-public:
- LoadConfigPass(PECOFFLinkingContext &ctx) : _ctx(ctx), _file(ctx) {}
-
- std::error_code perform(SimpleFile &file) override;
-
-private:
- PECOFFLinkingContext &_ctx;
- VirtualFile _file;
- mutable llvm::BumpPtrAllocator _alloc;
-};
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h (removed)
@@ -1,68 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/OrderPass.h -------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file \brief This pass sorts atoms by section name, so that they will appear
-/// in the correct order in the output.
-///
-/// In COFF, sections will be merged into one section by the linker if their
-/// names are the same after discarding the "$" character and all characters
-/// follow it from their names. The characters following the "$" character
-/// determines the merge order. Assume there's an object file containing four
-/// data sections in the following order.
-///
-/// - .data$2
-/// - .data$3
-/// - .data$1
-/// - .data
-///
-/// In this case, the resulting binary should have ".data" section with the
-/// contents of ".data", ".data$1", ".data$2" and ".data$3" in that order.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_ORDER_PASS_H
-#define LLD_READER_WRITER_PE_COFF_ORDER_PASS_H
-
-#include "Atoms.h"
-#include "lld/Core/Parallel.h"
-#include "lld/Core/Pass.h"
-#include <algorithm>
-
-namespace lld {
-namespace pecoff {
-
-static bool compare(const DefinedAtom *lhs, const DefinedAtom *rhs) {
- bool lhsCustom = (lhs->sectionChoice() == DefinedAtom::sectionCustomRequired);
- bool rhsCustom = (rhs->sectionChoice() == DefinedAtom::sectionCustomRequired);
- if (lhsCustom && rhsCustom) {
- int cmp = lhs->customSectionName().compare(rhs->customSectionName());
- if (cmp != 0)
- return cmp < 0;
- return DefinedAtom::compareByPosition(lhs, rhs);
- }
- if (lhsCustom && !rhsCustom)
- return true;
- if (!lhsCustom && rhsCustom)
- return false;
- return DefinedAtom::compareByPosition(lhs, rhs);
-}
-
-class OrderPass : public lld::Pass {
-public:
- std::error_code perform(SimpleFile &file) override {
- SimpleFile::DefinedAtomRange defined = file.definedAtoms();
- parallel_sort(defined.begin(), defined.end(), compare);
- return std::error_code();
- }
-};
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/PDBPass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/PDBPass.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/PDBPass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/PDBPass.h (removed)
@@ -1,44 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/PDBPass.h ----------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_PDB_PASS_H
-#define LLD_READER_WRITER_PE_COFF_PDB_PASS_H
-
-#include "lld/Core/Pass.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/Process.h"
-
-namespace lld {
-namespace pecoff {
-
-class PDBPass : public lld::Pass {
-public:
- PDBPass(PECOFFLinkingContext &ctx) : _ctx(ctx) {}
-
- std::error_code perform(SimpleFile &) override {
- if (_ctx.getDebug())
- touch(_ctx.getPDBFilePath());
- return std::error_code();
- }
-
-private:
- void touch(StringRef path) {
- int fd;
- if (llvm::sys::fs::openFileForWrite(path, fd, llvm::sys::fs::F_Append))
- llvm::report_fatal_error("failed to create a PDB file");
- llvm::sys::Process::SafelyCloseFileDescriptor(fd);
- }
-
- PECOFFLinkingContext &_ctx;
-};
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp (removed)
@@ -1,350 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp -------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Atoms.h"
-#include "EdataPass.h"
-#include "IdataPass.h"
-#include "InferSubsystemPass.h"
-#include "LinkerGeneratedSymbolFile.h"
-#include "LoadConfigPass.h"
-#include "OrderPass.h"
-#include "PDBPass.h"
-#include "lld/Core/PassManager.h"
-#include "lld/Core/Reader.h"
-#include "lld/Core/Simple.h"
-#include "lld/Core/Writer.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/Allocator.h"
-#include "llvm/Support/Path.h"
-#include <bitset>
-#include <climits>
-#include <set>
-
-namespace lld {
-
-bool PECOFFLinkingContext::validateImpl(raw_ostream &diagnostics) {
- if (_stackReserve < _stackCommit) {
- diagnostics << "Invalid stack size: reserve size must be equal to or "
- << "greater than commit size, but got " << _stackCommit
- << " and " << _stackReserve << ".\n";
- return false;
- }
-
- if (_heapReserve < _heapCommit) {
- diagnostics << "Invalid heap size: reserve size must be equal to or "
- << "greater than commit size, but got " << _heapCommit
- << " and " << _heapReserve << ".\n";
- return false;
- }
-
- // It's an error if the base address is not multiple of 64K.
- if (getBaseAddress() & 0xffff) {
- diagnostics << "Base address have to be multiple of 64K, but got "
- << getBaseAddress() << "\n";
- return false;
- }
-
- // Specifing /noentry without /dll is an error.
- if (!hasEntry() && !isDll()) {
- diagnostics << "/noentry must be specified with /dll\n";
- return false;
- }
-
- // Check for duplicate export ordinals.
- std::set<int> exports;
- for (const PECOFFLinkingContext::ExportDesc &desc : getDllExports()) {
- if (desc.ordinal == -1)
- continue;
- if (exports.count(desc.ordinal) == 1) {
- diagnostics << "Duplicate export ordinals: " << desc.ordinal << "\n";
- return false;
- }
- exports.insert(desc.ordinal);
- }
-
- // Check for /align.
- std::bitset<64> alignment(_sectionDefaultAlignment);
- if (alignment.count() != 1) {
- diagnostics << "Section alignment must be a power of 2, but got "
- << _sectionDefaultAlignment << "\n";
- return false;
- }
-
- _writer = createWriterPECOFF(*this);
- return true;
-}
-
-const std::set<std::string> &PECOFFLinkingContext::definedSymbols() {
- std::lock_guard<std::recursive_mutex> lock(_mutex);
- for (std::unique_ptr<Node> &node : getNodes()) {
- if (_seen.count(node.get()) > 0)
- continue;
- FileNode *fnode = dyn_cast<FileNode>(node.get());
- if (!fnode)
- continue;
- File *file = fnode->getFile();
- if (file->parse())
- continue;
- if (auto *archive = dyn_cast<ArchiveLibraryFile>(file)) {
- for (const std::string &sym : archive->getDefinedSymbols())
- _definedSyms.insert(sym);
- continue;
- }
- for (const DefinedAtom *atom : file->defined())
- if (!atom->name().empty())
- _definedSyms.insert(atom->name());
- }
- return _definedSyms;
-}
-
-std::unique_ptr<File> PECOFFLinkingContext::createEntrySymbolFile() const {
- return LinkingContext::createEntrySymbolFile("<command line option /entry>");
-}
-
-std::unique_ptr<File> PECOFFLinkingContext::createUndefinedSymbolFile() const {
- return LinkingContext::createUndefinedSymbolFile(
- "<command line option /include>");
-}
-
-static int getGroupStartPos(std::vector<std::unique_ptr<Node>> &nodes) {
- for (int i = 0, e = nodes.size(); i < e; ++i)
- if (GroupEnd *group = dyn_cast<GroupEnd>(nodes[i].get()))
- return i - group->getSize();
- llvm::report_fatal_error("internal error");
-}
-
-void PECOFFLinkingContext::addLibraryFile(std::unique_ptr<FileNode> file) {
- GroupEnd *currentGroupEnd;
- int pos = -1;
- std::vector<std::unique_ptr<Node>> &elements = getNodes();
- for (int i = 0, e = elements.size(); i < e; ++i) {
- if ((currentGroupEnd = dyn_cast<GroupEnd>(elements[i].get()))) {
- pos = i;
- break;
- }
- }
- assert(pos >= 0);
- elements.insert(elements.begin() + pos, std::move(file));
- elements[pos + 1] = llvm::make_unique<GroupEnd>(
- currentGroupEnd->getSize() + 1);
-}
-
-void PECOFFLinkingContext::createImplicitFiles(
- std::vector<std::unique_ptr<File>> &) {
- std::vector<std::unique_ptr<Node>> &members = getNodes();
-
- // Create a file for the entry point function.
- std::unique_ptr<FileNode> entry(new FileNode(
- llvm::make_unique<pecoff::EntryPointFile>(*this)));
- members.insert(members.begin() + getGroupStartPos(members), std::move(entry));
-
- // Create a file for __ImageBase.
- std::unique_ptr<FileNode> fileNode(new FileNode(
- llvm::make_unique<pecoff::LinkerGeneratedSymbolFile>(*this)));
- members.push_back(std::move(fileNode));
-
- // Create a file for _imp_ symbols.
- std::unique_ptr<FileNode> impFileNode(new FileNode(
- llvm::make_unique<pecoff::LocallyImportedSymbolFile>(*this)));
- members.push_back(std::move(impFileNode));
-
- // Create a file for dllexported symbols.
- std::unique_ptr<FileNode> exportNode(new FileNode(
- llvm::make_unique<pecoff::ExportedSymbolRenameFile>(*this)));
- addLibraryFile(std::move(exportNode));
-}
-
-/// Returns the section name in the resulting executable.
-///
-/// Sections in object files are usually output to the executable with the same
-/// name, but you can rename by command line option. /merge:from=to makes the
-/// linker to combine "from" section contents to "to" section in the
-/// executable. We have a mapping for the renaming. This method looks up the
-/// table and returns a new section name if renamed.
-StringRef
-PECOFFLinkingContext::getOutputSectionName(StringRef sectionName) const {
- auto it = _renamedSections.find(sectionName);
- if (it == _renamedSections.end())
- return sectionName;
- return getOutputSectionName(it->second);
-}
-
-/// Adds a mapping to the section renaming table. This method will be used for
-/// /merge command line option.
-bool PECOFFLinkingContext::addSectionRenaming(raw_ostream &diagnostics,
- StringRef from, StringRef to) {
- auto it = _renamedSections.find(from);
- if (it != _renamedSections.end()) {
- if (it->second == to)
- // There's already the same mapping.
- return true;
- diagnostics << "Section \"" << from << "\" is already mapped to \""
- << it->second << ", so it cannot be mapped to \"" << to << "\".";
- return true;
- }
-
- // Add a mapping, and check if there's no cycle in the renaming mapping. The
- // cycle detection algorithm we use here is naive, but that's OK because the
- // number of mapping is usually less than 10.
- _renamedSections[from] = to;
- for (auto elem : _renamedSections) {
- StringRef sectionName = elem.first;
- std::set<StringRef> visited;
- visited.insert(sectionName);
- for (;;) {
- auto pos = _renamedSections.find(sectionName);
- if (pos == _renamedSections.end())
- break;
- if (visited.count(pos->second)) {
- diagnostics << "/merge:" << from << "=" << to << " makes a cycle";
- return false;
- }
- sectionName = pos->second;
- visited.insert(sectionName);
- }
- }
- return true;
-}
-
-/// Try to find the input library file from the search paths and append it to
-/// the input file list. Returns true if the library file is found.
-StringRef PECOFFLinkingContext::searchLibraryFile(StringRef filename) const {
- // Current directory always takes precedence over the search paths.
- if (llvm::sys::path::is_absolute(filename) || llvm::sys::fs::exists(filename))
- return filename;
- // Iterate over the search paths.
- for (StringRef dir : _inputSearchPaths) {
- SmallString<128> path = dir;
- llvm::sys::path::append(path, filename);
- if (llvm::sys::fs::exists(path.str()))
- return allocate(path.str());
- }
- return filename;
-}
-
-/// Returns the decorated name of the given symbol name. On 32-bit x86, it
-/// adds "_" at the beginning of the string. On other architectures, the
-/// return value is the same as the argument.
-StringRef PECOFFLinkingContext::decorateSymbol(StringRef name) const {
- if (_machineType != llvm::COFF::IMAGE_FILE_MACHINE_I386)
- return name;
- std::string str = "_";
- str.append(name);
- return allocate(str);
-}
-
-StringRef PECOFFLinkingContext::undecorateSymbol(StringRef name) const {
- if (_machineType != llvm::COFF::IMAGE_FILE_MACHINE_I386)
- return name;
- if (!name.startswith("_"))
- return name;
- return name.substr(1);
-}
-
-uint64_t PECOFFLinkingContext::getBaseAddress() const {
- if (_baseAddress == invalidBaseAddress)
- return is64Bit() ? pe32PlusDefaultBaseAddress : pe32DefaultBaseAddress;
- return _baseAddress;
-}
-
-Writer &PECOFFLinkingContext::writer() const { return *_writer; }
-
-void PECOFFLinkingContext::setSectionSetMask(StringRef sectionName,
- uint32_t newFlags) {
- _sectionSetMask[sectionName] |= newFlags;
- _sectionClearMask[sectionName] &= ~newFlags;
- const uint32_t rwx = (llvm::COFF::IMAGE_SCN_MEM_READ |
- llvm::COFF::IMAGE_SCN_MEM_WRITE |
- llvm::COFF::IMAGE_SCN_MEM_EXECUTE);
- if (newFlags & rwx)
- _sectionClearMask[sectionName] |= ~_sectionSetMask[sectionName] & rwx;
- assert((_sectionSetMask[sectionName] & _sectionClearMask[sectionName]) == 0);
-}
-
-void PECOFFLinkingContext::setSectionClearMask(StringRef sectionName,
- uint32_t newFlags) {
- _sectionClearMask[sectionName] |= newFlags;
- _sectionSetMask[sectionName] &= ~newFlags;
- assert((_sectionSetMask[sectionName] & _sectionClearMask[sectionName]) == 0);
-}
-
-uint32_t PECOFFLinkingContext::getSectionAttributes(StringRef sectionName,
- uint32_t flags) const {
- auto si = _sectionSetMask.find(sectionName);
- uint32_t setMask = (si == _sectionSetMask.end()) ? 0 : si->second;
- auto ci = _sectionClearMask.find(sectionName);
- uint32_t clearMask = (ci == _sectionClearMask.end()) ? 0 : ci->second;
- return (flags | setMask) & ~clearMask;
-}
-
-// Returns true if two export descriptors are the same.
-static bool sameExportDesc(const PECOFFLinkingContext::ExportDesc &a,
- const PECOFFLinkingContext::ExportDesc &b) {
- return a.ordinal == b.ordinal && a.ordinal == b.ordinal &&
- a.noname == b.noname && a.isData == b.isData;
-}
-
-void PECOFFLinkingContext::addDllExport(ExportDesc &desc) {
- addInitialUndefinedSymbol(allocate(desc.name));
-
- // MSVC link.exe silently drops characters after the first atsign.
- // For example, /export:foo at 4=bar is equivalent to /export:foo=bar.
- // We do the same thing for compatibility.
- if (!desc.externalName.empty()) {
- StringRef s(desc.externalName);
- size_t pos = s.find('@');
- if (pos != s.npos)
- desc.externalName = s.substr(0, pos);
- }
-
- // Scan the vector to look for existing entry. It's not very fast,
- // but because the number of exported symbol is usually not that
- // much, it should be okay.
- for (ExportDesc &e : _dllExports) {
- if (e.name != desc.name)
- continue;
- if (!sameExportDesc(e, desc))
- llvm::errs() << "Export symbol '" << desc.name
- << "' specified more than once.\n";
- return;
- }
- _dllExports.push_back(desc);
-}
-
-static std::string replaceExtension(StringRef path, StringRef ext) {
- SmallString<128> ss = path;
- llvm::sys::path::replace_extension(ss, ext);
- return ss.str();
-}
-
-std::string PECOFFLinkingContext::getOutputImportLibraryPath() const {
- if (!_implib.empty())
- return _implib;
- return replaceExtension(outputPath(), ".lib");
-}
-
-std::string PECOFFLinkingContext::getPDBFilePath() const {
- assert(_debug);
- if (!_pdbFilePath.empty())
- return _pdbFilePath;
- return replaceExtension(outputPath(), ".pdb");
-}
-
-void PECOFFLinkingContext::addPasses(PassManager &pm) {
- pm.add(llvm::make_unique<pecoff::PDBPass>(*this));
- pm.add(llvm::make_unique<pecoff::EdataPass>(*this));
- pm.add(llvm::make_unique<pecoff::IdataPass>(*this));
- pm.add(llvm::make_unique<pecoff::OrderPass>());
- pm.add(llvm::make_unique<pecoff::LoadConfigPass>(*this));
- pm.add(llvm::make_unique<pecoff::InferSubsystemPass>(*this));
-}
-
-} // end namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/Pass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/Pass.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/Pass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/Pass.cpp (removed)
@@ -1,95 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/Pass.cpp -----------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Atoms.h"
-#include "Pass.h"
-#include "lld/Core/File.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/Support/COFF.h"
-
-namespace lld {
-namespace pecoff {
-
-static void addReloc(COFFBaseDefinedAtom *atom, const Atom *target,
- size_t offsetInAtom, Reference::KindArch arch,
- Reference::KindValue relType) {
- atom->addReference(llvm::make_unique<SimpleReference>(
- Reference::KindNamespace::COFF, arch, relType, offsetInAtom, target, 0));
-}
-
-void addDir64Reloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom) {
- switch (machine) {
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86,
- llvm::COFF::IMAGE_REL_I386_DIR32);
- return;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86_64,
- llvm::COFF::IMAGE_REL_AMD64_ADDR64);
- return;
- default:
- llvm_unreachable("unsupported machine type");
- }
-}
-
-void addDir32Reloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom) {
- switch (machine) {
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86,
- llvm::COFF::IMAGE_REL_I386_DIR32);
- return;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86_64,
- llvm::COFF::IMAGE_REL_AMD64_ADDR32);
- return;
- default:
- llvm_unreachable("unsupported machine type");
- }
-}
-
-void addDir32NBReloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom) {
- switch (machine) {
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86,
- llvm::COFF::IMAGE_REL_I386_DIR32NB);
- return;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86_64,
- llvm::COFF::IMAGE_REL_AMD64_ADDR32NB);
- return;
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::ARM,
- llvm::COFF::IMAGE_REL_ARM_ADDR32NB);
- return;
- default:
- llvm_unreachable("unsupported machine type");
- }
-}
-
-void addRel32Reloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom) {
- switch (machine) {
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86,
- llvm::COFF::IMAGE_REL_I386_REL32);
- return;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- addReloc(atom, target, offsetInAtom, Reference::KindArch::x86_64,
- llvm::COFF::IMAGE_REL_AMD64_REL32);
- return;
- default:
- llvm_unreachable("unsupported machine type");
- }
-}
-
-} // end namespace pecoff
-} // end namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/Pass.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/Pass.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/Pass.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/Pass.h (removed)
@@ -1,34 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/Pass.h -------------------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_PASS_H
-#define LLD_READER_WRITER_PE_COFF_PASS_H
-
-#include "Atoms.h"
-#include "llvm/Support/COFF.h"
-
-namespace lld {
-namespace pecoff {
-
-void addDir64Reloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom);
-
-void addDir32Reloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom);
-
-void addDir32NBReloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom);
-
-void addRel32Reloc(COFFBaseDefinedAtom *atom, const Atom *target,
- llvm::COFF::MachineTypes machine, size_t offsetInAtom);
-
-} // namespace pecoff
-} // namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp (removed)
@@ -1,1134 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/ReaderCOFF.cpp -----------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Atoms.h"
-#include "lld/Core/Alias.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Reader.h"
-#include "lld/Driver/Driver.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/StringExtras.h"
-#include "llvm/Object/COFF.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/Endian.h"
-#include "llvm/Support/Errc.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/FileOutputBuffer.h"
-#include "llvm/Support/FileUtilities.h"
-#include "llvm/Support/Memory.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/Program.h"
-#include "llvm/Support/StringSaver.h"
-#include "llvm/Support/raw_ostream.h"
-#include <algorithm>
-#include <map>
-#include <mutex>
-#include <set>
-#include <system_error>
-#include <vector>
-
-#define DEBUG_TYPE "ReaderCOFF"
-
-using lld::pecoff::COFFBSSAtom;
-using lld::pecoff::COFFDefinedAtom;
-using lld::pecoff::COFFDefinedFileAtom;
-using lld::pecoff::COFFUndefinedAtom;
-using llvm::object::coff_aux_section_definition;
-using llvm::object::coff_aux_weak_external;
-using llvm::object::coff_relocation;
-using llvm::object::coff_section;
-using llvm::object::coff_symbol;
-using llvm::support::ulittle32_t;
-
-using namespace lld;
-
-namespace {
-
-class BumpPtrStringSaver final : public llvm::StringSaver {
-public:
- BumpPtrStringSaver() : llvm::StringSaver(_alloc) {}
- const char *saveImpl(StringRef Str) override {
- std::lock_guard<std::mutex> lock(_allocMutex);
- return llvm::StringSaver::saveImpl(Str);
- }
-
-private:
- llvm::BumpPtrAllocator _alloc;
- std::mutex _allocMutex;
-};
-
-class FileCOFF : public File {
-private:
- typedef std::vector<llvm::object::COFFSymbolRef> SymbolVectorT;
- typedef std::map<const coff_section *, SymbolVectorT> SectionToSymbolsT;
-
-public:
- FileCOFF(std::unique_ptr<MemoryBuffer> mb, PECOFFLinkingContext &ctx)
- : File(mb->getBufferIdentifier(), kindObject), _mb(std::move(mb)),
- _compatibleWithSEH(false), _ordinal(1),
- _machineType(llvm::COFF::MT_Invalid), _ctx(ctx) {}
-
- std::error_code doParse() override;
- bool isCompatibleWithSEH() const { return _compatibleWithSEH; }
- llvm::COFF::MachineTypes getMachineType() { return _machineType; }
-
- const AtomVector<DefinedAtom> &defined() const override {
- return _definedAtoms;
- }
-
- const AtomVector<UndefinedAtom> &undefined() const override {
- return _undefinedAtoms;
- }
-
- const AtomVector<SharedLibraryAtom> &sharedLibrary() const override {
- return _sharedLibraryAtoms;
- }
-
- const AtomVector<AbsoluteAtom> &absolute() const override {
- return _absoluteAtoms;
- }
-
- void beforeLink() override;
-
- void addUndefinedSymbol(StringRef sym) {
- _undefinedAtoms.push_back(new (_alloc) COFFUndefinedAtom(*this, sym));
- }
-
- AliasAtom *createAlias(StringRef name, const DefinedAtom *target, int cnt);
- void createAlternateNameAtoms();
- std::error_code parseDirectiveSection(StringRef directives);
-
- mutable llvm::BumpPtrAllocator _alloc;
-
-private:
- std::error_code readSymbolTable(SymbolVectorT &result);
-
- void createAbsoluteAtoms(const SymbolVectorT &symbols,
- std::vector<const AbsoluteAtom *> &result);
-
- std::error_code
- createUndefinedAtoms(const SymbolVectorT &symbols,
- std::vector<const UndefinedAtom *> &result);
-
- std::error_code
- createDefinedSymbols(const SymbolVectorT &symbols,
- std::vector<const DefinedAtom *> &result);
-
- std::error_code cacheSectionAttributes();
- std::error_code maybeCreateSXDataAtoms();
-
- std::error_code
- AtomizeDefinedSymbolsInSection(const coff_section *section,
- SymbolVectorT &symbols,
- std::vector<COFFDefinedFileAtom *> &atoms);
-
- std::error_code
- AtomizeDefinedSymbols(SectionToSymbolsT &definedSymbols,
- std::vector<const DefinedAtom *> &definedAtoms);
-
- std::error_code findAtomAt(const coff_section *section,
- uint32_t targetAddress,
- COFFDefinedFileAtom *&result,
- uint32_t &offsetInAtom);
-
- std::error_code getAtomBySymbolIndex(uint32_t index, Atom *&ret);
-
- std::error_code
- addRelocationReference(const coff_relocation *rel,
- const coff_section *section);
-
- std::error_code getSectionContents(StringRef sectionName,
- ArrayRef<uint8_t> &result);
- std::error_code getReferenceArch(Reference::KindArch &result);
- std::error_code addRelocationReferenceToAtoms();
- std::error_code findSection(StringRef name, const coff_section *&result);
- StringRef ArrayRefToString(ArrayRef<uint8_t> array);
- uint64_t getNextOrdinal();
-
- std::unique_ptr<const llvm::object::COFFObjectFile> _obj;
- std::unique_ptr<MemoryBuffer> _mb;
- AtomVector<DefinedAtom> _definedAtoms;
- AtomVector<UndefinedAtom> _undefinedAtoms;
- AtomVector<SharedLibraryAtom> _sharedLibraryAtoms;
- AtomVector<AbsoluteAtom> _absoluteAtoms;
-
- // The target type of the object.
- Reference::KindArch _referenceArch;
-
- // True if the object has "@feat.00" symbol.
- bool _compatibleWithSEH;
-
- // A map from symbol to its name. All symbols should be in this map except
- // unnamed ones.
- std::map<llvm::object::COFFSymbolRef, StringRef> _symbolName;
-
- // A map from symbol to its resultant atom.
- std::map<llvm::object::COFFSymbolRef, Atom *> _symbolAtom;
-
- // A map from symbol to its aux symbol.
- std::map<llvm::object::COFFSymbolRef, llvm::object::COFFSymbolRef> _auxSymbol;
-
- // A map from section to its atoms.
- std::map<const coff_section *, std::vector<COFFDefinedFileAtom *>>
- _sectionAtoms;
-
- // A set of COMDAT sections.
- std::set<const coff_section *> _comdatSections;
-
- // A map to get whether the section allows its contents to be merged or not.
- std::map<const coff_section *, DefinedAtom::Merge> _merge;
-
- // COMDAT associative sections
- std::multimap<const coff_section *, const coff_section *> _association;
-
- // A sorted map to find an atom from a section and an offset within
- // the section.
- std::map<const coff_section *, std::multimap<uint32_t, COFFDefinedAtom *>>
- _definedAtomLocations;
-
- uint64_t _ordinal;
- llvm::COFF::MachineTypes _machineType;
- PECOFFLinkingContext &_ctx;
- mutable BumpPtrStringSaver _stringSaver;
-};
-
-// Converts the COFF symbol attribute to the LLD's atom attribute.
-Atom::Scope getScope(llvm::object::COFFSymbolRef symbol) {
- switch (symbol.getStorageClass()) {
- case llvm::COFF::IMAGE_SYM_CLASS_EXTERNAL:
- return Atom::scopeGlobal;
- case llvm::COFF::IMAGE_SYM_CLASS_STATIC:
- case llvm::COFF::IMAGE_SYM_CLASS_LABEL:
- return Atom::scopeTranslationUnit;
- }
- llvm_unreachable("Unknown scope");
-}
-
-DefinedAtom::ContentType getContentType(const coff_section *section) {
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_CNT_CODE)
- return DefinedAtom::typeCode;
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_CNT_INITIALIZED_DATA)
- return DefinedAtom::typeData;
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)
- return DefinedAtom::typeZeroFill;
- return DefinedAtom::typeUnknown;
-}
-
-DefinedAtom::ContentPermissions getPermissions(const coff_section *section) {
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_MEM_READ &&
- section->Characteristics & llvm::COFF::IMAGE_SCN_MEM_WRITE)
- return DefinedAtom::permRW_;
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_MEM_READ &&
- section->Characteristics & llvm::COFF::IMAGE_SCN_MEM_EXECUTE)
- return DefinedAtom::permR_X;
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_MEM_READ)
- return DefinedAtom::permR__;
- return DefinedAtom::perm___;
-}
-
-/// Returns the alignment of the section. The contents of the section must be
-/// aligned by this value in the resulting executable/DLL.
-DefinedAtom::Alignment getAlignment(const coff_section *section) {
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_TYPE_NO_PAD)
- return 1;
-
- // Bit [20:24] contains section alignment information. We need to decrease
- // the value stored by 1 in order to get the real exponent (e.g, ALIGN_1BYTE
- // is 0x00100000, but the exponent should be 0)
- uint32_t characteristics = (section->Characteristics >> 20) & 0xf;
-
- // If all bits are off, we treat it as if ALIGN_1BYTE was on. The PE/COFF spec
- // does not say anything about this case, but CVTRES.EXE does not set any bit
- // in characteristics[20:24], and its output is intended to be copied to .rsrc
- // section with no padding, so I think doing this is the right thing.
- if (characteristics == 0)
- return 1;
-
- uint32_t powerOf2 = characteristics - 1;
- return 1 << powerOf2;
-}
-
-DefinedAtom::Merge getMerge(const coff_aux_section_definition *auxsym) {
- switch (auxsym->Selection) {
- case llvm::COFF::IMAGE_COMDAT_SELECT_NODUPLICATES:
- return DefinedAtom::mergeNo;
- case llvm::COFF::IMAGE_COMDAT_SELECT_ANY:
- return DefinedAtom::mergeAsWeakAndAddressUsed;
- case llvm::COFF::IMAGE_COMDAT_SELECT_EXACT_MATCH:
- // TODO: This mapping is wrong. Fix it.
- return DefinedAtom::mergeByContent;
- case llvm::COFF::IMAGE_COMDAT_SELECT_SAME_SIZE:
- return DefinedAtom::mergeSameNameAndSize;
- case llvm::COFF::IMAGE_COMDAT_SELECT_LARGEST:
- return DefinedAtom::mergeByLargestSection;
- case llvm::COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE:
- case llvm::COFF::IMAGE_COMDAT_SELECT_NEWEST:
- // FIXME: These attributes has more complicated semantics than the regular
- // weak symbol. These are mapped to mergeAsWeakAndAddressUsed for now
- // because the core linker does not support them yet. We eventually have
- // to implement them for full COFF support.
- return DefinedAtom::mergeAsWeakAndAddressUsed;
- default:
- llvm_unreachable("Unknown merge type");
- }
-}
-
-StringRef getMachineName(llvm::COFF::MachineTypes Type) {
- switch (Type) {
- default: llvm_unreachable("unsupported machine type");
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- return "ARM";
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- return "X86";
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- return "X64";
- }
-}
-
-std::error_code FileCOFF::doParse() {
- auto binaryOrErr = llvm::object::createBinary(_mb->getMemBufferRef());
- if (std::error_code ec = binaryOrErr.getError())
- return ec;
- std::unique_ptr<llvm::object::Binary> bin = std::move(binaryOrErr.get());
-
- _obj.reset(dyn_cast<const llvm::object::COFFObjectFile>(bin.get()));
- if (!_obj)
- return make_error_code(llvm::object::object_error::invalid_file_type);
- bin.release();
-
- _machineType = static_cast<llvm::COFF::MachineTypes>(_obj->getMachine());
-
- if (getMachineType() != llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN &&
- getMachineType() != _ctx.getMachineType()) {
- return make_dynamic_error_code(Twine("module machine type '") +
- getMachineName(getMachineType()) +
- "' conflicts with target machine type '" +
- getMachineName(_ctx.getMachineType()) + "'");
- }
-
- if (std::error_code ec = getReferenceArch(_referenceArch))
- return ec;
-
- // Read the symbol table and atomize them if possible. Defined atoms
- // cannot be atomized in one pass, so they will be not be atomized but
- // added to symbolToAtom.
- SymbolVectorT symbols;
- if (std::error_code ec = readSymbolTable(symbols))
- return ec;
-
- createAbsoluteAtoms(symbols, _absoluteAtoms);
- if (std::error_code ec =
- createUndefinedAtoms(symbols, _undefinedAtoms))
- return ec;
- if (std::error_code ec = createDefinedSymbols(symbols, _definedAtoms))
- return ec;
- if (std::error_code ec = addRelocationReferenceToAtoms())
- return ec;
- if (std::error_code ec = maybeCreateSXDataAtoms())
- return ec;
-
- // Check for /SAFESEH.
- if (_ctx.requireSEH() && !isCompatibleWithSEH()) {
- llvm::errs() << "/SAFESEH is specified, but "
- << _mb->getBufferIdentifier()
- << " is not compatible with SEH.\n";
- return llvm::object::object_error::parse_failed;
- }
- return std::error_code();
-}
-
-void FileCOFF::beforeLink() {
- // Acquire the mutex to mutate _ctx.
- std::lock_guard<std::recursive_mutex> lock(_ctx.getMutex());
- std::set<StringRef> undefSyms;
-
- // Interpret .drectve section if the section has contents.
- ArrayRef<uint8_t> directives;
- if (getSectionContents(".drectve", directives))
- return;
- if (!directives.empty()) {
- std::set<StringRef> orig;
- for (StringRef sym : _ctx.initialUndefinedSymbols())
- orig.insert(sym);
- if (parseDirectiveSection(ArrayRefToString(directives)))
- return;
- for (StringRef sym : _ctx.initialUndefinedSymbols())
- if (orig.count(sym) == 0)
- undefSyms.insert(sym);
- }
-
- // Add /INCLUDE'ed symbols to the file as if they existed in the
- // file as undefined symbols.
- for (StringRef sym : undefSyms) {
- addUndefinedSymbol(sym);
- _ctx.addDeadStripRoot(sym);
- }
-
- // One can define alias symbols using /alternatename:<sym>=<sym> option.
- // The mapping for /alternatename is in the context object. This helper
- // function iterate over defined atoms and create alias atoms if needed.
- createAlternateNameAtoms();
-
- // In order to emit SEH table, all input files need to be compatible with
- // SEH. Disable SEH if the file being read is not compatible.
- if (!isCompatibleWithSEH())
- _ctx.setSafeSEH(false);
-}
-
-/// Iterate over the symbol table to retrieve all symbols.
-std::error_code
-FileCOFF::readSymbolTable(SymbolVectorT &result) {
- for (uint32_t i = 0, e = _obj->getNumberOfSymbols(); i != e; ++i) {
- // Retrieve the symbol.
- ErrorOr<llvm::object::COFFSymbolRef> sym = _obj->getSymbol(i);
- StringRef name;
- if (std::error_code ec = sym.getError())
- return ec;
- if (sym->getSectionNumber() == llvm::COFF::IMAGE_SYM_DEBUG)
- goto next;
- result.push_back(*sym);
-
- if (std::error_code ec = _obj->getSymbolName(*sym, name))
- return ec;
-
- // Existence of the symbol @feat.00 indicates that object file is compatible
- // with Safe Exception Handling.
- if (name == "@feat.00") {
- _compatibleWithSEH = true;
- goto next;
- }
-
- // Cache the name.
- _symbolName[*sym] = name;
-
- // Symbol may be followed by auxiliary symbol table records. The aux
- // record can be in any format, but the size is always the same as the
- // regular symbol. The aux record supplies additional information for the
- // standard symbol. We do not interpret the aux record here, but just
- // store it to _auxSymbol.
- if (sym->getNumberOfAuxSymbols() > 0) {
- ErrorOr<llvm::object::COFFSymbolRef> aux = _obj->getSymbol(i + 1);
- if (std::error_code ec = aux.getError())
- return ec;
- _auxSymbol[*sym] = *aux;
- }
- next:
- i += sym->getNumberOfAuxSymbols();
- }
- return std::error_code();
-}
-
-/// Create atoms for the absolute symbols.
-void FileCOFF::createAbsoluteAtoms(const SymbolVectorT &symbols,
- std::vector<const AbsoluteAtom *> &result) {
- for (llvm::object::COFFSymbolRef sym : symbols) {
- if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_ABSOLUTE)
- continue;
- auto *atom = new (_alloc) SimpleAbsoluteAtom(*this, _symbolName[sym],
- getScope(sym), sym.getValue());
- result.push_back(atom);
- _symbolAtom[sym] = atom;
- }
-}
-
-/// Create atoms for the undefined symbols. This code is bit complicated
-/// because it supports "weak externals" mechanism of COFF. If an undefined
-/// symbol (sym1) has auxiliary data, the data contains a symbol table index
-/// at which the "second symbol" (sym2) for sym1 exists. If sym1 is resolved,
-/// it's linked normally. If not, sym1 is resolved as if it has sym2's
-/// name. This relationship between sym1 and sym2 is represented using
-/// fallback mechanism of undefined symbol.
-std::error_code
-FileCOFF::createUndefinedAtoms(const SymbolVectorT &symbols,
- std::vector<const UndefinedAtom *> &result) {
- std::map<llvm::object::COFFSymbolRef, llvm::object::COFFSymbolRef>
- weakExternal;
- std::set<llvm::object::COFFSymbolRef> fallback;
- for (llvm::object::COFFSymbolRef sym : symbols) {
- if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_UNDEFINED)
- continue;
- // Create a mapping from sym1 to sym2, if the undefined symbol has
- // auxiliary data.
- auto iter = _auxSymbol.find(sym);
- if (iter == _auxSymbol.end())
- continue;
- const coff_aux_weak_external *aux =
- reinterpret_cast<const coff_aux_weak_external *>(
- iter->second.getRawPtr());
- ErrorOr<llvm::object::COFFSymbolRef> sym2 = _obj->getSymbol(aux->TagIndex);
- if (std::error_code ec = sym2.getError())
- return ec;
- weakExternal[sym] = *sym2;
- fallback.insert(*sym2);
- }
-
- // Create atoms for the undefined symbols.
- for (llvm::object::COFFSymbolRef sym : symbols) {
- if (sym.getSectionNumber() != llvm::COFF::IMAGE_SYM_UNDEFINED)
- continue;
- if (fallback.count(sym) > 0)
- continue;
-
- // If the symbol has sym2, create an undefiend atom for sym2, so that we
- // can pass it as a fallback atom.
- UndefinedAtom *fallback = nullptr;
- auto iter = weakExternal.find(sym);
- if (iter != weakExternal.end()) {
- llvm::object::COFFSymbolRef sym2 = iter->second;
- fallback = new (_alloc) COFFUndefinedAtom(*this, _symbolName[sym2]);
- _symbolAtom[sym2] = fallback;
- }
-
- // Create an atom for the symbol.
- auto *atom =
- new (_alloc) COFFUndefinedAtom(*this, _symbolName[sym], fallback);
- result.push_back(atom);
- _symbolAtom[sym] = atom;
- }
- return std::error_code();
-}
-
-/// Create atoms for the defined symbols. This pass is a bit complicated than
-/// the other two, because in order to create the atom for the defined symbol
-/// we need to know the adjacent symbols.
-std::error_code
-FileCOFF::createDefinedSymbols(const SymbolVectorT &symbols,
- std::vector<const DefinedAtom *> &result) {
- // A defined atom can be merged if its section attribute allows its contents
- // to be merged. In COFF, it's not very easy to get the section attribute
- // for the symbol, so scan all sections in advance and cache the attributes
- // for later use.
- if (std::error_code ec = cacheSectionAttributes())
- return ec;
-
- // Filter non-defined atoms, and group defined atoms by its section.
- SectionToSymbolsT definedSymbols;
- for (llvm::object::COFFSymbolRef sym : symbols) {
- // A symbol with section number 0 and non-zero value represents a common
- // symbol. The MS COFF spec did not give a definition of what the common
- // symbol is. We should probably follow ELF's definition shown below.
- //
- // - If one object file has a common symbol and another has a definition,
- // the common symbol is treated as an undefined reference.
- // - If there is no definition for a common symbol, the program linker
- // acts as though it saw a definition initialized to zero of the
- // appropriate size.
- // - Two object files may have common symbols of
- // different sizes, in which case the program linker will use the
- // largest size.
- //
- // FIXME: We are currently treating the common symbol as a normal
- // mergeable atom. Implement the above semantcis.
- if (sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_UNDEFINED &&
- sym.getValue() > 0) {
- StringRef name = _symbolName[sym];
- uint32_t size = sym.getValue();
- auto *atom = new (_alloc)
- COFFBSSAtom(*this, name, getScope(sym), DefinedAtom::permRW_,
- DefinedAtom::mergeAsWeakAndAddressUsed, size, getNextOrdinal());
-
- // Common symbols should be aligned on natural boundaries with the maximum
- // of 32 byte. It's not documented anywhere, but it's what MSVC link.exe
- // seems to be doing.
- atom->setAlignment(std::min((uint64_t)32, llvm::NextPowerOf2(size)));
- result.push_back(atom);
- continue;
- }
-
- // Skip if it's not for defined atom.
- if (sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_DEBUG ||
- sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_ABSOLUTE ||
- sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_UNDEFINED)
- continue;
-
- const coff_section *sec;
- if (std::error_code ec = _obj->getSection(sym.getSectionNumber(), sec))
- return ec;
- assert(sec && "SectionIndex > 0, Sec must be non-null!");
-
- uint8_t sc = sym.getStorageClass();
- if (sc != llvm::COFF::IMAGE_SYM_CLASS_EXTERNAL &&
- sc != llvm::COFF::IMAGE_SYM_CLASS_STATIC &&
- sc != llvm::COFF::IMAGE_SYM_CLASS_FUNCTION &&
- sc != llvm::COFF::IMAGE_SYM_CLASS_LABEL) {
- llvm::errs() << "Unable to create atom for: " << _symbolName[sym] << " ("
- << static_cast<int>(sc) << ")\n";
- return llvm::object::object_error::parse_failed;
- }
-
- definedSymbols[sec].push_back(sym);
- }
-
- // Atomize the defined symbols.
- if (std::error_code ec = AtomizeDefinedSymbols(definedSymbols, result))
- return ec;
-
- return std::error_code();
-}
-
-// Cache the COMDAT attributes, which indicate whether the symbols in the
-// section can be merged or not.
-std::error_code FileCOFF::cacheSectionAttributes() {
- // The COMDAT section attribute is not an attribute of coff_section, but is
- // stored in the auxiliary symbol for the first symbol referring a COMDAT
- // section. It feels to me that it's unnecessarily complicated, but this is
- // how COFF works.
- for (auto i : _auxSymbol) {
- // Read a section from the file
- llvm::object::COFFSymbolRef sym = i.first;
- if (sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_ABSOLUTE ||
- sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_UNDEFINED)
- continue;
-
- const coff_section *sec;
- if (std::error_code ec = _obj->getSection(sym.getSectionNumber(), sec))
- return ec;
- const coff_aux_section_definition *aux =
- reinterpret_cast<const coff_aux_section_definition *>(
- i.second.getRawPtr());
-
- if (sec->Characteristics & llvm::COFF::IMAGE_SCN_LNK_COMDAT) {
- // Read aux symbol data.
- _comdatSections.insert(sec);
- _merge[sec] = getMerge(aux);
- }
-
- // Handle associative sections.
- if (aux->Selection == llvm::COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
- const coff_section *parent;
- if (std::error_code ec =
- _obj->getSection(aux->getNumber(sym.isBigObj()), parent))
- return ec;
- _association.insert(std::make_pair(parent, sec));
- }
- }
-
- // The sections that does not have auxiliary symbol are regular sections, in
- // which symbols are not allowed to be merged.
- for (const auto §ion : _obj->sections()) {
- const coff_section *sec = _obj->getCOFFSection(section);
- if (!_merge.count(sec))
- _merge[sec] = DefinedAtom::mergeNo;
- }
- return std::error_code();
-}
-
-/// Atomize \p symbols and append the results to \p atoms. The symbols are
-/// assumed to have been defined in the \p section.
-std::error_code FileCOFF::AtomizeDefinedSymbolsInSection(
- const coff_section *section, SymbolVectorT &symbols,
- std::vector<COFFDefinedFileAtom *> &atoms) {
- // Sort symbols by position.
- std::stable_sort(
- symbols.begin(), symbols.end(),
- [](llvm::object::COFFSymbolRef a, llvm::object::COFFSymbolRef b)
- -> bool { return a.getValue() < b.getValue(); });
-
- StringRef sectionName;
- if (std::error_code ec = _obj->getSectionName(section, sectionName))
- return ec;
-
- // BSS section does not have contents. If this is the BSS section, create
- // COFFBSSAtom instead of COFFDefinedAtom.
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) {
- for (auto si = symbols.begin(), se = symbols.end(); si != se; ++si) {
- llvm::object::COFFSymbolRef sym = *si;
- uint32_t size = (si + 1 == se) ? section->SizeOfRawData - sym.getValue()
- : si[1].getValue() - sym.getValue();
- auto *atom = new (_alloc) COFFBSSAtom(
- *this, _symbolName[sym], getScope(sym), getPermissions(section),
- DefinedAtom::mergeAsWeakAndAddressUsed, size, getNextOrdinal());
- atoms.push_back(atom);
- _symbolAtom[sym] = atom;
- }
- return std::error_code();
- }
-
- ArrayRef<uint8_t> secData;
- if (std::error_code ec = _obj->getSectionContents(section, secData))
- return ec;
-
- // A section with IMAGE_SCN_LNK_{INFO,REMOVE} attribute will never become
- // a part of the output image. That's what the COFF spec says.
- if (section->Characteristics & llvm::COFF::IMAGE_SCN_LNK_INFO ||
- section->Characteristics & llvm::COFF::IMAGE_SCN_LNK_REMOVE)
- return std::error_code();
-
- // Supporting debug info needs more work than just linking and combining
- // .debug sections. We don't support it yet. Let's discard .debug sections at
- // the very beginning of the process so that we don't spend time on linking
- // blobs that nobody would understand.
- if ((section->Characteristics & llvm::COFF::IMAGE_SCN_MEM_DISCARDABLE) &&
- (sectionName == ".debug" || sectionName.startswith(".debug$"))) {
- return std::error_code();
- }
-
- DefinedAtom::ContentType type = getContentType(section);
- DefinedAtom::ContentPermissions perms = getPermissions(section);
- uint64_t sectionSize = section->SizeOfRawData;
- bool isComdat = (_comdatSections.count(section) == 1);
-
- // Create an atom for the entire section.
- if (symbols.empty()) {
- ArrayRef<uint8_t> data(secData.data(), secData.size());
- auto *atom = new (_alloc) COFFDefinedAtom(
- *this, "", sectionName, sectionSize, Atom::scopeTranslationUnit,
- type, isComdat, perms, _merge[section], data, getNextOrdinal());
- atoms.push_back(atom);
- _definedAtomLocations[section].insert(std::make_pair(0, atom));
- return std::error_code();
- }
-
- // Create an unnamed atom if the first atom isn't at the start of the
- // section.
- if (symbols[0].getValue() != 0) {
- uint64_t size = symbols[0].getValue();
- ArrayRef<uint8_t> data(secData.data(), size);
- auto *atom = new (_alloc) COFFDefinedAtom(
- *this, "", sectionName, sectionSize, Atom::scopeTranslationUnit,
- type, isComdat, perms, _merge[section], data, getNextOrdinal());
- atoms.push_back(atom);
- _definedAtomLocations[section].insert(std::make_pair(0, atom));
- }
-
- for (auto si = symbols.begin(), se = symbols.end(); si != se; ++si) {
- const uint8_t *start = secData.data() + si->getValue();
- // if this is the last symbol, take up the remaining data.
- const uint8_t *end = (si + 1 == se) ? secData.data() + secData.size()
- : secData.data() + (si + 1)->getValue();
- ArrayRef<uint8_t> data(start, end);
- auto *atom = new (_alloc) COFFDefinedAtom(
- *this, _symbolName[*si], sectionName, sectionSize, getScope(*si),
- type, isComdat, perms, _merge[section], data, getNextOrdinal());
- atoms.push_back(atom);
- _symbolAtom[*si] = atom;
- _definedAtomLocations[section].insert(std::make_pair(si->getValue(), atom));
- }
- return std::error_code();
-}
-
-std::error_code FileCOFF::AtomizeDefinedSymbols(
- SectionToSymbolsT &definedSymbols,
- std::vector<const DefinedAtom *> &definedAtoms) {
- // For each section, make atoms for all the symbols defined in the
- // section, and append the atoms to the result objects.
- for (auto &i : definedSymbols) {
- const coff_section *section = i.first;
- SymbolVectorT &symbols = i.second;
- std::vector<COFFDefinedFileAtom *> atoms;
- if (std::error_code ec =
- AtomizeDefinedSymbolsInSection(section, symbols, atoms))
- return ec;
-
- // Set alignment to the first atom so that the section contents
- // will be aligned as specified by the object section header.
- if (atoms.size() > 0)
- atoms[0]->setAlignment(getAlignment(section));
-
- // Connect atoms with layout-after edges. It prevents atoms
- // from being GC'ed if there is a reference to one of the atoms
- // in the same layout-after chain. In such case we want to emit
- // all the atoms appeared in the same chain, because the "live"
- // atom may reference other atoms in the same chain.
- if (atoms.size() >= 2)
- for (auto it = atoms.begin(), e = atoms.end(); it + 1 != e; ++it)
- addLayoutEdge(*it, *(it + 1), lld::Reference::kindLayoutAfter);
-
- for (COFFDefinedFileAtom *atom : atoms) {
- _sectionAtoms[section].push_back(atom);
- definedAtoms.push_back(atom);
- }
- }
-
- // A COMDAT section with SELECT_ASSOCIATIVE attribute refer to other
- // section. If the referred section is linked to a binary, the
- // referring section needs to be linked too. A typical use case of
- // this attribute is a static initializer; a parent is a comdat BSS
- // section, and a child is a static initializer code for the data.
- //
- // We add referring section contents to the referred section's
- // associate list, so that Resolver takes care of them.
- for (auto i : _association) {
- const coff_section *parent = i.first;
- const coff_section *child = i.second;
- if (_sectionAtoms.count(child)) {
- COFFDefinedFileAtom *p = _sectionAtoms[parent][0];
- p->addAssociate(_sectionAtoms[child][0]);
- }
- }
-
- return std::error_code();
-}
-
-/// Find the atom that is at \p targetAddress in \p section.
-std::error_code FileCOFF::findAtomAt(const coff_section *section,
- uint32_t targetAddress,
- COFFDefinedFileAtom *&result,
- uint32_t &offsetInAtom) {
- auto loc = _definedAtomLocations.find(section);
- if (loc == _definedAtomLocations.end())
- return llvm::object::object_error::parse_failed;
- std::multimap<uint32_t, COFFDefinedAtom *> &map = loc->second;
-
- auto it = map.upper_bound(targetAddress);
- if (it == map.begin())
- return llvm::object::object_error::parse_failed;
- --it;
- uint32_t atomAddress = it->first;
- result = it->second;
- offsetInAtom = targetAddress - atomAddress;
- return std::error_code();
-}
-
-/// Find the atom for the symbol that was at the \p index in the symbol
-/// table.
-std::error_code FileCOFF::getAtomBySymbolIndex(uint32_t index, Atom *&ret) {
- ErrorOr<llvm::object::COFFSymbolRef> symbol = _obj->getSymbol(index);
- if (std::error_code ec = symbol.getError())
- return ec;
- ret = _symbolAtom[*symbol];
- assert(ret);
- return std::error_code();
-}
-
-/// Add relocation information to an atom based on \p rel. \p rel is an
-/// relocation entry for the \p section, and \p atoms are all the atoms
-/// defined in the \p section.
-std::error_code FileCOFF::addRelocationReference(
- const coff_relocation *rel, const coff_section *section) {
- // The address of the item which relocation is applied. Section's
- // VirtualAddress needs to be added for historical reasons, but the value
- // is usually just zero, so adding it is usually no-op.
- uint32_t itemAddress = rel->VirtualAddress + section->VirtualAddress;
-
- Atom *targetAtom = nullptr;
- if (std::error_code ec =
- getAtomBySymbolIndex(rel->SymbolTableIndex, targetAtom))
- return ec;
-
- COFFDefinedFileAtom *atom;
- uint32_t offsetInAtom;
- if (std::error_code ec = findAtomAt(section, itemAddress, atom, offsetInAtom))
- return ec;
- atom->addReference(llvm::make_unique<SimpleReference>(
- Reference::KindNamespace::COFF, _referenceArch, rel->Type, offsetInAtom,
- targetAtom, 0));
- return std::error_code();
-}
-
-// Read section contents.
-std::error_code FileCOFF::getSectionContents(StringRef sectionName,
- ArrayRef<uint8_t> &result) {
- const coff_section *section = nullptr;
- if (std::error_code ec = findSection(sectionName, section))
- return ec;
- if (!section)
- return std::error_code();
- if (std::error_code ec = _obj->getSectionContents(section, result))
- return ec;
- return std::error_code();
-}
-
-AliasAtom *
-FileCOFF::createAlias(StringRef name, const DefinedAtom *target, int cnt) {
- AliasAtom *alias = new (_alloc) AliasAtom(*this, name);
- alias->addReference(Reference::KindNamespace::all, Reference::KindArch::all,
- Reference::kindLayoutAfter, 0, target, 0);
- alias->setMerge(DefinedAtom::mergeAsWeak);
- if (target->contentType() == DefinedAtom::typeCode)
- alias->setDeadStrip(DefinedAtom::deadStripNever);
- alias->setOrdinal(target->ordinal() - cnt);
- return alias;
-}
-
-void FileCOFF::createAlternateNameAtoms() {
- std::vector<AliasAtom *> aliases;
- for (const DefinedAtom *atom : defined()) {
- int cnt = 1;
- for (StringRef alias : _ctx.getAlternateNames(atom->name()))
- aliases.push_back(createAlias(alias, atom, cnt++));
- }
- for (AliasAtom *alias : aliases)
- _definedAtoms.push_back(alias);
-}
-
-// Interpret the contents of .drectve section. If exists, the section contains
-// a string containing command line options. The linker is expected to
-// interpret the options as if they were given via the command line.
-//
-// The section mainly contains /defaultlib (-l in Unix), but can contain any
-// options as long as they are valid.
-std::error_code
-FileCOFF::parseDirectiveSection(StringRef directives) {
- DEBUG(llvm::dbgs() << ".drectve: " << directives << "\n");
-
- // Split the string into tokens, as the shell would do for argv.
- SmallVector<const char *, 16> tokens;
- tokens.push_back("link"); // argv[0] is the command name. Will be ignored.
- llvm::cl::TokenizeWindowsCommandLine(directives, _stringSaver, tokens);
- tokens.push_back(nullptr);
-
- // Calls the command line parser to interpret the token string as if they
- // were given via the command line.
- int argc = tokens.size() - 1;
- const char **argv = &tokens[0];
- std::string errorMessage;
- llvm::raw_string_ostream stream(errorMessage);
- PECOFFLinkingContext::ParseDirectives parseDirectives =
- _ctx.getParseDirectives();
- bool parseFailed = !parseDirectives(argc, argv, _ctx, stream);
- stream.flush();
- // Print error message if error.
- if (parseFailed) {
- return make_dynamic_error_code(
- Twine("Failed to parse '") + directives + "'\n"
- + "Reason: " + errorMessage);
- }
- if (!errorMessage.empty()) {
- llvm::errs() << "lld warning: " << errorMessage << "\n";
- }
- return std::error_code();
-}
-
-/// Returns the target machine type of the current object file.
-std::error_code FileCOFF::getReferenceArch(Reference::KindArch &result) {
- switch (_obj->getMachine()) {
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- result = Reference::KindArch::x86;
- return std::error_code();
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- result = Reference::KindArch::x86_64;
- return std::error_code();
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- result = Reference::KindArch::ARM;
- return std::error_code();
- case llvm::COFF::IMAGE_FILE_MACHINE_UNKNOWN:
- result = Reference::KindArch::all;
- return std::error_code();
- }
- llvm::errs() << "Unsupported machine type: 0x"
- << llvm::utohexstr(_obj->getMachine()) << '\n';
- return llvm::object::object_error::parse_failed;
-}
-
-/// Add relocation information to atoms.
-std::error_code FileCOFF::addRelocationReferenceToAtoms() {
- // Relocation entries are defined for each section.
- for (const auto &sec : _obj->sections()) {
- const coff_section *section = _obj->getCOFFSection(sec);
-
- // Skip if there's no atom for the section. Currently we do not create any
- // atoms for some sections, such as "debug$S", and such sections need to
- // be skipped here too.
- if (_sectionAtoms.find(section) == _sectionAtoms.end())
- continue;
-
- for (const auto &reloc : sec.relocations()) {
- const coff_relocation *rel = _obj->getCOFFRelocation(reloc);
- if (auto ec = addRelocationReference(rel, section))
- return ec;
- }
- }
- return std::error_code();
-}
-
-// Read .sxdata section if exists. .sxdata is a x86-only section that contains a
-// vector of symbol offsets. The symbols pointed by this section are SEH handler
-// functions contained in the same object file. The linker needs to construct a
-// SEH table and emit it to executable.
-//
-// On x86, exception handler addresses are in stack, so they are vulnerable to
-// stack overflow attack. In order to protect against it, Windows runtime uses
-// the SEH table to check if a SEH handler address in stack is a real address of
-// a handler created by compiler.
-//
-// What we want to emit from the linker is a vector of SEH handler VAs, but here
-// we have a vector of offsets to the symbol table. So we convert the latter to
-// the former.
-std::error_code FileCOFF::maybeCreateSXDataAtoms() {
- ArrayRef<uint8_t> sxdata;
- if (std::error_code ec = getSectionContents(".sxdata", sxdata))
- return ec;
- if (sxdata.empty())
- return std::error_code();
-
- auto *atom = new (_alloc) COFFDefinedAtom(
- *this, "", ".sxdata", 0, Atom::scopeTranslationUnit,
- DefinedAtom::typeData, false /*isComdat*/, DefinedAtom::permR__,
- DefinedAtom::mergeNo, sxdata, getNextOrdinal());
-
- const ulittle32_t *symbolIndex =
- reinterpret_cast<const ulittle32_t *>(sxdata.data());
- int numSymbols = sxdata.size() / sizeof(uint32_t);
-
- for (int i = 0; i < numSymbols; ++i) {
- Atom *handlerFunc;
- if (std::error_code ec = getAtomBySymbolIndex(symbolIndex[i], handlerFunc))
- return ec;
- int offsetInAtom = i * sizeof(uint32_t);
-
- uint16_t rtype;
- switch (_obj->getMachine()) {
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- rtype = llvm::COFF::IMAGE_REL_AMD64_ADDR32;
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- rtype = llvm::COFF::IMAGE_REL_I386_DIR32;
- break;
- default:
- llvm_unreachable("unsupported machine type");
- }
-
- atom->addReference(llvm::make_unique<SimpleReference>(
- Reference::KindNamespace::COFF, _referenceArch, rtype, offsetInAtom,
- handlerFunc, 0));
- }
-
- _definedAtoms.push_back(atom);
- return std::error_code();
-}
-
-/// Find a section by name.
-std::error_code FileCOFF::findSection(StringRef name,
- const coff_section *&result) {
- for (const auto &sec : _obj->sections()) {
- const coff_section *section = _obj->getCOFFSection(sec);
- StringRef sectionName;
- if (auto ec = _obj->getSectionName(section, sectionName))
- return ec;
- if (sectionName == name) {
- result = section;
- return std::error_code();
- }
- }
- // Section was not found, but it's not an error. This method returns
- // an error only when there's a read error.
- return std::error_code();
-}
-
-// Convert ArrayRef<uint8_t> to std::string. The array contains a string which
-// may not be terminated by NUL.
-StringRef FileCOFF::ArrayRefToString(ArrayRef<uint8_t> array) {
- // .drectve sections are encoded in either ASCII or UTF-8 with BOM.
- // The PE/COFF spec allows ANSI (Windows-1252 encoding), but seems
- // it's no longer in use.
- // Skip a UTF-8 byte marker if exists.
- if (array.size() >= 3 && array[0] == 0xEF && array[1] == 0xBB &&
- array[2] == 0xBF) {
- array = array.slice(3);
- }
- if (array.empty())
- return "";
- StringRef s(reinterpret_cast<const char *>(array.data()), array.size());
- s = s.substr(0, s.find_first_of('\0'));
- std::string *contents = new (_alloc) std::string(s.data(), s.size());
- return StringRef(*contents).trim();
-}
-
-// getNextOrdinal returns a monotonically increasaing uint64_t number
-// starting from 1. There's a large gap between two numbers returned
-// from this function, so that you can put other atoms between them.
-uint64_t FileCOFF::getNextOrdinal() {
- return _ordinal++ << 32;
-}
-
-class COFFObjectReader : public Reader {
-public:
- COFFObjectReader(PECOFFLinkingContext &ctx) : _ctx(ctx) {}
-
- bool canParse(file_magic magic, MemoryBufferRef) const override {
- return magic == llvm::sys::fs::file_magic::coff_object;
- }
-
- ErrorOr<std::unique_ptr<File>> loadFile(std::unique_ptr<MemoryBuffer> mb,
- const Registry &) const override {
- // Parse the memory buffer as PECOFF file.
- std::unique_ptr<File> ret =
- llvm::make_unique<FileCOFF>(std::move(mb), _ctx);
- return std::move(ret);
- }
-
-private:
- PECOFFLinkingContext &_ctx;
-};
-
-using namespace llvm::COFF;
-
-const Registry::KindStrings kindStringsI386[] = {
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_ABSOLUTE),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_DIR16),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_REL16),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_DIR32),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_DIR32NB),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_SEG12),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_SECTION),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_SECREL),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_TOKEN),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_SECREL7),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_I386_REL32),
- LLD_KIND_STRING_END};
-
-const Registry::KindStrings kindStringsAMD64[] = {
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_ABSOLUTE),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_ADDR64),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_ADDR32),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_ADDR32NB),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_REL32),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_REL32_1),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_REL32_2),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_REL32_3),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_REL32_4),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_REL32_5),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_SECTION),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_SECREL),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_SECREL7),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_TOKEN),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_SREL32),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_PAIR),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_AMD64_SSPAN32),
- LLD_KIND_STRING_END};
-
-const Registry::KindStrings kindStringsARMNT[] = {
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_ABSOLUTE),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_ADDR32),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_ADDR32NB),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_BRANCH24),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_BRANCH11),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_TOKEN),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_BLX24),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_BLX11),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_SECTION),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_SECREL),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_MOV32A),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_MOV32T),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_BRANCH20T),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_BRANCH24T),
- LLD_KIND_STRING_ENTRY(IMAGE_REL_ARM_BLX23T),
-};
-
-} // end namespace anonymous
-
-namespace lld {
-
-void Registry::addSupportCOFFObjects(PECOFFLinkingContext &ctx) {
- add(std::unique_ptr<Reader>(new COFFObjectReader(ctx)));
- addKindTable(Reference::KindNamespace::COFF, Reference::KindArch::x86,
- kindStringsI386);
- addKindTable(Reference::KindNamespace::COFF, Reference::KindArch::x86_64,
- kindStringsAMD64);
- addKindTable(Reference::KindNamespace::COFF, Reference::KindArch::ARM,
- kindStringsARMNT);
-}
-
-}
Removed: lld/trunk/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp (removed)
@@ -1,388 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/ReaderImportHeader.cpp ---------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file \brief This file provides a way to read an import library member in a
-/// .lib file.
-///
-/// Archive Files in Windows
-/// ========================
-///
-/// In Windows, archive files with .lib file extension serve two different
-/// purposes.
-///
-/// - For static linking: An archive file in this use case contains multiple
-/// regular .obj files and is used for static linking. This is the same
-/// usage as .a file in Unix.
-///
-/// - For dynamic linking: An archive file in this use case contains pseudo
-/// .obj files to describe exported symbols of a DLL. Each pseudo .obj file
-/// in an archive has a name of an exported symbol and a DLL filename from
-/// which the symbol can be imported. When you link a DLL on Windows, you
-/// pass the name of the .lib file for the DLL instead of the DLL filename
-/// itself. That is the Windows way of linking against a shared library.
-///
-/// This file contains a function to handle the pseudo object file.
-///
-/// Windows Loader and Import Address Table
-/// =======================================
-///
-/// Windows supports a GOT-like mechanism for DLLs. The executable using DLLs
-/// contains a list of DLL names and list of symbols that need to be resolved by
-/// the loader. Windows loader maps the executable and all the DLLs to memory,
-/// resolves the symbols referencing items in DLLs, and updates the import
-/// address table (IAT) in memory. The IAT is an array of pointers to all of the
-/// data or functions in DLL referenced by the executable. You cannot access
-/// items in DLLs directly. They have to be accessed through an extra level of
-/// indirection.
-///
-/// So, if you want to access an item in DLL, you have to go through a
-/// pointer. How do you actually do that? You need a symbol for a pointer in the
-/// IAT. For each symbol defined in a DLL, a symbol with "__imp_" prefix is
-/// exported from the DLL for an IAT entry. For example, if you have a global
-/// variable "foo" in a DLL, a pointer to the variable is available as
-/// "_imp__foo". The IAT is an array of _imp__ symbols.
-///
-/// Is this OK? That's not that complicated. Because items in a DLL are not
-/// directly accessible, you need to access through a pointer, and the pointer
-/// is available as a symbol with _imp__ prefix.
-///
-/// Note 1: Although you can write code with _imp__ prefix, today's compiler and
-/// linker let you write code as if there's no extra level of indirection.
-/// That's why you haven't seen lots of _imp__ in your code. A variable or a
-/// function declared with "dllimport" attribute is treated as an item in a DLL,
-/// and the compiler automatically mangles its name and inserts the extra level
-/// of indirection when accessing the item. Here are some examples:
-///
-/// __declspec(dllimport) int var_in_dll;
-/// var_in_dll = 3; // is equivalent to *_imp__var_in_dll = 3;
-///
-/// __declspec(dllimport) int fn_in_dll(void);
-/// fn_in_dll(); // is equivalent to (*_imp__fn_in_dll)();
-///
-/// It's just the compiler rewrites code for you so that you don't need to
-/// handle the indirection yourself.
-///
-/// Note 2: __declspec(dllimport) is mandatory for data but optional for
-/// function. For a function, the linker creates a jump table with the original
-/// symbol name, so that the function is accessible without _imp__ prefix. The
-/// same function in a DLL can be called through two different symbols if it's
-/// not dllimport'ed.
-///
-/// (*_imp__fn)()
-/// fn()
-///
-/// The above functions do the same thing. fn's content is a JMP instruction to
-/// branch to the address pointed by _imp__fn. The latter may be a little bit
-/// slower than the former because it will execute the extra JMP instruction,
-/// but that's usually negligible.
-///
-/// If a function is dllimport'ed, which is usually done in a header file,
-/// mangled name will be used at compile time so the jump table will not be
-/// used.
-///
-/// Because there's no way to hide the indirection for data access at link time,
-/// data has to be accessed through dllimport'ed symbols or explicit _imp__
-/// prefix.
-///
-/// Idata Sections in the Pseudo Object File
-/// ========================================
-///
-/// The object file created by cl.exe has several sections whose name starts
-/// with ".idata$" followed by a number. The contents of the sections seem the
-/// fragments of a complete ".idata" section. These sections has relocations for
-/// the data referenced from the idata secton. Generally, the linker discards
-/// "$" and all characters that follow from the section name and merges their
-/// contents to one section. So, it looks like if everything would work fine,
-/// the idata section would naturally be constructed without having any special
-/// code for doing that.
-///
-/// However, the LLD linker cannot do that. An idata section constructed in that
-/// way was never be in valid format. We don't know the reason yet. Our
-/// assumption on the idata fragment could simply be wrong, or the LLD linker is
-/// not powerful enough to do the job. Meanwhile, we construct the idata section
-/// ourselves. All the "idata$" sections in the pseudo object file are currently
-/// ignored.
-///
-/// Creating Atoms for the Import Address Table
-/// ===========================================
-///
-/// The function in this file reads a pseudo object file and creates at most two
-/// atoms. One is a shared library atom for _imp__ symbol. The another is a
-/// defined atom for the JMP instruction if the symbol is for a function.
-///
-//===----------------------------------------------------------------------===//
-
-#include "Atoms.h"
-#include "lld/Core/Error.h"
-#include "lld/Core/File.h"
-#include "lld/Core/SharedLibraryAtom.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/Object/COFF.h"
-#include "llvm/Support/COFF.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/Endian.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/Memory.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/raw_ostream.h"
-#include <cstring>
-#include <map>
-#include <system_error>
-#include <vector>
-
-using namespace lld;
-using namespace lld::pecoff;
-using namespace llvm;
-using namespace llvm::support::endian;
-
-#define DEBUG_TYPE "ReaderImportHeader"
-
-namespace lld {
-
-namespace {
-
-// This code is valid both in x86 and x64.
-const uint8_t FuncAtomContentX86[] = {
- 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // JMP *0x0
- 0xcc, 0xcc // INT 3; INT 3
-};
-
-const uint8_t FuncAtomContentARMNT[] = {
- 0x40, 0xf2, 0x00, 0x0c, // mov.w ip, #0
- 0xc0, 0xf2, 0x00, 0x0c, // mov.t ip, #0
- 0xdc, 0xf8, 0x00, 0xf0, // ldr.w pc, [ip]
-};
-
-static void setJumpInstTarget(COFFLinkerInternalAtom *src, const Atom *dst,
- int off, MachineTypes machine) {
- SimpleReference *ref;
-
- switch (machine) {
- default: llvm::report_fatal_error("unsupported machine type");
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- ref = new SimpleReference(Reference::KindNamespace::COFF,
- Reference::KindArch::x86,
- llvm::COFF::IMAGE_REL_I386_DIR32,
- off, dst, 0);
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- ref = new SimpleReference(Reference::KindNamespace::COFF,
- Reference::KindArch::x86_64,
- llvm::COFF::IMAGE_REL_AMD64_REL32,
- off, dst, 0);
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- ref = new SimpleReference(Reference::KindNamespace::COFF,
- Reference::KindArch::ARM,
- llvm::COFF::IMAGE_REL_ARM_MOV32T,
- off, dst, 0);
- break;
- }
- src->addReference(std::unique_ptr<SimpleReference>(ref));
-}
-
-/// The defined atom for jump table.
-class FuncAtom : public COFFLinkerInternalAtom {
-public:
- FuncAtom(const File &file, StringRef symbolName,
- const COFFSharedLibraryAtom *impAtom, MachineTypes machine)
- : COFFLinkerInternalAtom(file, /*oridnal*/ 0, createContent(machine),
- symbolName) {
- size_t Offset;
-
- switch (machine) {
- default: llvm::report_fatal_error("unsupported machine type");
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- Offset = 2;
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- Offset = 0;
- break;
- }
-
- setJumpInstTarget(this, impAtom, Offset, machine);
- }
-
- uint64_t ordinal() const override { return 0; }
- Scope scope() const override { return scopeGlobal; }
- ContentType contentType() const override { return typeCode; }
- Alignment alignment() const override { return 2; }
- ContentPermissions permissions() const override { return permR_X; }
-
-private:
- std::vector<uint8_t> createContent(MachineTypes machine) const {
- const uint8_t *Data;
- size_t Size;
-
- switch (machine) {
- default: llvm::report_fatal_error("unsupported machine type");
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- Data = FuncAtomContentX86;
- Size = sizeof(FuncAtomContentX86);
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- Data = FuncAtomContentARMNT;
- Size = sizeof(FuncAtomContentARMNT);
- break;
- }
-
- return std::vector<uint8_t>(Data, Data + Size);
- }
-};
-
-class FileImportLibrary : public File {
-public:
- FileImportLibrary(std::unique_ptr<MemoryBuffer> mb, MachineTypes machine)
- : File(mb->getBufferIdentifier(), kindSharedLibrary),
- _mb(std::move(mb)), _machine(machine) {}
-
- std::error_code doParse() override {
- const char *buf = _mb->getBufferStart();
- const char *end = _mb->getBufferEnd();
-
- // The size of the string that follows the header.
- uint32_t dataSize
- = read32le(buf + offsetof(COFF::ImportHeader, SizeOfData));
-
- // Check if the total size is valid.
- if (std::size_t(end - buf) != sizeof(COFF::ImportHeader) + dataSize)
- return make_dynamic_error_code("Broken import library");
-
- uint16_t hint = read16le(buf + offsetof(COFF::ImportHeader, OrdinalHint));
- StringRef symbolName(buf + sizeof(COFF::ImportHeader));
- StringRef dllName(buf + sizeof(COFF::ImportHeader) + symbolName.size() + 1);
-
- // TypeInfo is a bitfield. The least significant 2 bits are import
- // type, followed by 3 bit import name type.
- uint16_t typeInfo = read16le(buf + offsetof(COFF::ImportHeader, TypeInfo));
- int type = typeInfo & 0x3;
- int nameType = (typeInfo >> 2) & 0x7;
-
- // Symbol name used by the linker may be different from the symbol name used
- // by the loader. The latter may lack symbol decorations, or may not even
- // have name if it's imported by ordinal.
- StringRef importName = symbolNameToImportName(symbolName, nameType);
-
- const COFFSharedLibraryAtom *dataAtom =
- addSharedLibraryAtom(hint, symbolName, importName, dllName);
- if (type == llvm::COFF::IMPORT_CODE)
- addFuncAtom(symbolName, dllName, dataAtom);
-
- return std::error_code();
- }
-
- const AtomVector<DefinedAtom> &defined() const override {
- return _definedAtoms;
- }
-
- const AtomVector<UndefinedAtom> &undefined() const override {
- return _noUndefinedAtoms;
- }
-
- const AtomVector<SharedLibraryAtom> &sharedLibrary() const override {
- return _sharedLibraryAtoms;
- }
-
- const AtomVector<AbsoluteAtom> &absolute() const override {
- return _noAbsoluteAtoms;
- }
-
-private:
- const COFFSharedLibraryAtom *addSharedLibraryAtom(uint16_t hint,
- StringRef symbolName,
- StringRef importName,
- StringRef dllName) {
- auto *atom = new (_alloc)
- COFFSharedLibraryAtom(*this, hint, symbolName, importName, dllName);
- _sharedLibraryAtoms.push_back(atom);
- return atom;
- }
-
- void addFuncAtom(StringRef symbolName, StringRef dllName,
- const COFFSharedLibraryAtom *impAtom) {
- auto *atom = new (_alloc) FuncAtom(*this, symbolName, impAtom, _machine);
- _definedAtoms.push_back(atom);
- }
-
- AtomVector<DefinedAtom> _definedAtoms;
- AtomVector<SharedLibraryAtom> _sharedLibraryAtoms;
- mutable llvm::BumpPtrAllocator _alloc;
-
- // Does the same thing as StringRef::ltrim() but removes at most one
- // character.
- StringRef ltrim1(StringRef str, const char *chars) const {
- if (!str.empty() && strchr(chars, str[0]))
- return str.substr(1);
- return str;
- }
-
- // Convert the given symbol name to the import symbol name exported by the
- // DLL.
- StringRef symbolNameToImportName(StringRef symbolName, int nameType) const {
- StringRef ret;
- switch (nameType) {
- case llvm::COFF::IMPORT_ORDINAL:
- // The import is by ordinal. No symbol name will be used to identify the
- // item in the DLL. Only its ordinal will be used.
- return "";
- case llvm::COFF::IMPORT_NAME:
- // The import name in this case is identical to the symbol name.
- return symbolName;
- case llvm::COFF::IMPORT_NAME_NOPREFIX:
- // The import name is the symbol name without leading ?, @ or _.
- ret = ltrim1(symbolName, "?@_");
- break;
- case llvm::COFF::IMPORT_NAME_UNDECORATE:
- // Similar to NOPREFIX, but we also need to truncate at the first @.
- ret = ltrim1(symbolName, "?@_");
- ret = ret.substr(0, ret.find('@'));
- break;
- }
- std::string *str = new (_alloc) std::string(ret);
- return *str;
- }
-
- std::unique_ptr<MemoryBuffer> _mb;
- MachineTypes _machine;
-};
-
-class COFFImportLibraryReader : public Reader {
-public:
- COFFImportLibraryReader(PECOFFLinkingContext &ctx) : _ctx(ctx) {}
-
- bool canParse(file_magic magic, MemoryBufferRef mb) const override {
- if (mb.getBufferSize() < sizeof(COFF::ImportHeader))
- return false;
- return magic == llvm::sys::fs::file_magic::coff_import_library;
- }
-
- ErrorOr<std::unique_ptr<File>>
- loadFile(std::unique_ptr<MemoryBuffer> mb,
- const class Registry &) const override {
- std::unique_ptr<File> ret = llvm::make_unique<FileImportLibrary>(
- std::move(mb), _ctx.getMachineType());
- return std::move(ret);
- }
-
-private:
- PECOFFLinkingContext &_ctx;
-};
-
-} // end anonymous namespace
-
-void Registry::addSupportCOFFImportLibraries(PECOFFLinkingContext &ctx) {
- add(llvm::make_unique<COFFImportLibraryReader>(ctx));
-}
-
-} // end namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp (removed)
@@ -1,118 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp --------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// This file is responsible for creating the Import Library file.
-///
-//===----------------------------------------------------------------------===//
-
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/FileUtilities.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/Program.h"
-#include "llvm/Support/raw_ostream.h"
-
-namespace lld {
-namespace pecoff {
-
-/// Creates a .def file containing the list of exported symbols.
-static std::string
-createModuleDefinitionFile(const PECOFFLinkingContext &ctx) {
- std::string ret;
- llvm::raw_string_ostream os(ret);
- os << "LIBRARY \"" << llvm::sys::path::filename(ctx.outputPath()) << "\"\n"
- << "EXPORTS\n";
-
- for (const PECOFFLinkingContext::ExportDesc &desc : ctx.getDllExports()) {
- // Symbol names in a module-definition file will be mangled by lib.exe,
- // so we need to demangle them before writing to a .def file.
- os << " ";
- if (!desc.externalName.empty()) {
- os << desc.externalName;
- } else if (!desc.mangledName.empty()) {
- os << ctx.undecorateSymbol(desc.mangledName);
- } else {
- os << ctx.undecorateSymbol(desc.name);
- }
-
- if (!desc.isPrivate)
- os << " @" << desc.ordinal;
- if (desc.noname)
- os << " NONAME";
- if (desc.isData)
- os << " DATA";
- if (desc.isPrivate)
- os << " PRIVATE";
- os << "\n";
- }
- os.flush();
- return ret;
-}
-
-static std::string writeToTempFile(StringRef contents) {
- SmallString<128> path;
- int fd;
- if (llvm::sys::fs::createTemporaryFile("tmp", "def", fd, path)) {
- llvm::errs() << "Failed to create temporary file\n";
- return "";
- }
- llvm::raw_fd_ostream os(fd, /*shouldClose*/ true);
- os << contents;
- return path.str();
-}
-
-static void writeTo(StringRef path, StringRef contents) {
- int fd;
- if (llvm::sys::fs::openFileForWrite(path, fd, llvm::sys::fs::F_Text)) {
- llvm::errs() << "Failed to open " << path << "\n";
- return;
- }
- llvm::raw_fd_ostream os(fd, /*shouldClose*/ true);
- os << contents;
-}
-
-/// Creates a .def file and runs lib.exe on it to create an import library.
-void writeImportLibrary(const PECOFFLinkingContext &ctx) {
- std::string fileContents = createModuleDefinitionFile(ctx);
-
- std::string program = "lib.exe";
- ErrorOr<std::string> programPathOrErr = llvm::sys::findProgramByName(program);
- if (!programPathOrErr) {
- llvm::errs() << "Unable to find " << program << " in PATH\n";
- } else {
- const std::string &programPath = *programPathOrErr;
-
- std::string defPath = writeToTempFile(fileContents);
- llvm::FileRemover tmpFile(defPath);
-
- std::string defArg = "/def:";
- defArg.append(defPath);
- std::string outputArg = "/out:";
- outputArg.append(ctx.getOutputImportLibraryPath());
-
- std::vector<const char *> args;
- args.push_back(programPath.c_str());
- args.push_back("/nologo");
- args.push_back(ctx.is64Bit() ? "/machine:x64" : "/machine:x86");
- args.push_back(defArg.c_str());
- args.push_back(outputArg.c_str());
- args.push_back(nullptr);
-
- if (llvm::sys::ExecuteAndWait(programPath.c_str(), &args[0]) != 0)
- llvm::errs() << program << " failed\n";
- }
-
- // If /lldmoduledeffile:<filename> is given, make a copy of the
- // temporary module definition file. This feature is for unit tests.
- if (!ctx.getModuleDefinitionFile().empty())
- writeTo(ctx.getModuleDefinitionFile(), fileContents);
-}
-
-} // end namespace pecoff
-} // end namespace lld
Removed: lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.h?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.h (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.h (removed)
@@ -1,23 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/WriterImportLibrary.h ----------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_READER_WRITER_PE_COFF_WRITER_IMPORT_LIBRARY_H
-#define LLD_READER_WRITER_PE_COFF_WRITER_IMPORT_LIBRARY_H
-
-namespace lld {
-class PECOFFLinkingContext;
-
-namespace pecoff {
-
-void writeImportLibrary(const PECOFFLinkingContext &ctx);
-
-} // end namespace pecoff
-} // end namespace lld
-
-#endif
Removed: lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp (removed)
@@ -1,1417 +0,0 @@
-//===- lib/ReaderWriter/PECOFF/WriterPECOFF.cpp ---------------------------===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-///
-/// PE/COFF file consists of DOS Header, PE Header, COFF Header and Section
-/// Tables followed by raw section data.
-///
-/// This writer is responsible for writing Core Linker results to an Windows
-/// executable file.
-///
-/// This writer currently supports 32 bit PE/COFF for x86 processor only.
-///
-//===----------------------------------------------------------------------===//
-
-#include "Atoms.h"
-#include "WriterImportLibrary.h"
-#include "lld/Core/DefinedAtom.h"
-#include "lld/Core/File.h"
-#include "lld/Core/Writer.h"
-#include "lld/ReaderWriter/AtomLayout.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/Object/COFF.h"
-#include "llvm/Support/COFF.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/Endian.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/ErrorOr.h"
-#include "llvm/Support/FileOutputBuffer.h"
-#include "llvm/Support/Format.h"
-#include <algorithm>
-#include <cstdlib>
-#include <map>
-#include <time.h>
-#include <vector>
-
-#define DEBUG_TYPE "WriterPECOFF"
-
-using namespace llvm::support::endian;
-
-using llvm::COFF::DataDirectoryIndex;
-using llvm::object::coff_runtime_function_x64;
-using llvm::support::ulittle16_t;
-using llvm::support::ulittle32_t;
-using llvm::support::ulittle64_t;
-
-namespace lld {
-namespace pecoff {
-
-// Disk sector size. Some data needs to be aligned at disk sector boundary in
-// file.
-static const int SECTOR_SIZE = 512;
-
-namespace {
-class SectionChunk;
-
-/// A Chunk is an abstract contiguous range in an output file.
-class Chunk {
-public:
- enum Kind {
- kindHeader,
- kindSection,
- kindStringTable,
- kindAtomChunk
- };
-
- explicit Chunk(Kind kind) : _kind(kind), _size(0) {}
- virtual ~Chunk() {}
- virtual void write(uint8_t *buffer) = 0;
- virtual uint64_t size() const { return _size; }
- virtual uint64_t onDiskSize() const { return size(); }
- virtual uint64_t align() const { return 1; }
-
- uint64_t fileOffset() const { return _fileOffset; }
- void setFileOffset(uint64_t fileOffset) { _fileOffset = fileOffset; }
- Kind getKind() const { return _kind; }
-
-protected:
- Kind _kind;
- uint64_t _size;
- uint64_t _fileOffset;
-};
-
-/// A HeaderChunk is an abstract class to represent a file header for
-/// PE/COFF. The data in the header chunk is metadata about program and will
-/// be consumed by the windows loader. HeaderChunks are not mapped to memory
-/// when executed.
-class HeaderChunk : public Chunk {
-public:
- HeaderChunk() : Chunk(kindHeader) {}
-
- static bool classof(const Chunk *c) { return c->getKind() == kindHeader; }
-};
-
-/// A DOSStubChunk represents the DOS compatible header at the beginning
-/// of PE/COFF files.
-class DOSStubChunk : public HeaderChunk {
-public:
- explicit DOSStubChunk(const PECOFFLinkingContext &ctx)
- : HeaderChunk(), _ctx(ctx) {
- // Minimum size of DOS stub is 64 bytes. The next block (PE header) needs to
- // be aligned on 8 byte boundary.
- size_t size = std::max(_ctx.getDosStub().size(), (size_t)64);
- _size = llvm::RoundUpToAlignment(size, 8);
- }
-
- void write(uint8_t *buffer) override {
- ArrayRef<uint8_t> array = _ctx.getDosStub();
- std::memcpy(buffer, array.data(), array.size());
- auto *header = reinterpret_cast<llvm::object::dos_header *>(buffer);
- header->AddressOfRelocationTable = sizeof(llvm::object::dos_header);
- header->AddressOfNewExeHeader = _size;
- }
-
-private:
- const PECOFFLinkingContext &_ctx;
-};
-
-/// A PEHeaderChunk represents PE header including COFF header.
-template <class PEHeader>
-class PEHeaderChunk : public HeaderChunk {
-public:
- explicit PEHeaderChunk(const PECOFFLinkingContext &ctx);
-
- void write(uint8_t *buffer) override;
-
- void setSizeOfHeaders(uint64_t size) {
- // Must be multiple of FileAlignment.
- _peHeader.SizeOfHeaders = llvm::RoundUpToAlignment(size, SECTOR_SIZE);
- }
-
- void setSizeOfCode(uint64_t size) { _peHeader.SizeOfCode = size; }
- void setBaseOfCode(uint32_t rva) { _peHeader.BaseOfCode = rva; }
- void setBaseOfData(uint32_t rva);
- void setSizeOfImage(uint32_t size) { _peHeader.SizeOfImage = size; }
-
- void setSizeOfInitializedData(uint64_t size) {
- _peHeader.SizeOfInitializedData = size;
- }
-
- void setSizeOfUninitializedData(uint64_t size) {
- _peHeader.SizeOfUninitializedData = size;
- }
-
- void setNumberOfSections(uint32_t num) { _coffHeader.NumberOfSections = num; }
- void setNumberOfSymbols(uint32_t num) { _coffHeader.NumberOfSymbols = num; }
-
- void setAddressOfEntryPoint(uint32_t address) {
- _peHeader.AddressOfEntryPoint = address;
- }
-
- void setPointerToSymbolTable(uint32_t rva) {
- _coffHeader.PointerToSymbolTable = rva;
- }
-
-private:
- llvm::object::coff_file_header _coffHeader;
- PEHeader _peHeader;
-};
-
-/// A SectionHeaderTableChunk represents Section Table Header of PE/COFF
-/// format, which is a list of section headers.
-class SectionHeaderTableChunk : public HeaderChunk {
-public:
- SectionHeaderTableChunk() : HeaderChunk() {}
- void addSection(SectionChunk *chunk);
- uint64_t size() const override;
- void write(uint8_t *buffer) override;
-
-private:
- static llvm::object::coff_section createSectionHeader(SectionChunk *chunk);
-
- std::vector<SectionChunk *> _sections;
-};
-
-class StringTableChunk : public Chunk {
-public:
- StringTableChunk() : Chunk(kindStringTable) {}
-
- static bool classof(const Chunk *c) {
- return c->getKind() == kindStringTable;
- }
-
- uint32_t addSectionName(StringRef sectionName) {
- if (_stringTable.empty()) {
- // The string table immediately follows the symbol table.
- // We don't really need a symbol table, but some tools (e.g. dumpbin)
- // don't like zero-length symbol table.
- // Make room for the empty symbol slot, which occupies 18 byte.
- // We also need to reserve 4 bytes for the string table header.
- int size = sizeof(llvm::object::coff_symbol16) + 4;
- _stringTable.insert(_stringTable.begin(), size, 0);
- // Set the name of the dummy symbol to the first string table entry.
- // It's better than letting dumpbin print out a garabage as a symbol name.
- char *off = _stringTable.data() + 4;
- write32le(off, 4);
- }
- uint32_t offset = _stringTable.size();
- _stringTable.insert(_stringTable.end(), sectionName.begin(),
- sectionName.end());
- _stringTable.push_back('\0');
- return offset - sizeof(llvm::object::coff_symbol16);
- }
-
- uint64_t size() const override { return _stringTable.size(); }
-
- void write(uint8_t *buffer) override {
- if (_stringTable.empty())
- return;
- char *off = _stringTable.data() + sizeof(llvm::object::coff_symbol16);
- write32le(off, _stringTable.size());
- std::memcpy(buffer, _stringTable.data(), _stringTable.size());
- }
-
-private:
- std::vector<char> _stringTable;
-};
-
-class SectionChunk : public Chunk {
-public:
- uint64_t onDiskSize() const override {
- if (_characteristics & llvm::COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)
- return 0;
- return llvm::RoundUpToAlignment(size(), SECTOR_SIZE);
- }
-
- uint64_t align() const override { return SECTOR_SIZE; }
- uint32_t getCharacteristics() const { return _characteristics; }
- StringRef getSectionName() const { return _sectionName; }
- virtual uint64_t memAlign() const { return _memAlign; }
-
- static bool classof(const Chunk *c) {
- Kind kind = c->getKind();
- return kind == kindSection || kind == kindAtomChunk;
- }
-
- uint64_t getVirtualAddress() { return _virtualAddress; }
- virtual void setVirtualAddress(uint32_t rva) { _virtualAddress = rva; }
-
- uint32_t getStringTableOffset() const { return _stringTableOffset; }
- void setStringTableOffset(uint32_t offset) { _stringTableOffset = offset; }
-
-protected:
- SectionChunk(Kind kind, StringRef sectionName, uint32_t characteristics,
- const PECOFFLinkingContext &ctx)
- : Chunk(kind), _sectionName(sectionName),
- _characteristics(characteristics), _virtualAddress(0),
- _stringTableOffset(0), _memAlign(ctx.getPageSize()) {}
-
-private:
- StringRef _sectionName;
- const uint32_t _characteristics;
- uint64_t _virtualAddress;
- uint32_t _stringTableOffset;
- uint64_t _memAlign;
-};
-
-struct BaseReloc {
- BaseReloc(uint64_t a, llvm::COFF::BaseRelocationType t) : addr(a), type(t) {}
- uint64_t addr;
- llvm::COFF::BaseRelocationType type;
-};
-
-/// An AtomChunk represents a section containing atoms.
-class AtomChunk : public SectionChunk {
-public:
- AtomChunk(const PECOFFLinkingContext &ctx, StringRef name,
- const std::vector<const DefinedAtom *> &atoms);
-
- void write(uint8_t *buffer) override;
-
- uint64_t memAlign() const override;
- void appendAtom(const DefinedAtom *atom);
- void buildAtomRvaMap(std::map<const Atom *, uint64_t> &atomRva) const;
-
- void applyRelocationsARM(uint8_t *buffer,
- std::map<const Atom *, uint64_t> &atomRva,
- std::vector<uint64_t> §ionRva,
- uint64_t imageBaseAddress);
- void applyRelocationsX86(uint8_t *buffer,
- std::map<const Atom *, uint64_t> &atomRva,
- std::vector<uint64_t> §ionRva,
- uint64_t imageBaseAddress);
- void applyRelocationsX64(uint8_t *buffer,
- std::map<const Atom *, uint64_t> &atomRva,
- std::vector<uint64_t> §ionRva,
- uint64_t imageBaseAddress);
-
- void printAtomAddresses(uint64_t baseAddr) const;
- void addBaseRelocations(std::vector<BaseReloc> &relocSites) const;
-
- void setVirtualAddress(uint32_t rva) override;
- uint64_t getAtomVirtualAddress(StringRef name) const;
-
- static bool classof(const Chunk *c) { return c->getKind() == kindAtomChunk; }
-
-protected:
- std::vector<AtomLayout *> _atomLayouts;
- uint64_t _virtualAddress;
-
-private:
- uint32_t
- computeCharacteristics(const PECOFFLinkingContext &ctx, StringRef name,
- const std::vector<const DefinedAtom *> &atoms) const {
- return ctx.getSectionAttributes(name,
- getDefaultCharacteristics(name, atoms));
- }
-
- uint32_t getDefaultCharacteristics(
- StringRef name, const std::vector<const DefinedAtom *> &atoms) const;
-
- mutable llvm::BumpPtrAllocator _alloc;
- llvm::COFF::MachineTypes _machineType;
- const PECOFFLinkingContext &_ctx;
-};
-
-/// A DataDirectoryChunk represents data directory entries that follows the PE
-/// header in the output file. An entry consists of an 8 byte field that
-/// indicates a relative virtual address (the starting address of the entry data
-/// in memory) and 8 byte entry data size.
-class DataDirectoryChunk : public HeaderChunk {
-public:
- DataDirectoryChunk()
- : HeaderChunk(), _data(std::vector<llvm::object::data_directory>(16)) {}
-
- uint64_t size() const override {
- return sizeof(llvm::object::data_directory) * _data.size();
- }
-
- void setField(DataDirectoryIndex index, uint32_t addr, uint32_t size);
- void write(uint8_t *buffer) override;
-
-private:
- std::vector<llvm::object::data_directory> _data;
-};
-
-/// A BaseRelocChunk represents ".reloc" section.
-///
-/// .reloc section contains a list of addresses. If the PE/COFF loader decides
-/// to load the binary at a memory address different from its preferred base
-/// address, which is specified by ImageBase field in the COFF header, the
-/// loader needs to relocate the binary, so that all the addresses in the binary
-/// point to new locations. The loader will do that by fixing up the addresses
-/// specified by .reloc section.
-///
-/// The executable is almost always loaded at the preferred base address because
-/// it's loaded into an empty address space. The DLL is however an subject of
-/// load-time relocation because it may conflict with other DLLs or the
-/// executable.
-class BaseRelocChunk : public SectionChunk {
- typedef std::vector<std::unique_ptr<Chunk> > ChunkVectorT;
-
-public:
- BaseRelocChunk(ChunkVectorT &chunks, const PECOFFLinkingContext &ctx)
- : SectionChunk(kindSection, ".reloc", characteristics, ctx),
- _ctx(ctx), _contents(createContents(chunks)) {}
-
- void write(uint8_t *buffer) override {
- std::memcpy(buffer, &_contents[0], _contents.size());
- }
-
- uint64_t size() const override { return _contents.size(); }
-
-private:
- // When loaded into memory, reloc section should be readable and writable.
- static const uint32_t characteristics =
- llvm::COFF::IMAGE_SCN_MEM_READ |
- llvm::COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
- llvm::COFF::IMAGE_SCN_MEM_DISCARDABLE;
-
- std::vector<uint8_t> createContents(ChunkVectorT &chunks) const;
-
- // Returns a list of RVAs that needs to be relocated if the binary is loaded
- // at an address different from its preferred one.
- std::vector<BaseReloc> listRelocSites(ChunkVectorT &chunks) const;
-
- // Create the content of a relocation block.
- std::vector<uint8_t>
- createBaseRelocBlock(uint64_t pageAddr, const BaseReloc *begin,
- const BaseReloc *end) const;
-
- const PECOFFLinkingContext &_ctx;
- std::vector<uint8_t> _contents;
-};
-
-template <class PEHeader>
-PEHeaderChunk<PEHeader>::PEHeaderChunk(const PECOFFLinkingContext &ctx)
- : HeaderChunk() {
- // Set the size of the chunk and initialize the header with null bytes.
- _size = sizeof(llvm::COFF::PEMagic) + sizeof(_coffHeader) + sizeof(_peHeader);
- std::memset(&_coffHeader, 0, sizeof(_coffHeader));
- std::memset(&_peHeader, 0, sizeof(_peHeader));
-
- _coffHeader.Machine = ctx.getMachineType();
- _coffHeader.TimeDateStamp = time(nullptr);
-
- // Attributes of the executable.
- uint16_t characteristics = llvm::COFF::IMAGE_FILE_EXECUTABLE_IMAGE;
- if (!ctx.is64Bit())
- characteristics |= llvm::COFF::IMAGE_FILE_32BIT_MACHINE;
- if (ctx.isDll())
- characteristics |= llvm::COFF::IMAGE_FILE_DLL;
- if (ctx.getLargeAddressAware() || ctx.is64Bit())
- characteristics |= llvm::COFF::IMAGE_FILE_LARGE_ADDRESS_AWARE;
- if (ctx.getSwapRunFromCD())
- characteristics |= llvm::COFF::IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP;
- if (ctx.getSwapRunFromNet())
- characteristics |= llvm::COFF::IMAGE_FILE_NET_RUN_FROM_SWAP;
- if (!ctx.getBaseRelocationEnabled())
- characteristics |= llvm::COFF::IMAGE_FILE_RELOCS_STRIPPED;
-
- _coffHeader.Characteristics = characteristics;
-
- _peHeader.Magic = ctx.is64Bit() ? llvm::COFF::PE32Header::PE32_PLUS
- : llvm::COFF::PE32Header::PE32;
-
- // The address of the executable when loaded into memory. The default for
- // DLLs is 0x10000000. The default for executables is 0x400000.
- _peHeader.ImageBase = ctx.getBaseAddress();
-
- // Sections should be page-aligned when loaded into memory, which is 4KB on
- // x86.
- _peHeader.SectionAlignment = ctx.getSectionDefaultAlignment();
-
- // Sections in an executable file on disk should be sector-aligned (512 byte).
- _peHeader.FileAlignment = SECTOR_SIZE;
-
- // The version number of the resultant executable/DLL. The number is purely
- // informative, and neither the linker nor the loader won't use it. User can
- // set the value using /version command line option. Default is 0.0.
- PECOFFLinkingContext::Version imageVersion = ctx.getImageVersion();
- _peHeader.MajorImageVersion = imageVersion.majorVersion;
- _peHeader.MinorImageVersion = imageVersion.minorVersion;
-
- // The required Windows version number. This is the internal version and
- // shouldn't be confused with product name. Windows 7 is version 6.1 and
- // Windows 8 is 6.2, for example.
- PECOFFLinkingContext::Version minOSVersion = ctx.getMinOSVersion();
- _peHeader.MajorOperatingSystemVersion = minOSVersion.majorVersion;
- _peHeader.MinorOperatingSystemVersion = minOSVersion.minorVersion;
- _peHeader.MajorSubsystemVersion = minOSVersion.majorVersion;
- _peHeader.MinorSubsystemVersion = minOSVersion.minorVersion;
-
- _peHeader.Subsystem = ctx.getSubsystem();
-
- // Despite its name, DLL characteristics field has meaning both for
- // executables and DLLs. We are not very sure if the following bits must
- // be set, but regular binaries seem to have these bits, so we follow
- // them.
- uint16_t dllCharacteristics = 0;
- if (ctx.noSEH())
- dllCharacteristics |= llvm::COFF::IMAGE_DLL_CHARACTERISTICS_NO_SEH;
- if (ctx.isTerminalServerAware())
- dllCharacteristics |=
- llvm::COFF::IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE;
- if (ctx.isNxCompat())
- dllCharacteristics |= llvm::COFF::IMAGE_DLL_CHARACTERISTICS_NX_COMPAT;
- if (ctx.getDynamicBaseEnabled())
- dllCharacteristics |= llvm::COFF::IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE;
- if (!ctx.getAllowBind())
- dllCharacteristics |= llvm::COFF::IMAGE_DLL_CHARACTERISTICS_NO_BIND;
- if (!ctx.getAllowIsolation())
- dllCharacteristics |= llvm::COFF::IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION;
- if (ctx.getHighEntropyVA() && ctx.is64Bit())
- dllCharacteristics |= llvm::COFF::IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA;
- _peHeader.DLLCharacteristics = dllCharacteristics;
-
- _peHeader.SizeOfStackReserve = ctx.getStackReserve();
- _peHeader.SizeOfStackCommit = ctx.getStackCommit();
- _peHeader.SizeOfHeapReserve = ctx.getHeapReserve();
- _peHeader.SizeOfHeapCommit = ctx.getHeapCommit();
-
- // The number of data directory entries. We always have 16 entries.
- _peHeader.NumberOfRvaAndSize = 16;
-
- // The size of PE header including optional data directory.
- _coffHeader.SizeOfOptionalHeader = sizeof(PEHeader) +
- _peHeader.NumberOfRvaAndSize * sizeof(llvm::object::data_directory);
-}
-
-template <>
-void PEHeaderChunk<llvm::object::pe32_header>::setBaseOfData(uint32_t rva) {
- _peHeader.BaseOfData = rva;
-}
-
-template <>
-void PEHeaderChunk<llvm::object::pe32plus_header>::setBaseOfData(uint32_t rva) {
- // BaseOfData field does not exist in PE32+ header.
-}
-
-template <class PEHeader>
-void PEHeaderChunk<PEHeader>::write(uint8_t *buffer) {
- std::memcpy(buffer, llvm::COFF::PEMagic, sizeof(llvm::COFF::PEMagic));
- buffer += sizeof(llvm::COFF::PEMagic);
- std::memcpy(buffer, &_coffHeader, sizeof(_coffHeader));
- buffer += sizeof(_coffHeader);
- std::memcpy(buffer, &_peHeader, sizeof(_peHeader));
-}
-
-AtomChunk::AtomChunk(const PECOFFLinkingContext &ctx, StringRef sectionName,
- const std::vector<const DefinedAtom *> &atoms)
- : SectionChunk(kindAtomChunk, sectionName,
- computeCharacteristics(ctx, sectionName, atoms), ctx),
- _virtualAddress(0), _machineType(ctx.getMachineType()), _ctx(ctx) {
- for (auto *a : atoms)
- appendAtom(a);
-}
-
-void AtomChunk::write(uint8_t *buffer) {
- if (_atomLayouts.empty())
- return;
- if (getCharacteristics() & llvm::COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)
- return;
- if (getCharacteristics() & llvm::COFF::IMAGE_SCN_CNT_CODE) {
- // Fill the section with INT 3 (0xCC) rather than NUL, so that the
- // disassembler will not interpret a garbage between atoms as the beginning
- // of multi-byte machine code. This does not change the behavior of
- // resulting binary but help debugging.
- uint8_t *start = buffer + _atomLayouts.front()->_fileOffset;
- uint8_t *end = buffer + _atomLayouts.back()->_fileOffset;
- memset(start, 0xCC, end - start);
- }
-
- for (const auto *layout : _atomLayouts) {
- const DefinedAtom *atom = cast<DefinedAtom>(layout->_atom);
- ArrayRef<uint8_t> rawContent = atom->rawContent();
- std::memcpy(buffer + layout->_fileOffset, rawContent.data(),
- rawContent.size());
- }
-}
-
-// Add all atoms to the given map. This data will be used to do relocation.
-void
-AtomChunk::buildAtomRvaMap(std::map<const Atom *, uint64_t> &atomRva) const {
- for (const auto *layout : _atomLayouts)
- atomRva[layout->_atom] = layout->_virtualAddr;
-}
-
-static int getSectionIndex(uint64_t targetAddr,
- const std::vector<uint64_t> §ionRva) {
- int i = 1;
- for (uint64_t rva : sectionRva) {
- if (targetAddr < rva)
- return i;
- ++i;
- }
- return i;
-}
-
-static uint32_t getSectionStartAddr(uint64_t targetAddr,
- const std::vector<uint64_t> §ionRva) {
- // Scan the list of section start addresses to find the section start address
- // for the given RVA.
- for (int i = 0, e = sectionRva.size(); i < e; ++i)
- if (i == e - 1 || (sectionRva[i] <= targetAddr && targetAddr < sectionRva[i + 1]))
- return sectionRva[i];
- llvm_unreachable("Section missing");
-}
-
-static void applyThumbMoveImmediate(ulittle16_t *mov, uint16_t imm) {
- // MOVW(T3): |11110|i|10|0|1|0|0|imm4|0|imm3|Rd|imm8|
- // imm32 = zext imm4:i:imm3:imm8
- // MOVT(T1): |11110|i|10|1|1|0|0|imm4|0|imm3|Rd|imm8|
- // imm16 = imm4:i:imm3:imm8
- mov[0] =
- mov[0] | (((imm & 0x0800) >> 11) << 10) | (((imm & 0xf000) >> 12) << 0);
- mov[1] =
- mov[1] | (((imm & 0x0700) >> 8) << 12) | (((imm & 0x00ff) >> 0) << 0);
-}
-
-static void applyThumbBranchImmediate(ulittle16_t *bl, int32_t imm) {
- // BL(T1): |11110|S|imm10|11|J1|1|J2|imm11|
- // imm32 = sext S:I1:I2:imm10:imm11:'0'
- // B.W(T4): |11110|S|imm10|10|J1|1|J2|imm11|
- // imm32 = sext S:I1:I2:imm10:imm11:'0'
- //
- // I1 = ~(J1 ^ S), I2 = ~(J2 ^ S)
-
- assert((~abs(imm) & (~0ULL << 24)) && "bl/b.w out of range");
-
- uint32_t S = (imm < 0 ? 1 : 0);
- uint32_t J1 = ((~imm & 0x00800000) >> 23) ^ S;
- uint32_t J2 = ((~imm & 0x00400000) >> 22) ^ S;
-
- bl[0] = bl[0] | (((imm & 0x003ff000) >> 12) << 0) | (S << 10);
- bl[1] = bl[1] | (((imm & 0x00000ffe) >> 1) << 0) | (J2 << 11) | (J1 << 13);
-}
-
-void AtomChunk::applyRelocationsARM(uint8_t *Buffer,
- std::map<const Atom *, uint64_t> &AtomRVA,
- std::vector<uint64_t> &SectionRVA,
- uint64_t ImageBase) {
- Buffer = Buffer + _fileOffset;
- parallel_for_each(_atomLayouts.begin(), _atomLayouts.end(),
- [&](const AtomLayout *layout) {
- const DefinedAtom *Atom = cast<DefinedAtom>(layout->_atom);
- for (const Reference *R : *Atom) {
- if (R->kindNamespace() != Reference::KindNamespace::COFF)
- continue;
-
- bool AssumeTHUMBCode = false;
- if (auto Target = dyn_cast<DefinedAtom>(R->target()))
- AssumeTHUMBCode = Target->permissions() == DefinedAtom::permR_X ||
- Target->permissions() == DefinedAtom::permRWX;
-
- const auto AtomOffset = R->offsetInAtom();
- const auto FileOffset = layout->_fileOffset;
- const auto TargetAddr = AtomRVA[R->target()] | (AssumeTHUMBCode ? 1 : 0);
- auto RelocSite16 =
- reinterpret_cast<ulittle16_t *>(Buffer + FileOffset + AtomOffset);
- auto RelocSite32 =
- reinterpret_cast<ulittle32_t *>(Buffer + FileOffset + AtomOffset);
-
- switch (R->kindValue()) {
- default: llvm_unreachable("unsupported relocation type");
- case llvm::COFF::IMAGE_REL_ARM_ADDR32:
- *RelocSite32 = *RelocSite32 + TargetAddr + ImageBase;
- break;
- case llvm::COFF::IMAGE_REL_ARM_ADDR32NB:
- *RelocSite32 = *RelocSite32 + TargetAddr;
- break;
- case llvm::COFF::IMAGE_REL_ARM_MOV32T:
- applyThumbMoveImmediate(&RelocSite16[0], (TargetAddr + ImageBase) >> 0);
- applyThumbMoveImmediate(&RelocSite16[2], (TargetAddr + ImageBase) >> 16);
- break;
- case llvm::COFF::IMAGE_REL_ARM_BRANCH24T:
- // NOTE: the thumb bit will implicitly be truncated properly
- applyThumbBranchImmediate(RelocSite16,
- TargetAddr - AtomRVA[Atom] - AtomOffset - 4);
- break;
- case llvm::COFF::IMAGE_REL_ARM_BLX23T:
- // NOTE: the thumb bit will implicitly be truncated properly
- applyThumbBranchImmediate(RelocSite16,
- TargetAddr - AtomRVA[Atom] - AtomOffset - 4);
- break;
- }
- }
- });
-}
-
-void AtomChunk::applyRelocationsX86(uint8_t *buffer,
- std::map<const Atom *, uint64_t> &atomRva,
- std::vector<uint64_t> §ionRva,
- uint64_t imageBaseAddress) {
- buffer += _fileOffset;
- parallel_for_each(_atomLayouts.begin(), _atomLayouts.end(),
- [&](const AtomLayout *layout) {
- const DefinedAtom *atom = cast<DefinedAtom>(layout->_atom);
- for (const Reference *ref : *atom) {
- // Skip if this reference is not for COFF relocation.
- if (ref->kindNamespace() != Reference::KindNamespace::COFF)
- continue;
- auto relocSite32 = reinterpret_cast<ulittle32_t *>(
- buffer + layout->_fileOffset + ref->offsetInAtom());
- auto relocSite16 = reinterpret_cast<ulittle16_t *>(relocSite32);
- const Atom *target = ref->target();
- uint64_t targetAddr = atomRva[target];
- // Also account for whatever offset is already stored at the relocation
- // site.
- switch (ref->kindValue()) {
- case llvm::COFF::IMAGE_REL_I386_ABSOLUTE:
- // This relocation is no-op.
- break;
- case llvm::COFF::IMAGE_REL_I386_DIR32:
- // Set target's 32-bit VA.
- if (auto *abs = dyn_cast<AbsoluteAtom>(target))
- *relocSite32 += abs->value();
- else
- *relocSite32 += targetAddr + imageBaseAddress;
- break;
- case llvm::COFF::IMAGE_REL_I386_DIR32NB:
- // Set target's 32-bit RVA.
- *relocSite32 += targetAddr;
- break;
- case llvm::COFF::IMAGE_REL_I386_REL32: {
- // Set 32-bit relative address of the target. This relocation is
- // usually used for relative branch or call instruction.
- uint32_t disp = atomRva[atom] + ref->offsetInAtom() + 4;
- *relocSite32 += targetAddr - disp;
- break;
- }
- case llvm::COFF::IMAGE_REL_I386_SECTION:
- // The 16-bit section index that contains the target symbol.
- *relocSite16 += getSectionIndex(targetAddr, sectionRva);
- break;
- case llvm::COFF::IMAGE_REL_I386_SECREL:
- // The 32-bit relative address from the beginning of the section that
- // contains the target symbol.
- *relocSite32 +=
- targetAddr - getSectionStartAddr(targetAddr, sectionRva);
- break;
- default:
- llvm::report_fatal_error("Unsupported relocation kind");
- }
- }
- });
-}
-
-void AtomChunk::applyRelocationsX64(uint8_t *buffer,
- std::map<const Atom *, uint64_t> &atomRva,
- std::vector<uint64_t> §ionRva,
- uint64_t imageBase) {
- buffer += _fileOffset;
- parallel_for_each(_atomLayouts.begin(), _atomLayouts.end(),
- [&](const AtomLayout *layout) {
- const DefinedAtom *atom = cast<DefinedAtom>(layout->_atom);
- for (const Reference *ref : *atom) {
- if (ref->kindNamespace() != Reference::KindNamespace::COFF)
- continue;
-
- uint8_t *loc = buffer + layout->_fileOffset + ref->offsetInAtom();
- auto relocSite16 = reinterpret_cast<ulittle16_t *>(loc);
- auto relocSite32 = reinterpret_cast<ulittle32_t *>(loc);
- auto relocSite64 = reinterpret_cast<ulittle64_t *>(loc);
- uint64_t targetAddr = atomRva[ref->target()];
-
- switch (ref->kindValue()) {
- case llvm::COFF::IMAGE_REL_AMD64_ADDR64:
- *relocSite64 += targetAddr + imageBase;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_ADDR32:
- *relocSite32 += targetAddr + imageBase;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_ADDR32NB:
- *relocSite32 += targetAddr;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_REL32:
- *relocSite32 += targetAddr - atomRva[atom] - ref->offsetInAtom() - 4;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_REL32_1:
- *relocSite32 += targetAddr - atomRva[atom] - ref->offsetInAtom() - 5;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_REL32_2:
- *relocSite32 += targetAddr - atomRva[atom] - ref->offsetInAtom() - 6;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_REL32_3:
- *relocSite32 += targetAddr - atomRva[atom] - ref->offsetInAtom() - 7;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_REL32_4:
- *relocSite32 += targetAddr - atomRva[atom] - ref->offsetInAtom() - 8;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_REL32_5:
- *relocSite32 += targetAddr - atomRva[atom] - ref->offsetInAtom() - 9;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_SECTION:
- *relocSite16 += getSectionIndex(targetAddr, sectionRva) - 1;
- break;
- case llvm::COFF::IMAGE_REL_AMD64_SECREL:
- *relocSite32 +=
- targetAddr - getSectionStartAddr(targetAddr, sectionRva);
- break;
- default:
- llvm::errs() << "Kind: " << (int)ref->kindValue() << "\n";
- llvm::report_fatal_error("Unsupported relocation kind");
- }
- }
- });
-}
-
-/// Print atom VAs. Used only for debugging.
-void AtomChunk::printAtomAddresses(uint64_t baseAddr) const {
- for (const auto *layout : _atomLayouts) {
- const DefinedAtom *atom = cast<DefinedAtom>(layout->_atom);
- uint64_t addr = layout->_virtualAddr;
- llvm::dbgs() << llvm::format("0x%08llx: ", addr + baseAddr)
- << (atom->name().empty() ? "(anonymous)" : atom->name())
- << "\n";
- }
-}
-
-/// List all virtual addresses (and not relative virtual addresses) that need
-/// to be fixed up if image base is relocated. The only relocation type that
-/// needs to be fixed is DIR32 on i386. REL32 is not (and should not be)
-/// fixed up because it's PC-relative.
-void AtomChunk::addBaseRelocations(std::vector<BaseReloc> &relocSites) const {
- for (const auto *layout : _atomLayouts) {
- const DefinedAtom *atom = cast<DefinedAtom>(layout->_atom);
- for (const Reference *ref : *atom) {
- if (ref->kindNamespace() != Reference::KindNamespace::COFF)
- continue;
-
- // An absolute symbol points to a fixed location in memory. Their
- // address should not be fixed at load time. One exception is ImageBase
- // because that's relative to run-time image base address.
- if (auto *abs = dyn_cast<AbsoluteAtom>(ref->target()))
- if (!abs->name().equals("__ImageBase") &&
- !abs->name().equals("___ImageBase"))
- continue;
-
- uint64_t address = layout->_virtualAddr + ref->offsetInAtom();
- switch (_machineType) {
- default: llvm_unreachable("unsupported machine type");
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- if (ref->kindValue() == llvm::COFF::IMAGE_REL_I386_DIR32)
- relocSites.push_back(
- BaseReloc(address, llvm::COFF::IMAGE_REL_BASED_HIGHLOW));
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- if (ref->kindValue() == llvm::COFF::IMAGE_REL_AMD64_ADDR64)
- relocSites.push_back(
- BaseReloc(address, llvm::COFF::IMAGE_REL_BASED_DIR64));
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- if (ref->kindValue() == llvm::COFF::IMAGE_REL_ARM_ADDR32)
- relocSites.push_back(
- BaseReloc(address, llvm::COFF::IMAGE_REL_BASED_HIGHLOW));
- else if (ref->kindValue() == llvm::COFF::IMAGE_REL_ARM_MOV32T)
- relocSites.push_back(
- BaseReloc(address, llvm::COFF::IMAGE_REL_BASED_ARM_MOV32T));
- break;
- }
- }
- }
-}
-
-void AtomChunk::setVirtualAddress(uint32_t rva) {
- SectionChunk::setVirtualAddress(rva);
- for (AtomLayout *layout : _atomLayouts)
- layout->_virtualAddr += rva;
-}
-
-uint64_t AtomChunk::getAtomVirtualAddress(StringRef name) const {
- for (auto atomLayout : _atomLayouts)
- if (atomLayout->_atom->name() == name)
- return atomLayout->_virtualAddr;
- return 0;
-}
-
-void DataDirectoryChunk::setField(DataDirectoryIndex index, uint32_t addr,
- uint32_t size) {
- llvm::object::data_directory &dir = _data[index];
- dir.RelativeVirtualAddress = addr;
- dir.Size = size;
-}
-
-void DataDirectoryChunk::write(uint8_t *buffer) {
- std::memcpy(buffer, &_data[0], size());
-}
-
-uint64_t AtomChunk::memAlign() const {
- // ReaderCOFF propagated the section alignment to the first atom in
- // the section. We restore that here.
- if (_atomLayouts.empty())
- return _ctx.getPageSize();
- unsigned align = _ctx.getPageSize();
- for (auto atomLayout : _atomLayouts) {
- auto *atom = cast<const DefinedAtom>(atomLayout->_atom);
- align = std::max(align, (unsigned)atom->alignment().value);
- }
- return align;
-}
-
-void AtomChunk::appendAtom(const DefinedAtom *atom) {
- // Atom may have to be at a proper alignment boundary. If so, move the
- // pointer to make a room after the last atom before adding new one.
- _size = llvm::RoundUpToAlignment(_size, atom->alignment().value);
-
- // Create an AtomLayout and move the current pointer.
- auto *layout = new (_alloc) AtomLayout(atom, _size, _size);
- _atomLayouts.push_back(layout);
- _size += atom->size();
-}
-
-uint32_t AtomChunk::getDefaultCharacteristics(
- StringRef name, const std::vector<const DefinedAtom *> &atoms) const {
- const uint32_t code = llvm::COFF::IMAGE_SCN_CNT_CODE;
- const uint32_t execute = llvm::COFF::IMAGE_SCN_MEM_EXECUTE;
- const uint32_t read = llvm::COFF::IMAGE_SCN_MEM_READ;
- const uint32_t write = llvm::COFF::IMAGE_SCN_MEM_WRITE;
- const uint32_t data = llvm::COFF::IMAGE_SCN_CNT_INITIALIZED_DATA;
- const uint32_t bss = llvm::COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA;
- if (name == ".text")
- return code | execute | read;
- if (name == ".data")
- return data | read | write;
- if (name == ".rdata")
- return data | read;
- if (name == ".bss")
- return bss | read | write;
- assert(atoms.size() > 0);
- switch (atoms[0]->permissions()) {
- case DefinedAtom::permR__:
- return data | read;
- case DefinedAtom::permRW_:
- return data | read | write;
- case DefinedAtom::permR_X:
- return code | execute | read;
- case DefinedAtom::permRWX:
- return code | execute | read | write;
- default:
- llvm_unreachable("Unsupported permission");
- }
-}
-
-void SectionHeaderTableChunk::addSection(SectionChunk *chunk) {
- _sections.push_back(chunk);
-}
-
-uint64_t SectionHeaderTableChunk::size() const {
- return _sections.size() * sizeof(llvm::object::coff_section);
-}
-
-void SectionHeaderTableChunk::write(uint8_t *buffer) {
- uint64_t offset = 0;
- for (SectionChunk *chunk : _sections) {
- llvm::object::coff_section header = createSectionHeader(chunk);
- std::memcpy(buffer + offset, &header, sizeof(header));
- offset += sizeof(header);
- }
-}
-
-llvm::object::coff_section
-SectionHeaderTableChunk::createSectionHeader(SectionChunk *chunk) {
- llvm::object::coff_section header;
-
- // We have extended the COFF specification by allowing section names to be
- // greater than eight characters. We achieve this by adding the section names
- // to the string table. Binutils' linker, ld, performs the same trick.
- StringRef sectionName = chunk->getSectionName();
- std::memset(header.Name, 0, llvm::COFF::NameSize);
- if (uint32_t stringTableOffset = chunk->getStringTableOffset())
- sprintf(header.Name, "/%u", stringTableOffset);
- else
- std::strncpy(header.Name, sectionName.data(), sectionName.size());
-
- uint32_t characteristics = chunk->getCharacteristics();
- header.VirtualSize = chunk->size();
- header.VirtualAddress = chunk->getVirtualAddress();
- header.SizeOfRawData = chunk->onDiskSize();
- header.PointerToRelocations = 0;
- header.PointerToLinenumbers = 0;
- header.NumberOfRelocations = 0;
- header.NumberOfLinenumbers = 0;
- header.Characteristics = characteristics;
-
- if (characteristics & llvm::COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) {
- header.PointerToRawData = 0;
- } else {
- header.PointerToRawData = chunk->fileOffset();
- }
- return header;
-}
-
-/// Creates .reloc section content from the other sections. The content of
-/// .reloc is basically a list of relocation sites. The relocation sites are
-/// divided into blocks. Each block represents the base relocation for a 4K
-/// page.
-///
-/// By dividing 32 bit RVAs into blocks, COFF saves disk and memory space for
-/// the base relocation. A block consists of a 32 bit page RVA and 16 bit
-/// relocation entries which represent offsets in the page. That is a more
-/// compact representation than a simple vector of 32 bit RVAs.
-std::vector<uint8_t>
-BaseRelocChunk::createContents(ChunkVectorT &chunks) const {
- std::vector<uint8_t> contents;
- std::vector<BaseReloc> relocSites = listRelocSites(chunks);
-
- uint64_t mask = _ctx.getPageSize() - 1;
- parallel_sort(relocSites.begin(), relocSites.end(),
- [=](const BaseReloc &a, const BaseReloc &b) {
- return (a.addr & ~mask) < (b.addr & ~mask);
- });
-
- // Base relocations for the same memory page are grouped together
- // and passed to createBaseRelocBlock.
- for (auto it = relocSites.begin(), e = relocSites.end(); it != e;) {
- auto beginIt = it;
- uint64_t pageAddr = (beginIt->addr & ~mask);
- for (++it; it != e; ++it)
- if ((it->addr & ~mask) != pageAddr)
- break;
- const BaseReloc *begin = &*beginIt;
- const BaseReloc *end = begin + (it - beginIt);
- std::vector<uint8_t> block = createBaseRelocBlock(pageAddr, begin, end);
- contents.insert(contents.end(), block.begin(), block.end());
- }
- return contents;
-}
-
-// Returns a list of RVAs that needs to be relocated if the binary is loaded
-// at an address different from its preferred one.
-std::vector<BaseReloc>
-BaseRelocChunk::listRelocSites(ChunkVectorT &chunks) const {
- std::vector<BaseReloc> ret;
- for (auto &cp : chunks)
- if (AtomChunk *chunk = dyn_cast<AtomChunk>(&*cp))
- chunk->addBaseRelocations(ret);
- return ret;
-}
-
-// Create the content of a relocation block.
-std::vector<uint8_t>
-BaseRelocChunk::createBaseRelocBlock(uint64_t pageAddr,
- const BaseReloc *begin,
- const BaseReloc *end) const {
- // Relocation blocks should be padded with IMAGE_REL_I386_ABSOLUTE to be
- // aligned to a DWORD size boundary.
- uint32_t size = llvm::RoundUpToAlignment(
- sizeof(ulittle32_t) * 2 + sizeof(ulittle16_t) * (end - begin),
- sizeof(ulittle32_t));
- std::vector<uint8_t> contents(size);
- uint8_t *ptr = &contents[0];
-
- // The first four bytes is the page RVA.
- write32le(ptr, pageAddr);
- ptr += sizeof(ulittle32_t);
-
- // The second four bytes is the size of the block, including the the page
- // RVA and this size field.
- write32le(ptr, size);
- ptr += sizeof(ulittle32_t);
-
- uint64_t mask = _ctx.getPageSize() - 1;
- for (const BaseReloc *i = begin; i < end; ++i) {
- write16le(ptr, (i->type << 12) | (i->addr & mask));
- ptr += sizeof(ulittle16_t);
- }
- return contents;
-}
-
-} // end anonymous namespace
-
-class PECOFFWriter : public Writer {
-public:
- explicit PECOFFWriter(const PECOFFLinkingContext &context)
- : _ctx(context), _numSections(0), _imageSizeInMemory(_ctx.getPageSize()),
- _imageSizeOnDisk(0) {}
-
- template <class PEHeader> void build(const File &linkedFile);
- std::error_code writeFile(const File &linkedFile, StringRef path) override;
-
-private:
- void applyAllRelocations(uint8_t *bufferStart);
- void printAllAtomAddresses() const;
- void reorderSEHTableEntries(uint8_t *bufferStart);
- void reorderSEHTableEntriesX86(uint8_t *bufferStart);
- void reorderSEHTableEntriesX64(uint8_t *bufferStart);
-
- void addChunk(Chunk *chunk);
- void addSectionChunk(std::unique_ptr<SectionChunk> chunk,
- SectionHeaderTableChunk *table,
- StringTableChunk *stringTable);
- void setImageSizeOnDisk();
- uint64_t
- calcSectionSize(llvm::COFF::SectionCharacteristics sectionType) const;
-
- uint64_t calcSizeOfInitializedData() const {
- return calcSectionSize(llvm::COFF::IMAGE_SCN_CNT_INITIALIZED_DATA);
- }
-
- uint64_t calcSizeOfUninitializedData() const {
- return calcSectionSize(llvm::COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA);
- }
-
- uint64_t calcSizeOfCode() const {
- return calcSectionSize(llvm::COFF::IMAGE_SCN_CNT_CODE);
- }
-
- std::vector<std::unique_ptr<Chunk> > _chunks;
- const PECOFFLinkingContext &_ctx;
- uint32_t _numSections;
-
- // The size of the image in memory. This is initialized with
- // _ctx.getPageSize(), as the first page starting at ImageBase is usually left
- // unmapped. IIUC there's no technical reason to do so, but we'll follow that
- // convention so that we don't produce odd-looking binary.
- uint32_t _imageSizeInMemory;
-
- // The size of the image on disk. This is basically the sum of all chunks in
- // the output file with paddings between them.
- uint32_t _imageSizeOnDisk;
-
- // The map from atom to its relative virtual address.
- std::map<const Atom *, uint64_t> _atomRva;
-};
-
-StringRef customSectionName(const DefinedAtom *atom) {
- assert(atom->sectionChoice() == DefinedAtom::sectionCustomRequired);
- StringRef s = atom->customSectionName();
- size_t pos = s.find('$');
- return (pos == StringRef::npos) ? s : s.substr(0, pos);
-}
-
-StringRef chooseSectionByContent(const DefinedAtom *atom) {
- switch (atom->contentType()) {
- case DefinedAtom::typeCode:
- return ".text";
- case DefinedAtom::typeZeroFill:
- return ".bss";
- case DefinedAtom::typeData:
- if (atom->permissions() == DefinedAtom::permR__)
- return ".rdata";
- if (atom->permissions() == DefinedAtom::permRW_)
- return ".data";
- break;
- default:
- break;
- }
- llvm::errs() << "Atom: contentType=" << atom->contentType()
- << " permission=" << atom->permissions() << "\n";
- llvm::report_fatal_error("Failed to choose section based on content");
-}
-
-typedef std::map<StringRef, std::vector<const DefinedAtom *> > AtomVectorMap;
-
-void groupAtoms(const PECOFFLinkingContext &ctx, const File &file,
- AtomVectorMap &result) {
- for (const DefinedAtom *atom : file.defined()) {
- if (atom->sectionChoice() == DefinedAtom::sectionCustomRequired) {
- StringRef section = customSectionName(atom);
- result[ctx.getOutputSectionName(section)].push_back(atom);
- continue;
- }
- if (atom->sectionChoice() == DefinedAtom::sectionBasedOnContent) {
- StringRef section = chooseSectionByContent(atom);
- result[ctx.getOutputSectionName(section)].push_back(atom);
- continue;
- }
- llvm_unreachable("Unknown section choice");
- }
-}
-
-static const DefinedAtom *findTLSUsedSymbol(const PECOFFLinkingContext &ctx,
- const File &file) {
- StringRef sym = ctx.decorateSymbol("_tls_used");
- for (const DefinedAtom *atom : file.defined())
- if (atom->name() == sym)
- return atom;
- return nullptr;
-}
-
-// Create all chunks that consist of the output file.
-template <class PEHeader>
-void PECOFFWriter::build(const File &linkedFile) {
- AtomVectorMap atoms;
- groupAtoms(_ctx, linkedFile, atoms);
-
- // Create file chunks and add them to the list.
- auto *dosStub = new DOSStubChunk(_ctx);
- auto *peHeader = new PEHeaderChunk<PEHeader>(_ctx);
- auto *dataDirectory = new DataDirectoryChunk();
- auto *sectionTable = new SectionHeaderTableChunk();
- auto *stringTable = new StringTableChunk();
- addChunk(dosStub);
- addChunk(peHeader);
- addChunk(dataDirectory);
- addChunk(sectionTable);
- addChunk(stringTable);
-
- // Create sections and add the atoms to them.
- for (auto i : atoms) {
- StringRef sectionName = i.first;
- std::vector<const DefinedAtom *> &contents = i.second;
- std::unique_ptr<SectionChunk> section(
- new AtomChunk(_ctx, sectionName, contents));
- if (section->size() > 0)
- addSectionChunk(std::move(section), sectionTable, stringTable);
- }
-
- // Build atom to its RVA map.
- for (std::unique_ptr<Chunk> &cp : _chunks)
- if (AtomChunk *chunk = dyn_cast<AtomChunk>(&*cp))
- chunk->buildAtomRvaMap(_atomRva);
-
- // We know the addresses of all defined atoms that needs to be
- // relocated. So we can create the ".reloc" section which contains
- // all the relocation sites.
- if (_ctx.getBaseRelocationEnabled()) {
- std::unique_ptr<SectionChunk> baseReloc(new BaseRelocChunk(_chunks, _ctx));
- if (baseReloc->size()) {
- SectionChunk &ref = *baseReloc;
- addSectionChunk(std::move(baseReloc), sectionTable, stringTable);
- dataDirectory->setField(DataDirectoryIndex::BASE_RELOCATION_TABLE,
- ref.getVirtualAddress(), ref.size());
- }
- }
-
- setImageSizeOnDisk();
-
- if (stringTable->size()) {
- peHeader->setPointerToSymbolTable(stringTable->fileOffset());
- peHeader->setNumberOfSymbols(1);
- }
-
- for (std::unique_ptr<Chunk> &chunk : _chunks) {
- SectionChunk *section = dyn_cast<SectionChunk>(chunk.get());
- if (!section)
- continue;
- if (section->getSectionName() == ".text") {
- peHeader->setBaseOfCode(section->getVirtualAddress());
-
- // Find the virtual address of the entry point symbol if any. PECOFF spec
- // says that entry point for dll images is optional, in which case it must
- // be set to 0.
- if (_ctx.hasEntry()) {
- AtomChunk *atom = cast<AtomChunk>(section);
- uint64_t entryPointAddress =
- atom->getAtomVirtualAddress(_ctx.getEntrySymbolName());
-
- if (entryPointAddress) {
- // NOTE: ARM NT assumes a pure THUMB execution, so adjust the entry
- // point accordingly
- if (_ctx.getMachineType() == llvm::COFF::IMAGE_FILE_MACHINE_ARMNT)
- entryPointAddress |= 1;
- peHeader->setAddressOfEntryPoint(entryPointAddress);
- }
- } else {
- peHeader->setAddressOfEntryPoint(0);
- }
- }
- StringRef name = section->getSectionName();
- if (name == ".data") {
- peHeader->setBaseOfData(section->getVirtualAddress());
- continue;
- }
- DataDirectoryIndex ignore = DataDirectoryIndex(-1);
- DataDirectoryIndex idx = llvm::StringSwitch<DataDirectoryIndex>(name)
- .Case(".pdata", DataDirectoryIndex::EXCEPTION_TABLE)
- .Case(".rsrc", DataDirectoryIndex::RESOURCE_TABLE)
- .Case(".idata.a", DataDirectoryIndex::IAT)
- .Case(".idata.d", DataDirectoryIndex::IMPORT_TABLE)
- .Case(".edata", DataDirectoryIndex::EXPORT_TABLE)
- .Case(".loadcfg", DataDirectoryIndex::LOAD_CONFIG_TABLE)
- .Case(".didat.d", DataDirectoryIndex::DELAY_IMPORT_DESCRIPTOR)
- .Default(ignore);
- if (idx == ignore)
- continue;
- dataDirectory->setField(idx, section->getVirtualAddress(), section->size());
- }
-
- if (const DefinedAtom *atom = findTLSUsedSymbol(_ctx, linkedFile)) {
- dataDirectory->setField(DataDirectoryIndex::TLS_TABLE, _atomRva[atom],
- 0x18);
- }
-
- // Now that we know the size and file offset of sections. Set the file
- // header accordingly.
- peHeader->setSizeOfCode(calcSizeOfCode());
- peHeader->setSizeOfInitializedData(calcSizeOfInitializedData());
- peHeader->setSizeOfUninitializedData(calcSizeOfUninitializedData());
- peHeader->setNumberOfSections(_numSections);
- peHeader->setSizeOfImage(_imageSizeInMemory);
- peHeader->setSizeOfHeaders(sectionTable->fileOffset() + sectionTable->size());
-}
-
-std::error_code PECOFFWriter::writeFile(const File &linkedFile,
- StringRef path) {
- if (_ctx.is64Bit()) {
- this->build<llvm::object::pe32plus_header>(linkedFile);
- } else {
- this->build<llvm::object::pe32_header>(linkedFile);
- }
-
- uint64_t totalSize =
- _chunks.back()->fileOffset() + _chunks.back()->onDiskSize();
- std::unique_ptr<llvm::FileOutputBuffer> buffer;
- std::error_code ec = llvm::FileOutputBuffer::create(
- path, totalSize, buffer, llvm::FileOutputBuffer::F_executable);
- if (ec)
- return ec;
-
- for (std::unique_ptr<Chunk> &chunk : _chunks)
- chunk->write(buffer->getBufferStart() + chunk->fileOffset());
- applyAllRelocations(buffer->getBufferStart());
- reorderSEHTableEntries(buffer->getBufferStart());
- DEBUG(printAllAtomAddresses());
-
- if (_ctx.isDll())
- writeImportLibrary(_ctx);
-
- return buffer->commit();
-}
-
-/// Apply relocations to the output file buffer. This two pass. In the first
-/// pass, we visit all atoms to create a map from atom to its virtual
-/// address. In the second pass, we visit all relocation references to fix
-/// up addresses in the buffer.
-void PECOFFWriter::applyAllRelocations(uint8_t *bufferStart) {
- // Create the list of section start addresses. It's needed for
- // relocations of SECREL type.
- std::vector<uint64_t> sectionRva;
- for (auto &cp : _chunks)
- if (SectionChunk *section = dyn_cast<SectionChunk>(&*cp))
- sectionRva.push_back(section->getVirtualAddress());
-
- uint64_t base = _ctx.getBaseAddress();
- for (auto &cp : _chunks) {
- if (AtomChunk *chunk = dyn_cast<AtomChunk>(&*cp)) {
- switch (_ctx.getMachineType()) {
- default: llvm_unreachable("unsupported machine type");
- case llvm::COFF::IMAGE_FILE_MACHINE_ARMNT:
- chunk->applyRelocationsARM(bufferStart, _atomRva, sectionRva, base);
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_I386:
- chunk->applyRelocationsX86(bufferStart, _atomRva, sectionRva, base);
- break;
- case llvm::COFF::IMAGE_FILE_MACHINE_AMD64:
- chunk->applyRelocationsX64(bufferStart, _atomRva, sectionRva, base);
- break;
- }
- }
- }
-}
-
-/// Print atom VAs. Used only for debugging.
-void PECOFFWriter::printAllAtomAddresses() const {
- for (auto &cp : _chunks)
- if (AtomChunk *chunk = dyn_cast<AtomChunk>(&*cp))
- chunk->printAtomAddresses(_ctx.getBaseAddress());
-}
-
-void PECOFFWriter::reorderSEHTableEntries(uint8_t *bufferStart) {
- auto machineType = _ctx.getMachineType();
- if (machineType == llvm::COFF::IMAGE_FILE_MACHINE_I386)
- reorderSEHTableEntriesX86(bufferStart);
- if (machineType == llvm::COFF::IMAGE_FILE_MACHINE_AMD64)
- reorderSEHTableEntriesX64(bufferStart);
-}
-
-/// It seems that the entries in .sxdata must be sorted. This function is called
-/// after a COFF file image is created in memory and before it is written to
-/// disk. It is safe to reorder entries at this stage because the contents of
-/// the entries are RVAs and there's no reference to a .sxdata entry other than
-/// to the beginning of the section.
-void PECOFFWriter::reorderSEHTableEntriesX86(uint8_t *bufferStart) {
- for (std::unique_ptr<Chunk> &chunk : _chunks) {
- if (SectionChunk *section = dyn_cast<SectionChunk>(chunk.get())) {
- if (section->getSectionName() == ".sxdata") {
- int numEntries = section->size() / sizeof(ulittle32_t);
- ulittle32_t *begin = reinterpret_cast<ulittle32_t *>(bufferStart + section->fileOffset());
- ulittle32_t *end = begin + numEntries;
- std::sort(begin, end);
- }
- }
- }
-}
-
-/// The entries in .pdata must be sorted according to its BeginAddress field
-/// value. It's safe to do it because of the same reason as .sxdata.
-void PECOFFWriter::reorderSEHTableEntriesX64(uint8_t *bufferStart) {
- for (std::unique_ptr<Chunk> &chunk : _chunks) {
- if (SectionChunk *section = dyn_cast<SectionChunk>(chunk.get())) {
- if (section->getSectionName() != ".pdata")
- continue;
- int numEntries = section->size() / sizeof(coff_runtime_function_x64);
- coff_runtime_function_x64 *begin =
- (coff_runtime_function_x64 *)(bufferStart + section->fileOffset());
- coff_runtime_function_x64 *end = begin + numEntries;
- std::sort(begin, end, [](const coff_runtime_function_x64 &lhs,
- const coff_runtime_function_x64 &rhs) {
- return lhs.BeginAddress < rhs.BeginAddress;
- });
- }
- }
-}
-
-void PECOFFWriter::addChunk(Chunk *chunk) {
- _chunks.push_back(std::unique_ptr<Chunk>(chunk));
-}
-
-void PECOFFWriter::addSectionChunk(std::unique_ptr<SectionChunk> chunk,
- SectionHeaderTableChunk *table,
- StringTableChunk *stringTable) {
- table->addSection(chunk.get());
- _numSections++;
-
- StringRef sectionName = chunk->getSectionName();
- if (sectionName.size() > llvm::COFF::NameSize) {
- uint32_t stringTableOffset = stringTable->addSectionName(sectionName);
- chunk->setStringTableOffset(stringTableOffset);
- }
-
- // Compute and set the starting address of sections when loaded in
- // memory. They are different from positions on disk because sections need
- // to be sector-aligned on disk but page-aligned in memory.
- _imageSizeInMemory = llvm::RoundUpToAlignment(
- _imageSizeInMemory, chunk->memAlign());
- chunk->setVirtualAddress(_imageSizeInMemory);
- _imageSizeInMemory = llvm::RoundUpToAlignment(
- _imageSizeInMemory + chunk->size(), _ctx.getPageSize());
- _chunks.push_back(std::move(chunk));
-}
-
-void PECOFFWriter::setImageSizeOnDisk() {
- for (auto &chunk : _chunks) {
- // Compute and set the offset of the chunk in the output file.
- _imageSizeOnDisk =
- llvm::RoundUpToAlignment(_imageSizeOnDisk, chunk->align());
- chunk->setFileOffset(_imageSizeOnDisk);
- _imageSizeOnDisk += chunk->onDiskSize();
- }
-}
-
-uint64_t PECOFFWriter::calcSectionSize(
- llvm::COFF::SectionCharacteristics sectionType) const {
- uint64_t ret = 0;
- for (auto &cp : _chunks)
- if (SectionChunk *chunk = dyn_cast<SectionChunk>(&*cp))
- if (chunk->getCharacteristics() & sectionType)
- ret += chunk->onDiskSize();
- return ret;
-}
-
-} // end namespace pecoff
-
-std::unique_ptr<Writer> createWriterPECOFF(const PECOFFLinkingContext &info) {
- return std::unique_ptr<Writer>(new pecoff::PECOFFWriter(info));
-}
-
-} // end namespace lld
Modified: lld/trunk/test/COFF/alternatename.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/alternatename.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/alternatename.test (original)
+++ lld/trunk/test/COFF/alternatename.test Thu Aug 6 11:19:35 2015
@@ -1,14 +1,14 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /entry:foo /subsystem:console \
+# RUN: lld -flavor link /entry:foo /subsystem:console \
# RUN: /alternatename:foo=main /out:%t.exe %t.obj
-# RUN: lld -flavor link2 /entry:foo /subsystem:console \
+# RUN: lld -flavor link /entry:foo /subsystem:console \
# RUN: /alternatename:foo=main \
# RUN: /alternatename:foo=main \
# RUN: /alternatename:nosuchsym1=nosuchsym2 \
# RUN: /out:%t.exe %t.obj
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /entry:foo /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link /entry:foo /subsystem:console /out:%t.exe %t.obj
---
header:
Modified: lld/trunk/test/COFF/ar-comdat.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/ar-comdat.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/ar-comdat.test (original)
+++ lld/trunk/test/COFF/ar-comdat.test Thu Aug 6 11:19:35 2015
@@ -1,7 +1,7 @@
# RUN: yaml2obj %s > %t1.obj
# RUN: yaml2obj %s > %t2.obj
# RUN: llvm-lib /out:%t.lib %t1.obj %t2.obj
-# RUN: lld -flavor link2 /out:%t.exe /lldmap:%t.map /entry:main /subsystem:console %p/Inputs/ret42.obj %t.lib
+# RUN: lld -flavor link /out:%t.exe /lldmap:%t.map /entry:main /subsystem:console %p/Inputs/ret42.obj %t.lib
# RUN: FileCheck %s < %t.map
# CHECK-NOT: .lib
Modified: lld/trunk/test/COFF/armnt-blx23t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-blx23t.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-blx23t.test (original)
+++ lld/trunk/test/COFF/armnt-blx23t.test Thu Aug 6 11:19:35 2015
@@ -2,7 +2,7 @@
# RUN: yaml2obj < %s > %t.obj
# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link2 /entry:function /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link /entry:function /subsystem:console /out:%t.exe %t.obj
# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
# BEFORE: Disassembly of section .text:
Modified: lld/trunk/test/COFF/armnt-branch24t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-branch24t.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-branch24t.test (original)
+++ lld/trunk/test/COFF/armnt-branch24t.test Thu Aug 6 11:19:35 2015
@@ -2,7 +2,7 @@
# RUN: yaml2obj < %s > %t.obj
# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link2 /entry:function /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link /entry:function /subsystem:console /out:%t.exe %t.obj
# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
# BEFORE: Disassembly of section .text:
Modified: lld/trunk/test/COFF/armnt-entry-point.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-entry-point.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-entry-point.test (original)
+++ lld/trunk/test/COFF/armnt-entry-point.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %p/Inputs/armnt-executable.obj.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:mainCRTStartup /subsystem:console %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:mainCRTStartup /subsystem:console %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
CHECK: AddressOfEntryPoint: 0x1001
Modified: lld/trunk/test/COFF/armnt-imports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-imports.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-imports.test (original)
+++ lld/trunk/test/COFF/armnt-imports.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /subsystem:console %t.obj \
+# RUN: lld -flavor link /out:%t.exe /subsystem:console %t.obj \
# RUN: /entry:mainCRTStartup %p/Inputs/library.lib
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
Modified: lld/trunk/test/COFF/armnt-mov32t-exec.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-mov32t-exec.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-mov32t-exec.test (original)
+++ lld/trunk/test/COFF/armnt-mov32t-exec.test Thu Aug 6 11:19:35 2015
@@ -2,7 +2,7 @@
# RUN: yaml2obj < %s > %t.obj
# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link2 /out:%t.exe /subsystem:console /entry:get_function %t.obj
+# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:get_function %t.obj
# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
# BEFORE: Disassembly of section .text:
Modified: lld/trunk/test/COFF/armnt-movt32t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-movt32t.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-movt32t.test (original)
+++ lld/trunk/test/COFF/armnt-movt32t.test Thu Aug 6 11:19:35 2015
@@ -2,7 +2,7 @@
# RUN: yaml2obj < %s > %t.obj
# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link2 /entry:get_buffer /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link /entry:get_buffer /subsystem:console /out:%t.exe %t.obj
# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
# BEFORE: Disassembly of section .text:
Modified: lld/trunk/test/COFF/base.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/base.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/base.test (original)
+++ lld/trunk/test/COFF/base.test Thu Aug 6 11:19:35 2015
@@ -1,6 +1,6 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT-HEADER %s
# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=DEFAULT-TEXT %s
@@ -8,7 +8,7 @@
# DEFAULT-TEXT: Contents of section .text:
# DEFAULT-TEXT-NEXT: 1000 00000040 01000000
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /base:0x280000000
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /base:0x280000000
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BASE-HEADER %s
# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=BASE-TEXT %s
Modified: lld/trunk/test/COFF/baserel.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/baserel.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/baserel.test (original)
+++ lld/trunk/test/COFF/baserel.test Thu Aug 6 11:19:35 2015
@@ -1,9 +1,9 @@
# RUN: yaml2obj < %s > %t.obj
#
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck %s -check-prefix=BASEREL
#
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /fixed %t.obj %p/Inputs/std64.lib
+# RUN: lld -flavor link /out:%t.exe /entry:main /fixed %t.obj %p/Inputs/std64.lib
# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck %s -check-prefix=NOBASEREL
#
# BASEREL: BaseReloc [
@@ -43,11 +43,11 @@
# NOBASEREL: BaseReloc [
# NOBASEREL-NEXT: ]
#
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
# RUN: llvm-readobj -file-headers -sections %t.exe | FileCheck %s \
# RUN: --check-prefix=BASEREL-HEADER
#
-# RN: lld -flavor link2 /out:%t.exe /entry:main /fixed %t.obj %p/Inputs/std64.lib
+# RN: lld -flavor link /out:%t.exe /entry:main /fixed %t.obj %p/Inputs/std64.lib
# RN: llvm-readobj -file-headers %t.exe | FileCheck %s \
# RN: --check-prefix=NOBASEREL-HEADER
#
Modified: lld/trunk/test/COFF/common.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/common.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/common.test (original)
+++ lld/trunk/test/COFF/common.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj %t.obj
# RUN: llvm-objdump -d %t.exe | FileCheck %s
# Operands of B8 (MOV EAX) are common symbols
Modified: lld/trunk/test/COFF/conflict.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/conflict.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/conflict.test (original)
+++ lld/trunk/test/COFF/conflict.test Thu Aug 6 11:19:35 2015
@@ -1,11 +1,11 @@
# RUN: yaml2obj < %s > %t1.obj
# RUN: yaml2obj < %s > %t2.obj
-# RUN: not lld -flavor link2 /out:%t.exe %t1.obj %t2.obj >& %t.log
+# RUN: not lld -flavor link /out:%t.exe %t1.obj %t2.obj >& %t.log
# RUN: FileCheck %s < %t.log
# RUN: llvm-as -o %t.lto1.obj %S/Inputs/conflict.ll
# RUN: llvm-as -o %t.lto2.obj %S/Inputs/conflict.ll
-# RUN: not lld -flavor link2 /out:%t.exe %t.lto1.obj %t.lto2.obj >& %t.log
+# RUN: not lld -flavor link /out:%t.exe %t.lto1.obj %t.lto2.obj >& %t.log
# RUN: FileCheck %s < %t.log
# CHECK: duplicate symbol: foo {{.+}}1.obj and foo {{.+}}2.obj
Modified: lld/trunk/test/COFF/debug.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/debug.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/debug.test (original)
+++ lld/trunk/test/COFF/debug.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /subsystem:console %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /subsystem:console %t.obj
---
header:
Modified: lld/trunk/test/COFF/defparser.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/defparser.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/defparser.test (original)
+++ lld/trunk/test/COFF/defparser.test Thu Aug 6 11:19:35 2015
@@ -1,13 +1,13 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
# RUN: echo -e "LIBRARY foo\nEXPORTS ? @" > %t.def
-# RUN: not lld -flavor link2 /def:%t.def %t.obj
+# RUN: not lld -flavor link /def:%t.def %t.obj
# RUN: echo -e "LIBRARY foo\nHEAP abc" > %t.def
-# RUN: not lld -flavor link2 /def:%t.def %t.obj
+# RUN: not lld -flavor link /def:%t.def %t.obj
# RUN: echo -e "LIBRARY foo\nSTACK abc" > %t.def
-# RUN: not lld -flavor link2 /def:%t.def %t.obj
+# RUN: not lld -flavor link /def:%t.def %t.obj
# RUN: echo -e "foo" > %t.def
-# RUN: not lld -flavor link2 /def:%t.def %t.obj
+# RUN: not lld -flavor link /def:%t.def %t.obj
Modified: lld/trunk/test/COFF/delayimports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/delayimports.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/delayimports.test (original)
+++ lld/trunk/test/COFF/delayimports.test Thu Aug 6 11:19:35 2015
@@ -1,4 +1,4 @@
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /subsystem:console \
+# RUN: lld -flavor link /out:%t.exe /entry:main /subsystem:console \
# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib /delayload:std64.DLL \
# RUN: /alternatename:__delayLoadHelper2=main
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
Modified: lld/trunk/test/COFF/delayimports32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/delayimports32.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/delayimports32.test (original)
+++ lld/trunk/test/COFF/delayimports32.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
-# RUN: lld -flavor link2 %t.obj %p/Inputs/std32.lib /subsystem:console \
+# RUN: lld -flavor link %t.obj %p/Inputs/std32.lib /subsystem:console \
# RUN: /entry:main at 0 /alternatename:___delayLoadHelper2 at 8=_main at 0 \
# RUN: /debug /delayload:std32.dll /out:%t.exe
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
Modified: lld/trunk/test/COFF/dll.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/dll.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/dll.test (original)
+++ lld/trunk/test/COFF/dll.test Thu Aug 6 11:19:35 2015
@@ -2,7 +2,7 @@
# REQUIRES: winlib
# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
# RUN: /export:mangled
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=EXPORT %s
@@ -18,7 +18,7 @@ EXPORT-NEXT: 4 0x1010 exportfn3
# RUN: yaml2obj < %p/Inputs/export2.yaml > %t5.obj
# RUN: rm -f %t5.lib
# RUN: llvm-ar cru %t5.lib %t5.obj
-# RUN: lld -flavor link2 /out:%t5.dll /dll %t.obj %t5.lib /export:mangled2
+# RUN: lld -flavor link /out:%t5.dll /dll %t.obj %t5.lib /export:mangled2
# RUN: llvm-objdump -p %t5.dll | FileCheck -check-prefix=EXPORT2 %s
EXPORT2: Export Table:
@@ -29,7 +29,7 @@ EXPORT2-NEXT: 1 0x101c ?mangled
EXPORT2-NEXT: 2 0x1010 exportfn3
# RUN: llvm-as -o %t.lto.obj %p/Inputs/export.ll
-# RUN: lld -flavor link2 /out:%t.lto.dll /dll %t.lto.obj /export:exportfn1 /export:exportfn2
+# RUN: lld -flavor link /out:%t.lto.dll /dll %t.lto.obj /export:exportfn1 /export:exportfn2
# RUN: llvm-objdump -p %t.lto.dll | FileCheck -check-prefix=EXPORT-LTO %s
EXPORT-LTO: Export Table:
@@ -40,13 +40,13 @@ EXPORT-LTO-NEXT: 1 0x1010 expor
EXPORT-LTO-NEXT: 2 0x1020 exportfn2
EXPORT-LTO-NEXT: 3 0x1030 exportfn3
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /implib:%t2.lib \
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /implib:%t2.lib \
# RUN: /export:exportfn1 /export:exportfn2
# RUN: yaml2obj < %p/Inputs/import.yaml > %t2.obj
-# RUN: lld -flavor link2 /out:%t2.exe /entry:main %t2.obj %t2.lib
+# RUN: lld -flavor link /out:%t2.exe /entry:main %t2.obj %t2.lib
# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=IMPORT %s
-# RUN: lld -flavor link2 /out:%t2.lto.exe /entry:main %t2.obj %t.lto.lib
+# RUN: lld -flavor link /out:%t2.lto.exe /entry:main %t2.obj %t.lto.lib
# RUN: llvm-readobj -coff-imports %t2.lto.exe | FileCheck -check-prefix=IMPORT %s
IMPORT: Symbol: exportfn1
Modified: lld/trunk/test/COFF/driver.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/driver.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/driver.test (original)
+++ lld/trunk/test/COFF/driver.test Thu Aug 6 11:19:35 2015
@@ -1,3 +1,3 @@
-# RUN: not lld -flavor link2 nosuchfile.obj >& %t.log
+# RUN: not lld -flavor link nosuchfile.obj >& %t.log
# RUN: FileCheck -check-prefix=MISSING %s < %t.log
MISSING: nosuchfile.obj: {{[Nn]}}o such file or directory
Modified: lld/trunk/test/COFF/entry-inference.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/entry-inference.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/entry-inference.test (original)
+++ lld/trunk/test/COFF/entry-inference.test Thu Aug 6 11:19:35 2015
@@ -1,17 +1,17 @@
# RUN: sed -e s/ENTRYNAME/main/ %s | yaml2obj > %t.obj
-# RUN: not lld -flavor link2 /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: not lld -flavor link /out:%t.exe %t.obj > %t.log 2>&1
# RUN: FileCheck -check-prefix=MAIN %s < %t.log
# RUN: sed s/ENTRYNAME/wmain/ %s | yaml2obj > %t.obj
-# RUN: not lld -flavor link2 /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: not lld -flavor link /out:%t.exe %t.obj > %t.log 2>&1
# RUN: FileCheck -check-prefix=WMAIN %s < %t.log
# RUN: sed s/ENTRYNAME/WinMain/ %s | yaml2obj > %t.obj
-# RUN: not lld -flavor link2 /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: not lld -flavor link /out:%t.exe %t.obj > %t.log 2>&1
# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
# RUN: sed s/ENTRYNAME/wWinMain/ %s | yaml2obj > %t.obj
-# RUN: not lld -flavor link2 /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: not lld -flavor link /out:%t.exe %t.obj > %t.log 2>&1
# RUN: FileCheck -check-prefix=WWINMAIN %s < %t.log
# MAIN: <root>: undefined symbol: mainCRTStartup
Modified: lld/trunk/test/COFF/entry-inference2.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/entry-inference2.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/entry-inference2.test (original)
+++ lld/trunk/test/COFF/entry-inference2.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: not lld -flavor link2 /out:%t.exe %t.obj /verbose > %t.log 2>&1
+# RUN: not lld -flavor link /out:%t.exe %t.obj /verbose > %t.log 2>&1
# RUN: FileCheck %s < %t.log
# CHECK: Entry name inferred: WinMainCRTStartup
Modified: lld/trunk/test/COFF/entry-inference32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/entry-inference32.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/entry-inference32.test (original)
+++ lld/trunk/test/COFF/entry-inference32.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: not lld -flavor link2 /out:%t.exe %t.obj /verbose > %t.log 2>&1
+# RUN: not lld -flavor link /out:%t.exe %t.obj /verbose > %t.log 2>&1
# RUN: FileCheck %s < %t.log
# CHECK: Entry name inferred: _WinMainCRTStartup
Modified: lld/trunk/test/COFF/entry-mangled.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/entry-mangled.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/entry-mangled.test (original)
+++ lld/trunk/test/COFF/entry-mangled.test Thu Aug 6 11:19:35 2015
@@ -1,7 +1,7 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-as -o %t.lto.obj %S/Inputs/entry-mangled.ll
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.lto.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.lto.obj
---
header:
Modified: lld/trunk/test/COFF/entrylib.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/entrylib.ll?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/entrylib.ll (original)
+++ lld/trunk/test/COFF/entrylib.ll Thu Aug 6 11:19:35 2015
@@ -1,7 +1,7 @@
; RUN: llvm-as -o %t.obj %s
; RUN: rm -f %t.lib
; RUN: llvm-ar cru %t.lib %t.obj
-; RUN: lld -flavor link2 /out:%t.exe /entry:main %t.lib
+; RUN: lld -flavor link /out:%t.exe /entry:main %t.lib
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
Modified: lld/trunk/test/COFF/export.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/export.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/export.test (original)
+++ lld/trunk/test/COFF/export.test Thu Aug 6 11:19:35 2015
@@ -1,6 +1,6 @@
# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
#
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK1 %s
# REQUIRES: winlib
@@ -11,7 +11,7 @@ CHECK1-NEXT: 0 0
CHECK1-NEXT: 1 0x1008 exportfn1
CHECK1-NEXT: 2 0x1010 exportfn2
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1, at 5 /export:exportfn2
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1, at 5 /export:exportfn2
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK2 %s
CHECK2: Export Table:
@@ -26,7 +26,7 @@ CHECK2-NEXT: 5 0x1008 exportfn1
CHECK2-NEXT: 6 0x1010 exportfn2
CHECK2-NEXT: 7 0x1010 exportfn3
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1, at 5,noname /export:exportfn2
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1, at 5,noname /export:exportfn2
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK3 %s
CHECK3: Export Table:
@@ -40,7 +40,7 @@ CHECK3-NEXT: 4 0
CHECK3-NEXT: 5 0x1008
CHECK3-NEXT: 6 0x1010 exportfn2
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK4 %s
CHECK4: Export Table:
@@ -53,7 +53,7 @@ CHECK4-NEXT: 3 0x1010 f2
# RUN: echo "EXPORTS exportfn1 @3" > %t.def
# RUN: echo "fn2=exportfn2 @2" >> %t.def
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /def:%t.def
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /def:%t.def
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK5 %s
CHECK5: Export Table:
@@ -65,7 +65,7 @@ CHECK5-NEXT: 2 0x1010 fn2
CHECK5-NEXT: 3 0x1008 exportfn1
CHECK5-NEXT: 4 0x1010 exportfn3
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
# RUN: /export:exportfn1 /export:exportfn2, at 5 >& %t.log
# RUN: FileCheck -check-prefix=CHECK6 %s < %t.log
Modified: lld/trunk/test/COFF/export32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/export32.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/export32.test (original)
+++ lld/trunk/test/COFF/export32.test Thu Aug 6 11:19:35 2015
@@ -1,6 +1,6 @@
# RUN: yaml2obj < %s > %t.obj
#
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK1 %s
# REQUIRES: winlib
@@ -11,7 +11,7 @@
# CHECK1-NEXT: 1 0x1008 exportfn1
# CHECK1-NEXT: 2 0x1010 exportfn2
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1, at 5 \
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1, at 5 \
# RUN: /export:exportfn2 /export:mangled
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK2 %s
@@ -28,7 +28,7 @@
# CHECK2-NEXT: 7 0x1010 exportfn2
# CHECK2-NEXT: 8 0x1010 exportfn3
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1, at 5,noname /export:exportfn2
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1, at 5,noname /export:exportfn2
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK3 %s
# CHECK3: Export Table:
@@ -42,7 +42,7 @@
# CHECK3-NEXT: 5 0x1008
# CHECK3-NEXT: 6 0x1010 exportfn2
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK4 %s
# CHECK4: Export Table:
@@ -55,7 +55,7 @@
# RUN: echo "EXPORTS exportfn1 @3" > %t.def
# RUN: echo "fn2=exportfn2 @2" >> %t.def
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /def:%t.def
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /def:%t.def
# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK5 %s
# CHECK5: Export Table:
@@ -67,7 +67,7 @@
# CHECK5-NEXT: 3 0x1008 exportfn1
# CHECK5-NEXT: 4 0x1010 exportfn3
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
# RUN: /export:exportfn1 /export:exportfn2, at 5 >& %t.log
# RUN: FileCheck -check-prefix=CHECK6 %s < %t.log
Modified: lld/trunk/test/COFF/failifmismatch.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/failifmismatch.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/failifmismatch.test (original)
+++ lld/trunk/test/COFF/failifmismatch.test Thu Aug 6 11:19:35 2015
@@ -1,11 +1,11 @@
-# RUN: lld -flavor link2 /entry:main /subsystem:console /out:%t.exe \
+# RUN: lld -flavor link /entry:main /subsystem:console /out:%t.exe \
# RUN: %p/Inputs/ret42.obj
-# RUN: lld -flavor link2 /entry:main /subsystem:console /out:%t.exe \
+# RUN: lld -flavor link /entry:main /subsystem:console /out:%t.exe \
# RUN: %p/Inputs/ret42.obj /failifmismatch:k1=v1 /failifmismatch:k2=v1
-# RUN: lld -flavor link2 /entry:main /subsystem:console /out:%t.exe \
+# RUN: lld -flavor link /entry:main /subsystem:console /out:%t.exe \
# RUN: %p/Inputs/ret42.obj /failifmismatch:k1=v1 /failifmismatch:k1=v1
-# RUN: not lld -flavor link2 /entry:main /subsystem:console /out:%t.exe \
+# RUN: not lld -flavor link /entry:main /subsystem:console /out:%t.exe \
# RUN: %p/Inputs/ret42.obj /failifmismatch:k1=v1 /failifmismatch:k1=v2
Modified: lld/trunk/test/COFF/filetype.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/filetype.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/filetype.test (original)
+++ lld/trunk/test/COFF/filetype.test Thu Aug 6 11:19:35 2015
@@ -1,4 +1,4 @@
# Make sure input file type is detected by file magic and not by extension.
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.lib
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.lib
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.lib
Modified: lld/trunk/test/COFF/force.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/force.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/force.test (original)
+++ lld/trunk/test/COFF/force.test Thu Aug 6 11:19:35 2015
@@ -1,7 +1,7 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: not lld -flavor link2 /out:%t.exe /entry:main %t.obj >& %t.log
+# RUN: not lld -flavor link /out:%t.exe /entry:main %t.obj >& %t.log
# RUN: FileCheck %s < %t.log
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /force >& %t.log
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /force >& %t.log
# RUN: FileCheck %s < %t.log
# CHECK: .obj: undefined symbol: foo
Modified: lld/trunk/test/COFF/heap.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/heap.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/heap.test (original)
+++ lld/trunk/test/COFF/heap.test Thu Aug 6 11:19:35 2015
@@ -1,24 +1,24 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT %s
DEFAULT: SizeOfHeapReserve: 1048576
DEFAULT: SizeOfHeapCommit: 4096
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /heap:0x3000 %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /heap:0x3000 %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
# RUN: echo "HEAPSIZE 12288" > %t.def
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /def:%t.def %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
CHECK1: SizeOfHeapReserve: 12288
CHECK1: SizeOfHeapCommit: 4096
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /heap:0x5000,0x3000 %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /heap:0x5000,0x3000 %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
# RUN: echo "HEAPSIZE 20480,12288" > %t.def
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /def:%t.def %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
CHECK2: SizeOfHeapReserve: 20480
Modified: lld/trunk/test/COFF/hello32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/hello32.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/hello32.test (original)
+++ lld/trunk/test/COFF/hello32.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
-# RUN: lld -flavor link2 %t.obj %p/Inputs/std32.lib /subsystem:console \
+# RUN: lld -flavor link %t.obj %p/Inputs/std32.lib /subsystem:console \
# RUN: /entry:main at 0 /out:%t.exe
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORTS %s
Modified: lld/trunk/test/COFF/help.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/help.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/help.test (original)
+++ lld/trunk/test/COFF/help.test Thu Aug 6 11:19:35 2015
@@ -1,3 +1,3 @@
-# RUN: lld -flavor link2 /help | FileCheck %s
+# RUN: lld -flavor link /help | FileCheck %s
CHECK: OVERVIEW: LLVM Linker
Modified: lld/trunk/test/COFF/icf.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/icf.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/icf.test (original)
+++ lld/trunk/test/COFF/icf.test Thu Aug 6 11:19:35 2015
@@ -4,7 +4,7 @@
# RUN: yaml2obj < %p/Inputs/icf4.yaml > %t4.obj
# RUN: yaml2obj < %p/Inputs/icf5.yaml > %t5.obj
#
-# RUN: lld -flavor link2 /out:%t.exe /entry:main \
+# RUN: lld -flavor link /out:%t.exe /entry:main \
# RUN: %t1.obj %t2.obj %t3.obj %t4.obj %t5.obj \
# RUN: /opt:lldicf /include:icf2 /include:icf3 /include:icf4 /include:icf5 \
# RUN: /verbose >& %t.log
Modified: lld/trunk/test/COFF/imports-mangle.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/imports-mangle.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/imports-mangle.test (original)
+++ lld/trunk/test/COFF/imports-mangle.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /opt:noref /entry:main \
+# RUN: lld -flavor link /out:%t.exe /opt:noref /entry:main \
# RUN: %t.obj %p/Inputs/imports-mangle.lib
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
Modified: lld/trunk/test/COFF/imports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/imports.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/imports.test (original)
+++ lld/trunk/test/COFF/imports.test Thu Aug 6 11:19:35 2015
@@ -1,11 +1,11 @@
# Verify that the lld can handle .lib files and emit .idata sections.
#
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /subsystem:console \
+# RUN: lld -flavor link /out:%t.exe /entry:main /subsystem:console \
# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib
# RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=TEXT %s
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /subsystem:console \
+# RUN: lld -flavor link /out:%t.exe /entry:main /subsystem:console \
# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib /include:ExitProcess
# RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=TEXT %s
# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
Modified: lld/trunk/test/COFF/include.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/include.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/include.test (original)
+++ lld/trunk/test/COFF/include.test Thu Aug 6 11:19:35 2015
@@ -1,11 +1,11 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /verbose >& %t.log
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /verbose >& %t.log
### FileCheck doesn't like empty input, so write something.
# RUN: echo dummy >> %t.log
# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /verbose /include:unused >& %t.log
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /verbose /include:unused >& %t.log
# RUN: echo dummy >> %t.log
# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
Modified: lld/trunk/test/COFF/include2.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/include2.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/include2.test (original)
+++ lld/trunk/test/COFF/include2.test Thu Aug 6 11:19:35 2015
@@ -4,7 +4,7 @@
# RUN: rm -f %t2.lib %t3.lib
# RUN: llvm-ar cru %t2.lib %t2.obj
# RUN: llvm-ar cru %t3.lib %t3.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t1.obj %t2.lib %t3.lib /verbose >& %t.log
+# RUN: lld -flavor link /out:%t.exe /entry:main %t1.obj %t2.lib %t3.lib /verbose >& %t.log
# RUN: FileCheck %s < %t.log
CHECK: include2.test.tmp1.obj
Modified: lld/trunk/test/COFF/internal.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/internal.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/internal.test (original)
+++ lld/trunk/test/COFF/internal.test Thu Aug 6 11:19:35 2015
@@ -3,7 +3,7 @@
# RUN: yaml2obj < %s > %t1.obj
# RUN: yaml2obj < %s > %t2.obj
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t3.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t1.obj %t2.obj %t3.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t1.obj %t2.obj %t3.obj
---
header:
Modified: lld/trunk/test/COFF/largeaddressaware.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/largeaddressaware.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/largeaddressaware.test (original)
+++ lld/trunk/test/COFF/largeaddressaware.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
-# RUN: lld -flavor link2 %t.obj %p/Inputs/std32.lib /subsystem:console \
+# RUN: lld -flavor link %t.obj %p/Inputs/std32.lib /subsystem:console \
# RUN: /entry:main at 0 /out:%t.exe /largeaddressaware
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
Modified: lld/trunk/test/COFF/libpath.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/libpath.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/libpath.test (original)
+++ lld/trunk/test/COFF/libpath.test Thu Aug 6 11:19:35 2015
@@ -3,14 +3,14 @@
# RUN: cp %p/Inputs/std64.lib %t/b/
# RUN: cp %p/Inputs/std64.lib %t/c/
-# RUN: env LIB=%t/a lld -flavor link2 /out:%t.exe /entry:main /verbose \
+# RUN: env LIB=%t/a lld -flavor link /out:%t.exe /entry:main /verbose \
# RUN: std64.lib /subsystem:console %p/Inputs/hello64.obj \
# RUN: /libpath:%t/b /libpath:%t/c > %t.log
# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
CHECK1: b{{[/\\]}}std64.lib
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /verbose \
+# RUN: lld -flavor link /out:%t.exe /entry:main /verbose \
# RUN: std64.lib /subsystem:console %p/Inputs/hello64.obj \
# RUN: /libpath:%t/a /libpath:%t/b /libpath:%t/c > %t.log
# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
Modified: lld/trunk/test/COFF/linkenv.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/linkenv.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/linkenv.test (original)
+++ lld/trunk/test/COFF/linkenv.test Thu Aug 6 11:19:35 2015
@@ -1,4 +1,4 @@
-# RUN: env LINK=-help lld -flavor link2 > %t.log
+# RUN: env LINK=-help lld -flavor link > %t.log
# RUN: FileCheck %s < %t.log
CHECK: OVERVIEW: LLVM Linker
Modified: lld/trunk/test/COFF/lldmap.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lldmap.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/lldmap.test (original)
+++ lld/trunk/test/COFF/lldmap.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /lldmap:%t.map %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /lldmap:%t.map %t.obj
# RUN: FileCheck %s < %t.map
# CHECK: .obj:
Modified: lld/trunk/test/COFF/loadcfg.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/loadcfg.ll?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/loadcfg.ll (original)
+++ lld/trunk/test/COFF/loadcfg.ll Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
; RUN: llvm-as -o %t.obj %s
-; RUN: lld -flavor link2 /out:%t.exe %t.obj /entry:main /subsystem:console
+; RUN: lld -flavor link /out:%t.exe %t.obj /entry:main /subsystem:console
; RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
; CHECK: LoadConfigTableRVA: 0x1000
Modified: lld/trunk/test/COFF/loadcfg.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/loadcfg.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/loadcfg.test (original)
+++ lld/trunk/test/COFF/loadcfg.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe %t.obj /entry:main /subsystem:console
+# RUN: lld -flavor link /out:%t.exe %t.obj /entry:main /subsystem:console
# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
# CHECK: LoadConfigTableRVA: 0x1008
Modified: lld/trunk/test/COFF/loadcfg32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/loadcfg32.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/loadcfg32.test (original)
+++ lld/trunk/test/COFF/loadcfg32.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe %t.obj /entry:main /subsystem:console
+# RUN: lld -flavor link /out:%t.exe %t.obj /entry:main /subsystem:console
# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
# CHECK: LoadConfigTableRVA: 0x1000
Modified: lld/trunk/test/COFF/locally-imported.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/locally-imported.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/locally-imported.test (original)
+++ lld/trunk/test/COFF/locally-imported.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-objdump -s %t.exe | FileCheck %s
# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck -check-prefix=BASEREL %s
Modified: lld/trunk/test/COFF/locally-imported32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/locally-imported32.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/locally-imported32.test (original)
+++ lld/trunk/test/COFF/locally-imported32.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-objdump -s %t.exe | FileCheck %s
# CHECK: Contents of section .text:
Modified: lld/trunk/test/COFF/long-section-name.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/long-section-name.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/long-section-name.test (original)
+++ lld/trunk/test/COFF/long-section-name.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /debug /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /debug /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -sections %t.exe | FileCheck %s
# CHECK: Name: .data_long_section_name
Modified: lld/trunk/test/COFF/lto-chkstk.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lto-chkstk.ll?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/lto-chkstk.ll (original)
+++ lld/trunk/test/COFF/lto-chkstk.ll Thu Aug 6 11:19:35 2015
@@ -2,7 +2,7 @@
; RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/lto-chkstk-foo.obj %S/Inputs/lto-chkstk-foo.s
; RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/lto-chkstk-chkstk.obj %S/Inputs/lto-chkstk-chkstk.s
; RUN: llvm-ar cru %t.lib %T/lto-chkstk-chkstk.obj
-; RUN: lld -flavor link2 /out:%t.exe /entry:main /subsystem:console %t.obj %T/lto-chkstk-foo.obj %t.lib
+; RUN: lld -flavor link /out:%t.exe /entry:main /subsystem:console %t.obj %T/lto-chkstk-foo.obj %t.lib
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
Modified: lld/trunk/test/COFF/lto-comdat.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lto-comdat.ll?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/lto-comdat.ll (original)
+++ lld/trunk/test/COFF/lto-comdat.ll Thu Aug 6 11:19:35 2015
@@ -10,24 +10,24 @@
; RUN: rm -f %T/comdat.lib
; RUN: llvm-ar cru %T/comdat.lib %T/comdat1.obj %T/comdat2.obj
-; RUN: lld -flavor link2 /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat1.lto.obj %T/comdat2.lto.obj
+; RUN: lld -flavor link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat1.lto.obj %T/comdat2.lto.obj
; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-11 %s
; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-11 %s
-; RUN: lld -flavor link2 /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat.lto.lib
+; RUN: lld -flavor link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat.lto.lib
; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-11 %s
; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-11 %s
-; RUN: lld -flavor link2 /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.obj %T/comdat1.lto.obj %T/comdat2.lto.obj
+; RUN: lld -flavor link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.obj %T/comdat1.lto.obj %T/comdat2.lto.obj
; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-01 %s
; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-01 %s
-; RUN: lld -flavor link2 /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.obj %T/comdat.lto.lib
+; RUN: lld -flavor link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.obj %T/comdat.lto.lib
; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-01 %s
; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-01 %s
-; RUN: lld -flavor link2 /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat1.obj %T/comdat2.obj
+; RUN: lld -flavor link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat1.obj %T/comdat2.obj
; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-10 %s
; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-10 %s
-; RUN: lld -flavor link2 /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat.lib
+; RUN: lld -flavor link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat.lib
; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-10 %s
; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-10 %s
Modified: lld/trunk/test/COFF/lto-linker-opts.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lto-linker-opts.ll?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/lto-linker-opts.ll (original)
+++ lld/trunk/test/COFF/lto-linker-opts.ll Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
; RUN: llvm-as -o %T/lto-linker-opts.obj %s
-; RUN: env LIB=%S/Inputs lld -flavor link2 /out:%T/lto-linker-opts.exe /entry:main /subsystem:console %T/lto-linker-opts.obj
+; RUN: env LIB=%S/Inputs lld -flavor link /out:%T/lto-linker-opts.exe /entry:main /subsystem:console %T/lto-linker-opts.obj
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
Modified: lld/trunk/test/COFF/lto-new-symbol.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lto-new-symbol.ll?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/lto-new-symbol.ll (original)
+++ lld/trunk/test/COFF/lto-new-symbol.ll Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
; RUN: llvm-as -o %t.obj %s
-; RUN: lld -flavor link2 /out:%t.exe /entry:foo /subsystem:console %t.obj
+; RUN: lld -flavor link /out:%t.exe /entry:foo /subsystem:console %t.obj
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"
Modified: lld/trunk/test/COFF/lto.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lto.ll?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/lto.ll (original)
+++ lld/trunk/test/COFF/lto.ll Thu Aug 6 11:19:35 2015
@@ -8,24 +8,24 @@
; RUN: rm -f %T/foo.lib
; RUN: llvm-ar cru %T/foo.lib %T/foo.obj
-; RUN: lld -flavor link2 /out:%T/main.exe /entry:main /include:f2 /subsystem:console %T/main.lto.obj %T/foo.lto.obj
+; RUN: lld -flavor link /out:%T/main.exe /entry:main /include:f2 /subsystem:console %T/main.lto.obj %T/foo.lto.obj
; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-11 %s
; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-11 %s
-; RUN: lld -flavor link2 /out:%T/main.exe /entry:main /include:f2 /subsystem:console %T/main.lto.obj %T/foo.lto.lib /verbose 2>&1 | FileCheck -check-prefix=VERBOSE %s
+; RUN: lld -flavor link /out:%T/main.exe /entry:main /include:f2 /subsystem:console %T/main.lto.obj %T/foo.lto.lib /verbose 2>&1 | FileCheck -check-prefix=VERBOSE %s
; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-11 %s
; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-11 %s
-; RUN: lld -flavor link2 /out:%T/main.exe /entry:main /subsystem:console %T/main.obj %T/foo.lto.obj
+; RUN: lld -flavor link /out:%T/main.exe /entry:main /subsystem:console %T/main.obj %T/foo.lto.obj
; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-01 %s
; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-01 %s
-; RUN: lld -flavor link2 /out:%T/main.exe /entry:main /subsystem:console %T/main.obj %T/foo.lto.lib
+; RUN: lld -flavor link /out:%T/main.exe /entry:main /subsystem:console %T/main.obj %T/foo.lto.lib
; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-01 %s
; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-01 %s
-; RUN: lld -flavor link2 /out:%T/main.exe /entry:main /subsystem:console %T/main.lto.obj %T/foo.obj
+; RUN: lld -flavor link /out:%T/main.exe /entry:main /subsystem:console %T/main.lto.obj %T/foo.obj
; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-10 %s
; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-10 %s
-; RUN: lld -flavor link2 /out:%T/main.exe /entry:main /subsystem:console %T/main.lto.obj %T/foo.lib
+; RUN: lld -flavor link /out:%T/main.exe /entry:main /subsystem:console %T/main.lto.obj %T/foo.lib
; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-10 %s
; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-10 %s
Modified: lld/trunk/test/COFF/machine.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/machine.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/machine.test (original)
+++ lld/trunk/test/COFF/machine.test Thu Aug 6 11:19:35 2015
@@ -1,29 +1,29 @@
# RUN: yaml2obj %p/Inputs/machine-x64.yaml > %t.obj
-# RUN: lld -flavor link2 /entry:main /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link /entry:main /subsystem:console /out:%t.exe %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=AMD64 %s
-# RUN: lld -flavor link2 /entry:main /subsystem:console /machine:x64 \
+# RUN: lld -flavor link /entry:main /subsystem:console /machine:x64 \
# RUN: /out:%t.exe %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=AMD64 %s
AMD64: Machine: IMAGE_FILE_MACHINE_AMD64
# RUN: yaml2obj %p/Inputs/machine-x86.yaml > %t.obj
-# RUN: lld -flavor link2 /entry:main /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link /entry:main /subsystem:console /out:%t.exe %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=I386 %s
-# RUN: lld -flavor link2 /entry:main /subsystem:console /machine:x86 \
+# RUN: lld -flavor link /entry:main /subsystem:console /machine:x86 \
# RUN: /out:%t.exe %t.obj /fixed
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=I386 %s
I386: Machine: IMAGE_FILE_MACHINE_I386
# RUN: yaml2obj %p/Inputs/machine-x64.yaml > %t.obj
-# RUN: not lld -flavor link2 /entry:main /subsystem:console /machine:x86 \
+# RUN: not lld -flavor link /entry:main /subsystem:console /machine:x86 \
# RUN: /out:%t.exe %t.obj /fixed >& %t.log
# RUN: FileCheck -check-prefix=INCOMPAT %s < %t.log
# RUN: yaml2obj %p/Inputs/machine-x86.yaml > %t1.obj
# RUN: sed -e s/main/foo/ %p/Inputs/machine-x64.yaml | yaml2obj > %t2.obj
-# RUN: not lld -flavor link2 /entry:main /subsystem:console /out:%t.exe \
+# RUN: not lld -flavor link /entry:main /subsystem:console /out:%t.exe \
# RUN: %t1.obj %t2.obj >& %t.log
# RUN: FileCheck -check-prefix=INCOMPAT %s < %t.log
Modified: lld/trunk/test/COFF/manifest.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/manifest.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/manifest.test (original)
+++ lld/trunk/test/COFF/manifest.test Thu Aug 6 11:19:35 2015
@@ -1,6 +1,6 @@
# RUN: yaml2obj %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: FileCheck -check-prefix=MANIFEST %s < %t.exe.manifest
MANIFEST: <?xml version="1.0" standalone="yes"?>
@@ -15,7 +15,7 @@ MANIFEST: </security>
MANIFEST: </trustInfo>
MANIFEST: </assembly>
-# RUN: lld -flavor link2 /out:%t.exe /entry:main \
+# RUN: lld -flavor link /out:%t.exe /entry:main \
# RUN: /manifestuac:"level='requireAdministrator' uiAccess='true'" %t.obj
# RUN: FileCheck -check-prefix=UAC %s < %t.exe.manifest
@@ -31,7 +31,7 @@ UAC: </security>
UAC: </trustInfo>
UAC: </assembly>
-# RUN: lld -flavor link2 /out:%t.exe /entry:main \
+# RUN: lld -flavor link /out:%t.exe /entry:main \
# RUN: /manifestdependency:"foo='bar'" %t.obj
# RUN: FileCheck -check-prefix=DEPENDENCY %s < %t.exe.manifest
@@ -52,7 +52,7 @@ DEPENDENCY: </dependentAssembly>
DEPENDENCY: </dependency>
DEPENDENCY: </assembly>
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /manifestuac:no %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /manifestuac:no %t.obj
# RUN: FileCheck -check-prefix=NOUAC %s < %t.exe.manifest
NOUAC: <?xml version="1.0" standalone="yes"?>
Modified: lld/trunk/test/COFF/merge.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/merge.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/merge.test (original)
+++ lld/trunk/test/COFF/merge.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /subsystem:console /force \
+# RUN: lld -flavor link /out:%t.exe /entry:main /subsystem:console /force \
# RUN: /merge:.foo=.abc /merge:.bar=.def %t.obj /debug
# RUN: llvm-readobj -sections %t.exe | FileCheck %s
Modified: lld/trunk/test/COFF/nodefaultlib.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/nodefaultlib.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/nodefaultlib.test (original)
+++ lld/trunk/test/COFF/nodefaultlib.test Thu Aug 6 11:19:35 2015
@@ -1,20 +1,20 @@
# RUN: cp %p/Inputs/hello64.obj %T
# RUN: cp %p/Inputs/std64.lib %T
-# RUN: not lld -flavor link2 /out:%t.exe /entry:main /subsystem:console \
+# RUN: not lld -flavor link /out:%t.exe /entry:main /subsystem:console \
# RUN: hello64.obj /defaultlib:std64.lib >& %t.log
# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
-# RUN: not lld -flavor link2 /out:%t.exe /entry:main /subsystem:console \
+# RUN: not lld -flavor link /out:%t.exe /entry:main /subsystem:console \
# RUN: hello64 /defaultlib:std64.lib >& %t.log
# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
-# RUN: lld -flavor link2 /libpath:%T /out:%t.exe /entry:main \
+# RUN: lld -flavor link /libpath:%T /out:%t.exe /entry:main \
# RUN: /subsystem:console hello64.obj /defaultlib:std64.lib \
# RUN: /nodefaultlib:std64.lib >& %t.log || true
# RUN: FileCheck -check-prefix=CHECK3 %s < %t.log
-# RUN: lld -flavor link2 /libpath:%T /out:%t.exe /entry:main \
+# RUN: lld -flavor link /libpath:%T /out:%t.exe /entry:main \
# RUN: /subsystem:console hello64.obj /defaultlib:std64 \
# RUN: /nodefaultlib:std64.lib >& %t.log || true
# RUN: FileCheck -check-prefix=CHECK3 %s < %t.log
@@ -23,8 +23,8 @@ CHECK1: hello64.obj: {{[Nn]}}o such file
CHECK2: hello64: {{[Nn]}}o such file or directory
CHECK3: hello64.obj: undefined symbol: MessageBoxA
-# RUN: lld -flavor link2 /libpath:%T /out:%t.exe /entry:main \
+# RUN: lld -flavor link /libpath:%T /out:%t.exe /entry:main \
# RUN: /subsystem:console hello64.obj /defaultlib:std64.lib
-# RUN: env LIB=%T lld -flavor link2 /out:%t.exe /entry:main \
+# RUN: env LIB=%T lld -flavor link /out:%t.exe /entry:main \
# RUN: /subsystem:console hello64.obj /defaultlib:std64.lib
Modified: lld/trunk/test/COFF/noentry.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/noentry.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/noentry.test (original)
+++ lld/trunk/test/COFF/noentry.test Thu Aug 6 11:19:35 2015
@@ -1,9 +1,9 @@
# REQUIRES: winres
# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj
+# RUN: lld -flavor link /out:%t.dll /dll %t.obj
# RUN: llvm-readobj -file-headers %t.dll | FileCheck -check-prefix=ENTRY %s
-# RUN: lld -flavor link2 /out:%t.dll /dll /noentry %t.obj
+# RUN: lld -flavor link /out:%t.dll /dll /noentry %t.obj
# RUN: llvm-readobj -file-headers %t.dll | FileCheck -check-prefix=NOENTRY %s
ENTRY: AddressOfEntryPoint: 0x1000
Modified: lld/trunk/test/COFF/opt.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/opt.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/opt.test (original)
+++ lld/trunk/test/COFF/opt.test Thu Aug 6 11:19:35 2015
@@ -1,12 +1,12 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj \
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj \
# RUN: /verbose >& %t.log
### FileCheck doesn't like empty input, so write something.
# RUN: echo dummy >> %t.log
# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj \
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj \
# RUN: /verbose /opt:noref >& %t.log
# RUN: echo dummy >> %t.log
# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
Modified: lld/trunk/test/COFF/options.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/options.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/options.test (original)
+++ lld/trunk/test/COFF/options.test Thu Aug 6 11:19:35 2015
@@ -1,51 +1,51 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BIND %s
-# RUN: lld -flavor link2 /allowbind /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /allowbind /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BIND %s
BIND-NOT: IMAGE_DLL_CHARACTERISTICS_NO_BIND
-# RUN: lld -flavor link2 /allowbind:no /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /allowbind:no /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOBIND %s
NOBIND: IMAGE_DLL_CHARACTERISTICS_NO_BIND
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ISO %s
-# RUN: lld -flavor link2 /allowisolation /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /allowisolation /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ISO %s
ISO-NOT: IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION
-# RUN: lld -flavor link2 /allowisolation:no /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /allowisolation:no /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOISO %s
NOISO: IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ENT %s
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /highentropyva %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /highentropyva %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ENT %s
ENT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
-# RUN: lld -flavor link2 /out:%t.exe /highentropyva:no /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /highentropyva:no /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOENT %s
NOENT-NOT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NXCOMPAT %s
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /nxcompat %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /nxcompat %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NXCOMPAT %s
NXCOMPAT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT
-# RUN: lld -flavor link2 /out:%t.exe /nxcompat:no /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /nxcompat:no /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NONXCOMPAT %s
NONXCOMPAT-NOT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=TSAWARE %s
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /tsaware %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /tsaware %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=TSAWARE %s
TSAWARE: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE
-# RUN: lld -flavor link2 /tsaware:no /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /tsaware:no /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOTSAWARE %s
NOTSAWARE-NOT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE
Modified: lld/trunk/test/COFF/order.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/order.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/order.test (original)
+++ lld/trunk/test/COFF/order.test Thu Aug 6 11:19:35 2015
@@ -4,7 +4,7 @@
# RUN: rm -f %t2.lib %t3.lib
# RUN: llvm-ar cru %t2.lib %t2.obj
# RUN: llvm-ar cru %t3.lib %t3.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main \
+# RUN: lld -flavor link /out:%t.exe /entry:main \
# RUN: %t1.obj %t2.lib %t3.obj %t3.lib /verbose >& %t.log
# RUN: FileCheck %s < %t.log
Modified: lld/trunk/test/COFF/out.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/out.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/out.test (original)
+++ lld/trunk/test/COFF/out.test Thu Aug 6 11:19:35 2015
@@ -5,9 +5,9 @@
# RUN: cp %t.obj %T/out/tmp/out2
# RUN: cp %t.obj %T/out/tmp/out3.xyz
-# RUN: lld -flavor link2 /entry:main %T/out/out1.obj
-# RUN: lld -flavor link2 /entry:main %T/out/tmp/out2
-# RUN: lld -flavor link2 /entry:main %T/out/tmp/out3.xyz
+# RUN: lld -flavor link /entry:main %T/out/out1.obj
+# RUN: lld -flavor link /entry:main %T/out/tmp/out2
+# RUN: lld -flavor link /entry:main %T/out/tmp/out3.xyz
# RUN: llvm-readobj out1.exe | FileCheck %s
# RUN: llvm-readobj out2.exe | FileCheck %s
Modified: lld/trunk/test/COFF/reloc-arm.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/reloc-arm.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/reloc-arm.test (original)
+++ lld/trunk/test/COFF/reloc-arm.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-objdump -s %t.exe | FileCheck %s
# CHECK: .text:
Modified: lld/trunk/test/COFF/reloc-x64.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/reloc-x64.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/reloc-x64.test (original)
+++ lld/trunk/test/COFF/reloc-x64.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-objdump -d %t.exe | FileCheck %s
# CHECK: .text:
Modified: lld/trunk/test/COFF/reloc-x86.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/reloc-x86.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/reloc-x86.test (original)
+++ lld/trunk/test/COFF/reloc-x86.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /base:0x400000 %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /base:0x400000 %t.obj
# RUN: llvm-objdump -d %t.exe | FileCheck %s
# CHECK: .text:
Modified: lld/trunk/test/COFF/resource.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/resource.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/resource.test (original)
+++ lld/trunk/test/COFF/resource.test Thu Aug 6 11:19:35 2015
@@ -1,7 +1,7 @@
# REQUIRES: winres
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj %p/Inputs/resource.res
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj %p/Inputs/resource.res
# Check if the binary contains UTF-16LE string "Hello" copied from resource.res.
# RUN: FileCheck --check-prefix=EXE %s < %t.exe
Modified: lld/trunk/test/COFF/responsefile.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/responsefile.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/responsefile.test (original)
+++ lld/trunk/test/COFF/responsefile.test Thu Aug 6 11:19:35 2015
@@ -1,7 +1,7 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
# RUN: echo /out:%t.exe /entry:main %t.obj > %t.rsp
-# RUN: lld -flavor link2 @%t.rsp /heap:0x3000
+# RUN: lld -flavor link @%t.rsp /heap:0x3000
# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
CHECK: SizeOfHeapReserve: 12288
Modified: lld/trunk/test/COFF/safeseh.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/safeseh.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/safeseh.test (original)
+++ lld/trunk/test/COFF/safeseh.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: sed s/FEAT_VALUE/1/ %s | yaml2obj > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /subsystem:console /entry:main /safeseh %t.obj
+# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main /safeseh %t.obj
# RUN: sed s/FEAT_VALUE/0/ %s | yaml2obj > %t.obj
# RUN: not lld -flavor link2 /out:%t.exe /subsystem:console /entry:main \
Modified: lld/trunk/test/COFF/seh.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/seh.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/seh.test (original)
+++ lld/trunk/test/COFF/seh.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /subsystem:console /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main %t.obj
# RUN: llvm-objdump -s %t.exe | FileCheck %s
# CHECK: Contents of section .rdata:
Modified: lld/trunk/test/COFF/sort-debug.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/sort-debug.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/sort-debug.test (original)
+++ lld/trunk/test/COFF/sort-debug.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /debug /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /debug /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -sections %t.exe | FileCheck %s
# CHECK: Name: .text
Modified: lld/trunk/test/COFF/stack.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/stack.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/stack.test (original)
+++ lld/trunk/test/COFF/stack.test Thu Aug 6 11:19:35 2015
@@ -1,24 +1,24 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT %s
DEFAULT: SizeOfStackReserve: 1048576
DEFAULT: SizeOfStackCommit: 4096
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /stack:0x3000
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /stack:0x3000
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
# RUN: echo "STACKSIZE 12288" > %t.def
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /def:%t.def %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
CHECK1: SizeOfStackReserve: 12288
CHECK1: SizeOfStackCommit: 4096
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /stack:0x5000,0x3000
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /stack:0x5000,0x3000
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
# RUN: echo "STACKSIZE 20480,12288" > %t.def
-# RUN: lld -flavor link2 /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main /def:%t.def %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
CHECK2: SizeOfStackReserve: 20480
Modified: lld/trunk/test/COFF/subsystem-inference.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/subsystem-inference.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/subsystem-inference.test (original)
+++ lld/trunk/test/COFF/subsystem-inference.test Thu Aug 6 11:19:35 2015
@@ -1,17 +1,17 @@
# RUN: sed -e s/ENTRYNAME/main/ %s | yaml2obj > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe %t.obj
+# RUN: lld -flavor link /out:%t.exe %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MAIN %s
# RUN: sed s/ENTRYNAME/wmain/ %s | yaml2obj > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe %t.obj
+# RUN: lld -flavor link /out:%t.exe %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WMAIN %s
# RUN: sed s/ENTRYNAME/WinMain/ %s | yaml2obj > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe %t.obj
+# RUN: lld -flavor link /out:%t.exe %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WINMAIN %s
# RUN: sed s/ENTRYNAME/wWinMain/ %s | yaml2obj > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe %t.obj
+# RUN: lld -flavor link /out:%t.exe %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WWINMAIN %s
# MAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
Modified: lld/trunk/test/COFF/subsystem.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/subsystem.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/subsystem.test (original)
+++ lld/trunk/test/COFF/subsystem.test Thu Aug 6 11:19:35 2015
@@ -1,4 +1,4 @@
-# RUN: lld -flavor link2 /entry:main /out:%t.exe /subsystem:windows \
+# RUN: lld -flavor link /entry:main /out:%t.exe /subsystem:windows \
# RUN: %p/Inputs/ret42.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
@@ -8,7 +8,7 @@ CHECK1: MajorSubsystemVersion: 6
CHECK1: MinorSubsystemVersion: 0
CHECK1: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
-# RUN: lld -flavor link2 /entry:main /out:%t.exe /subsystem:windows,8.9 \
+# RUN: lld -flavor link /entry:main /out:%t.exe /subsystem:windows,8.9 \
# RUN: %p/Inputs/ret42.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
Modified: lld/trunk/test/COFF/symtab.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/symtab.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/symtab.test (original)
+++ lld/trunk/test/COFF/symtab.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /debug /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: lld -flavor link /debug /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
# RUN: llvm-readobj -symbols %t.exe | FileCheck %s
# CHECK: Symbols [
Modified: lld/trunk/test/COFF/tls.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/tls.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/tls.test (original)
+++ lld/trunk/test/COFF/tls.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
# CHECK: TLSTableRVA: 0x1000
Modified: lld/trunk/test/COFF/tls32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/tls32.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/tls32.test (original)
+++ lld/trunk/test/COFF/tls32.test Thu Aug 6 11:19:35 2015
@@ -1,5 +1,5 @@
# RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
# CHECK: TLSTableRVA: 0x1000
Modified: lld/trunk/test/COFF/unwind.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/unwind.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/unwind.test (original)
+++ lld/trunk/test/COFF/unwind.test Thu Aug 6 11:19:35 2015
@@ -1,6 +1,6 @@
# RUN: yaml2obj < %s > %t.obj
#
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
# RUN: llvm-objdump -unwind-info %t.exe | FileCheck -check-prefix=UNWIND %s
#
Modified: lld/trunk/test/COFF/version.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/version.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/version.test (original)
+++ lld/trunk/test/COFF/version.test Thu Aug 6 11:19:35 2015
@@ -1,18 +1,18 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT %s
DEFAULT: MajorImageVersion: 0
DEFAULT: MinorImageVersion: 0
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /version:11
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /version:11
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
CHECK1: MajorImageVersion: 11
CHECK1: MinorImageVersion: 0
-# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj /version:11.22
+# RUN: lld -flavor link /out:%t.exe /entry:main %t.obj /version:11.22
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
CHECK2: MajorImageVersion: 11
Modified: lld/trunk/test/COFF/weak-external.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/weak-external.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/weak-external.test (original)
+++ lld/trunk/test/COFF/weak-external.test Thu Aug 6 11:19:35 2015
@@ -1,7 +1,7 @@
# RUN: yaml2obj %s > %t.obj
# RUN: llvm-as -o %t.lto.obj %S/Inputs/weak-external.ll
-# RUN: lld -flavor link2 /out:%t1.exe /entry:g /subsystem:console %t.obj
-# RUN: lld -flavor link2 /out:%t2.exe /entry:g /subsystem:console /lldmap:%t2.map %t.obj %t.lto.obj
+# RUN: lld -flavor link /out:%t1.exe /entry:g /subsystem:console %t.obj
+# RUN: lld -flavor link /out:%t2.exe /entry:g /subsystem:console /lldmap:%t2.map %t.obj %t.lto.obj
# RUN: FileCheck %s < %t2.map
# CHECK: lto-llvm{{.*}}:
Modified: lld/trunk/test/COFF/weak-external2.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/weak-external2.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/weak-external2.test (original)
+++ lld/trunk/test/COFF/weak-external2.test Thu Aug 6 11:19:35 2015
@@ -1,6 +1,6 @@
# RUN: yaml2obj %s > %t.obj
# RUN: llvm-as -o %t.lto.obj %S/Inputs/weak-external2.ll
-# RUN: lld -flavor link2 /out:%t.exe /entry:g /subsystem:console %t.obj %t.lto.obj
+# RUN: lld -flavor link /out:%t.exe /entry:g /subsystem:console %t.obj %t.lto.obj
---
header:
Modified: lld/trunk/test/COFF/weak-external3.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/weak-external3.test?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/test/COFF/weak-external3.test (original)
+++ lld/trunk/test/COFF/weak-external3.test Thu Aug 6 11:19:35 2015
@@ -1,8 +1,8 @@
# RUN: yaml2obj %s > %t.obj
# RUN: llvm-as -o %t.lto.obj %S/Inputs/weak-external3.ll
-# RUN: lld -flavor link2 /out:%t1.exe /entry:f /subsystem:console /lldmap:%t1.map %t.lto.obj
+# RUN: lld -flavor link /out:%t1.exe /entry:f /subsystem:console /lldmap:%t1.map %t.lto.obj
# RUN: FileCheck --check-prefix=CHECK1 %s < %t1.map
-# RUN: lld -flavor link2 /out:%t2.exe /entry:f /subsystem:console /lldmap:%t2.map %t.obj %t.lto.obj
+# RUN: lld -flavor link /out:%t2.exe /entry:f /subsystem:console /lldmap:%t2.map %t.obj %t.lto.obj
# RUN: FileCheck --check-prefix=CHECK2 %s < %t2.map
# CHECK1: lto-llvm{{.*}}:
Removed: lld/trunk/test/pecoff/Inputs/abs.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/abs.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/abs.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/abs.obj.yaml (removed)
@@ -1,11 +0,0 @@
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
-symbols:
- - Name: _abs_value
- Value: 0xDEADBEEF
- SectionNumber: -1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
Removed: lld/trunk/test/pecoff/Inputs/alignment.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/alignment.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/alignment.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/alignment.obj.yaml (removed)
@@ -1,103 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 256
- SectionData: CC
- - Name: .text$1
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4096
- SectionData: 00
- - Name: .data$1
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00
- - Name: .data$2
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 11
- - Name: .data$3
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 0
- SectionData: 22
- - Name: .bss$1
- Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: 0000
- - Name: .bss$2
- Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: 0000
- - Name: .yyy
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4096
- SectionData: 0000
- - Name: .zzz
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16384
- SectionData: 0000
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text$1
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data$1
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data$2
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data$3
- Value: 0
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .bss$1
- Value: 0
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .bss$2
- Value: 0
- SectionNumber: 7
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .foo
- Value: 0
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .bar
- Value: 0
- SectionNumber: 9
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
-...
Removed: lld/trunk/test/pecoff/Inputs/alternatename1.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/alternatename1.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/alternatename1.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/alternatename1.obj.yaml (removed)
@@ -1,23 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 90909090
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _foo
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/alternatename2.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/alternatename2.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/alternatename2.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/alternatename2.obj.yaml (removed)
@@ -1,23 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: CCCCCCCC
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/alternatename3.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/alternatename3.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/alternatename3.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/alternatename3.obj.yaml (removed)
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 90909090
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2F616C7465726E6174656E616D653A5F6D61696E3D5F666F6F00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _foo
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-ImageBase.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-ImageBase.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-ImageBase.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-ImageBase.obj.yaml (removed)
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 7047FEDE00000000
- Relocations:
- - VirtualAddress: 4
- SymbolName: __ImageBase
- Type: 1
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 8
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-ImageBase.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-ImageBase.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-ImageBase.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-ImageBase.s (removed)
@@ -1,16 +0,0 @@
-
- .syntax unified
- .thumb
- .text
-
- .def mainCRTStartup
- .type 32
- .scl 2
- .endef
- .align 2
- .thumb_func
-mainCRTStartup:
- bx lr
- trap
- .long __ImageBase
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml (removed)
@@ -1,55 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '7047'
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '00000000'
- Relocations:
- - VirtualAddress: 0
- SymbolName: function
- Type: 1
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .rdata
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: function
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: fps
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-addr32-exec.s (removed)
@@ -1,24 +0,0 @@
-
-# __declspec(dllexport) void function(void) { }
-# const void * const fps[] = { &function, };
-
- .syntax unified
- .thumb
- .text
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- bx lr
-
- .section .rdata,"rd"
- .global fps
- .align 2
-fps:
- .long function
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-addr32.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-addr32.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-addr32.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-addr32.obj.yaml (removed)
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '0000000000000000'
- Relocations:
- - VirtualAddress: 0
- SymbolName: i
- Type: 1
-symbols:
- - Name: .rdata
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 8
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: i
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: is
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-addr32.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-addr32.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-addr32.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-addr32.s (removed)
@@ -1,18 +0,0 @@
-
-@ static const int i = 0;
-@ const int * const is[] = { &i, };
-
- .syntax unified
- .thumb
- .text
-
- .section .rdata,"rd"
- .align 2 # @i
-i:
- .long 0 # 0x0
-
- .global is # @is
- .align 2
-is:
- .long i
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-blx23t.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-blx23t.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-blx23t.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-blx23t.obj.yaml (removed)
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF2DE90048EB46202000F000F80130BDE80088
- Relocations:
- - VirtualAddress: 12
- SymbolName: identity
- Type: 21
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 22
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: identity
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: function
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-blx23t.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-blx23t.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-blx23t.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-blx23t.s (removed)
@@ -1,33 +0,0 @@
-
-# __declspec(noinline) int identity(int i) { return i; }
-# int function() { return identity(32) + 1; }
-
- .syntax unified
- .thumb
- .text
-
- .def identity
- .scl 2
- .type 32
- .endef
- .global identity
- .align 2
- .thumb_func
-identity:
- bx lr
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- push.w {r11, lr}
- mov r11, sp
- movs r0, 32
- bl identity
- adds r0, 1
- pop.w {r11, pc}
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-branch24t.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-branch24t.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-branch24t.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-branch24t.obj.yaml (removed)
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF202000F000B8
- Relocations:
- - VirtualAddress: 6
- SymbolName: identity
- Type: 20
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 10
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: identity
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: function
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-branch24t.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-branch24t.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-branch24t.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-branch24t.s (removed)
@@ -1,26 +0,0 @@
-
-# int ___declspec(noinline) identity(int i) { return i; }
-# int function(void) { return identity(32); }
-
- .syntax unified
- .thumb
- .text
-
- .def identity
- .scl 2
- .type 32
- .endef
- .global identity
- .align 2
- .thumb_func
-identity:
- bx lr
-
- .def function
- .scl 2
- .type 32
- .endef
-function:
- movs r0, 32
- b identity
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-exports.def
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-exports.def?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-exports.def (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-exports.def (removed)
@@ -1,4 +0,0 @@
-LIBRARY "armnt-exports"
-EXPORTS
- function
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-exports.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-exports.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-exports.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-exports.obj.yaml (removed)
@@ -1,35 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF7047
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: function
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _DllMainCRTStartup
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-import.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-import.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-import.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-import.obj.yaml (removed)
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 40F20000C0F2000000680047
- Relocations:
- - VirtualAddress: 0
- SymbolName: __imp_function
- Type: 17
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp_function
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-import.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-import.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-import.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-import.s (removed)
@@ -1,21 +0,0 @@
-
-# void __declspec(dllimport) function(void);
-# int mainCRTStartup(void) { return function(); }
-
- .syntax unified
- .thumb
- .text
-
- .def mainCRTStartup
- .scl 2
- .type 32
- .endef
- .global mainCRTStartup
- .align 2
- .thumb_func
-mainCRTStartup:
- movw r0, :lower16:__imp_function
- movt r0, :upper16:__imp_function
- ldr r0, [r0]
- bx r0
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml (removed)
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF40F20000C0F200007047
- Relocations:
- - VirtualAddress: 4
- SymbolName: function
- Type: 17
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 14
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: function
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: get_function
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-mov32t-exec.s (removed)
@@ -1,30 +0,0 @@
-
-# void function(void) { }
-# void *get_function() { return &function; }
-
- .syntax unified
- .thumb
- .text
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- bx lr
-
- .def get_function
- .scl 2
- .type 32
- .endef
- .global get_function
- .align 2
- .thumb_func
-get_function:
- movw r0, :lower16:function
- movt r0, :upper16:function
- bx lr
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-mov32t.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-mov32t.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-mov32t.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-mov32t.obj.yaml (removed)
@@ -1,55 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 40F20000C0F200007047
- Relocations:
- - VirtualAddress: 0
- SymbolName: buffer
- Type: 17
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: '62756666657200'
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 10
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .rdata
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: get_buffer
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: buffer
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
-...
Removed: lld/trunk/test/pecoff/Inputs/armnt-mov32t.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-mov32t.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-mov32t.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-mov32t.s (removed)
@@ -1,24 +0,0 @@
-
-# static const char buffer[] = "buffer";
-# const char *get_buffer() { return buffer; }
-
- .syntax unified
- .thumb
- .text
-
- .def get_buffer
- .scl 2
- .type 32
- .endef
- .global get_buffer
- .align 2
- .thumb_func
-get_buffer:
- movw r0, :lower16:buffer
- movt r0, :upper16:buffer
- bx lr
-
- .section .rdata,"rd"
-buffer:
- .asciz "buffer"
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-obj.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-obj.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-obj.s (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-obj.s (removed)
@@ -1,12 +0,0 @@
-
- .syntax unified
- .thumb
- .text
-
- .def main
- .scl 2
- .type 32
- .endef
-main:
- bx lr
-
Removed: lld/trunk/test/pecoff/Inputs/armnt-obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/armnt-obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/armnt-obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/armnt-obj.yaml (removed)
@@ -1,29 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '7047'
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/associative1.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/associative1.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/associative1.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/associative1.obj.yaml (removed)
@@ -1,53 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000
- - Name: '.CRT$XCU'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 77777777
-symbols:
- - Name: .data
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: _var
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '.CRT$XCU'
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
- - Name: _init
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/associative3.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/associative3.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/associative3.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/associative3.obj.yaml (removed)
@@ -1,33 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 0000000000000000
- Relocations:
- - VirtualAddress: 4
- SymbolName: _var
- Type: IMAGE_REL_I386_DIR32
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/basereloc.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/basereloc.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/basereloc.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/basereloc.obj.yaml (removed)
@@ -1,164 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4096
- SectionData: B800000000506800000000680000000050E80000000050E80000000050E800000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: abs_symbol
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 7
- SymbolName: caption
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: message
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 18
- SymbolName: _MessageBoxA at 16
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 24
- SymbolName: _ExitProcess at 4
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 30
- SymbolName: ___ImageBase
- Type: IMAGE_REL_I386_DIR32
- - Name: .text2
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4096
- SectionData: B800000000506800000000680000000050E80000000050E80000000050E800000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: abs_symbol
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 7
- SymbolName: caption
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: message
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 18
- SymbolName: _MessageBoxA at 16
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 24
- SymbolName: _ExitProcess at 4
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 30
- SymbolName: ___ImageBase
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 48656C6C6F0048656C6C6F20576F726C6400
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2F454E5452593A6D61696E20
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 6
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .text2
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 6
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 18
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _MessageBoxA at 16
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _ExitProcess at 4
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: message
- Value: 6
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: caption
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .drectve
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .file
- Value: 0
- SectionNumber: 65534
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- File: "hello.c"
- - Name: abs_symbol
- Value: 0xDEADBEEF
- SectionNumber: -1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: ___ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/bss.asm
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/bss.asm?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/bss.asm (original)
+++ lld/trunk/test/pecoff/Inputs/bss.asm (removed)
@@ -1,20 +0,0 @@
-.586
-.model flat, c
-
-extern ExitProcess at 4 : PROC
-
-_BSS SEGMENT
- _x DD 064H DUP (?)
- _y DD 064H DUP (?)
-_BSS ENDS
-
-.code
-start:
- mov eax, 42
- mov _x, eax
- mov eax, _x
- push eax
- call ExitProcess at 4
-end start
-
-end
Removed: lld/trunk/test/pecoff/Inputs/bss.obj
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/bss.obj?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/bss.obj (original) and lld/trunk/test/pecoff/Inputs/bss.obj (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/comdat.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/comdat.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/comdat.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/comdat.obj.yaml (removed)
@@ -1,53 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC33C05DC3
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC33C05DC3
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: .text
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: "?inlinefn1@@YAHXZ"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "?inlinefn2@@YAHXZ"
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/common-symbol.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/common-symbol.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/common-symbol.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/common-symbol.obj.yaml (removed)
@@ -1,85 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: b800000000b800000000b800000000b800000000b800000000
- Relocations:
- - VirtualAddress: 1
- SymbolName: _bssdata4
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 6
- SymbolName: _bsspad1
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 11
- SymbolName: _bssdata64
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 16
- SymbolName: _bsspad2
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 21
- SymbolName: _bssdata16
- Type: IMAGE_REL_AMD64_ADDR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 03000000
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 5
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _bssdata4
- Value: 4
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bsspad1
- Value: 1
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bssdata64
- Value: 64
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bsspad2
- Value: 1
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bssdata16
- Value: 16
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/drectve.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/drectve.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/drectve.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/drectve.obj.yaml (removed)
@@ -1,79 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- Relocations:
- - VirtualAddress: 6
- SymbolName: __imp__fn
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: __imp__var
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 22
- SymbolName: __imp___name_with_underscore
- Type: IMAGE_REL_I386_DIR32
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2f64656661756c746c69623a766172732e6c6962202f73756273797374656d3a636f6e736f6c652c34322e313935202d3f666f6f00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: __imp__fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp___name_with_underscore
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
Removed: lld/trunk/test/pecoff/Inputs/drectve2.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/drectve2.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/drectve2.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/drectve2.obj.yaml (removed)
@@ -1,45 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2f696e636c7564653a666f6f00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
Removed: lld/trunk/test/pecoff/Inputs/drectve3.lib
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/drectve3.lib?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/drectve3.lib (original) and lld/trunk/test/pecoff/Inputs/drectve3.lib (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/entry.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/entry.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/entry.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/entry.obj.yaml (removed)
@@ -1,40 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: A100000000030500000000C3
-
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
-
- - Name: _foo
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-
- - Name: _bar
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-
- - Name: "?baz@@YAXXZ"
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/executable.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/executable.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/executable.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/executable.obj.yaml (removed)
@@ -1,29 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '7047'
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/executable.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/executable.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/executable.s (original)
+++ lld/trunk/test/pecoff/Inputs/executable.s (removed)
@@ -1,17 +0,0 @@
-
-# void mainCRTStartup(){}
-
- .syntax unified
- .thumb
- .text
-
- .def mainCRTStartup
- .scl 2
- .type 32
- .endef
- .global mainCRTStartup
- .align 2
- .thumb_func
-mainCRTStartup:
- bx lr
-
Removed: lld/trunk/test/pecoff/Inputs/export.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/export.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/export.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/export.obj.yaml (removed)
@@ -1,69 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B800000000506800000000680000000050E80000000050E800000000
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2f6578706f72743a5f6578706f7274666e334032353600 # /export:_exportfn3 at 256
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _init
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn1
- Value: 8
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn2
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn3 at 256
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn6
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn7 at 8
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "?exportfn8@@YAXXZ"
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/exports.def
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/exports.def?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/exports.def (original)
+++ lld/trunk/test/pecoff/Inputs/exports.def (removed)
@@ -1,6 +0,0 @@
-; This is a comment line
-
-EXPORTS
- exportfn1 @5 ; foo
- exportfn2
- exportfn5=exportfn6 PRIVATE
Removed: lld/trunk/test/pecoff/Inputs/exports2.def
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/exports2.def?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/exports2.def (original)
+++ lld/trunk/test/pecoff/Inputs/exports2.def (removed)
@@ -1,6 +0,0 @@
-; This is a comment line
-
-EXPORTS
- exportfn1 @5 ; foo
- exportfn7
- exportfn5=exportfn6 PRIVATE
Removed: lld/trunk/test/pecoff/Inputs/grouped-sections.asm
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/grouped-sections.asm?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/grouped-sections.asm (original)
+++ lld/trunk/test/pecoff/Inputs/grouped-sections.asm (removed)
@@ -1,18 +0,0 @@
-.386
-.model flat, c
-
-_data$2 SEGMENT BYTE alias(".data$2")
- db "orld", 0
-_data$2 ends
-
-_data$1 SEGMENT BYTE alias(".data$1")
- db "o, w"
-_data$1 ends
-
-.data
- db "Hell"
-
-.code
-main:
- nop
-end main
Removed: lld/trunk/test/pecoff/Inputs/grouped-sections.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/grouped-sections.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/grouped-sections.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/grouped-sections.obj.yaml (removed)
@@ -1,83 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 90
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 48656C6C
- - Name: ".data$2"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 1
- SectionData: 6F726C6400
- - Name: ".data$1"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 1
- SectionData: 6F2C2077
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".data$2"
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 5
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".data$1"
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: foo
- Value: 2
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/hello.asm
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/hello.asm?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/hello.asm (original)
+++ lld/trunk/test/pecoff/Inputs/hello.asm (removed)
@@ -1,24 +0,0 @@
-;;; ml hello.asm /link /subsystem:windows /defaultlib:kernel32.lib \
-;;; /defaultlib:user32.lib /out:hello.exe /entry:main
-
-.386
-.model flat, c
-
-extern MessageBoxA at 16 : PROC
-extern ExitProcess at 4 : PROC
-
-.data
- caption db "Hello", 0
- message db "Hello World", 0
-
-.code
-main:
- mov eax, 0
- push eax
- push offset caption
- push offset message
- push eax
- call MessageBoxA at 16
- push eax
- call ExitProcess at 4
-end main
Removed: lld/trunk/test/pecoff/Inputs/hello.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/hello.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/hello.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/hello.obj.yaml (removed)
@@ -1,111 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B800000000506800000000680000000050E80000000050E800000000
- Relocations:
- - VirtualAddress: 7
- SymbolName: caption
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: message
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 18
- SymbolName: _MessageBoxA at 16
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 24
- SymbolName: _ExitProcess at 4
- Type: IMAGE_REL_I386_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 48656C6C6F0048656C6C6F20576F726C6400
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2F454E5452593A6D61696E20
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 18
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _MessageBoxA at 16
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _ExitProcess at 4
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: message
- Value: 6
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: caption
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .drectve
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .file
- Value: 0
- SectionNumber: 65534
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- File: "hello.c"
-...
Removed: lld/trunk/test/pecoff/Inputs/hello64.asm
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/hello64.asm?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/hello64.asm (original)
+++ lld/trunk/test/pecoff/Inputs/hello64.asm (removed)
@@ -1,22 +0,0 @@
-;; ml hello64.asm /link /subsystem:windows /defaultlib:kernel32 \
-;; /defaultlib:user32 /out:hello64.exe /entry:main
-
-extern ExitProcess : PROC
-extern MessageBoxA : PROC
-
-.data
- caption db 'Hello', 0
- message db 'Hello World', 0
-
-.code
-main PROC
- sub rsp,28h
- mov rcx, 0
- lea rdx, message
- lea r8, caption
- mov r9d, 0
- call MessageBoxA
- mov ecx, 0
- call ExitProcess
-main ENDP
-END
Removed: lld/trunk/test/pecoff/Inputs/hello64.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/hello64.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/hello64.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/hello64.obj.yaml (removed)
@@ -1,110 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: '.text$mn'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 4883EC2848C7C100000000488D15000000004C8D050000000041B900000000E800000000B900000000E800000000
- Relocations:
- - VirtualAddress: 14
- SymbolName: message
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 21
- SymbolName: caption
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 32
- SymbolName: MessageBoxA
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 42
- SymbolName: ExitProcess
- Type: IMAGE_REL_AMD64_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: 48656C6C6F0048656C6C6F20576F726C6400
- - Name: '.debug$S'
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000830000004800011100000000433A5C63796777696E5C686F6D655C727569755C6C6C766D5C746F6F6C735C6C6C645C746573745C7065636F66665C496E707574735C68656C6C6F36342E6F626A0037003C1103020000D00000000000000000000C0000000D5201004D6963726F736F667420285229204D6163726F20417373656D626C6572000000
-symbols:
- - Name: '@comp.id'
- Value: 14635533
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 16
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '.text$mn'
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 46
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 18
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: '.debug$S'
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 144
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ExitProcess
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: MessageBoxA
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: message
- Value: 6
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: caption
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/hello64lib.asm
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/hello64lib.asm?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/hello64lib.asm (original)
+++ lld/trunk/test/pecoff/Inputs/hello64lib.asm (removed)
@@ -1,14 +0,0 @@
-.code
-ExitProcess PROC
- RET
-ExitProcess ENDP
-
-MessageBoxA PROC
- RET
-MessageBoxA ENDP
-
-_DllMainCRTStartup PROC
- RET
-_DllMainCRTStartup ENDP
-
-END
Removed: lld/trunk/test/pecoff/Inputs/hello64lib.lib
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/hello64lib.lib?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/hello64lib.lib (original) and lld/trunk/test/pecoff/Inputs/hello64lib.lib (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/imagebase.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/imagebase.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/imagebase.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/imagebase.obj.yaml (removed)
@@ -1,55 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: A100000000C3
- Relocations:
- - VirtualAddress: 1
- SymbolName: ___ImageBase
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: ""
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ___ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/library.lib
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/library.lib?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/library.lib (original) and lld/trunk/test/pecoff/Inputs/library.lib (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/machine-type-unknown.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/machine-type-unknown.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/machine-type-unknown.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/machine-type-unknown.obj.yaml (removed)
@@ -1,38 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_UNKNOWN
- Characteristics: []
-sections:
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: ''
-symbols:
- - Name: '@comp.id'
- Value: 1
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 1
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: __imp___close
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__close
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
- WeakExternal:
- TagIndex: 2
- Characteristics: IMAGE_WEAK_EXTERN_SEARCH_ALIAS
-...
Removed: lld/trunk/test/pecoff/Inputs/main.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/main.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/main.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/main.obj.yaml (removed)
@@ -1,70 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: A100000000030500000000C3
- Relocations:
- - VirtualAddress: 1
- SymbolName: _val1
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 7
- SymbolName: _val2
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: ""
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 2
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _val1
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _val2
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/merge-largest1.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/merge-largest1.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/merge-largest1.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/merge-largest1.obj.yaml (removed)
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 00112233
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_LARGEST
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/merge-largest2.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/merge-largest2.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/merge-largest2.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/merge-largest2.obj.yaml (removed)
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 0011223344556677
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_LARGEST
- - Name: "_foo"
- Value: 6
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/merge-same-size1.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/merge-same-size1.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/merge-same-size1.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/merge-same-size1.obj.yaml (removed)
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: FFFFFFFFFFFFFF
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_SAME_SIZE
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/merge-same-size2.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/merge-same-size2.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/merge-same-size2.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/merge-same-size2.obj.yaml (removed)
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: AAAAAAAAAAAAAA
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_SAME_SIZE
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/merge-same-size3.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/merge-same-size3.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/merge-same-size3.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/merge-same-size3.obj.yaml (removed)
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: FFFF
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_SAME_SIZE
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/nonstandard-sections.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/nonstandard-sections.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/nonstandard-sections.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/nonstandard-sections.obj.yaml (removed)
@@ -1,53 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 01234678
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 01234678
- - Name: .foo
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, IMAGE_SCN_MEM_EXECUTE ]
- Alignment: 4
- SectionData: 01234678
- - Name: .bar
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 01234678
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .foo
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .bar
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/nop.asm
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/nop.asm?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/nop.asm (original)
+++ lld/trunk/test/pecoff/Inputs/nop.asm (removed)
@@ -1,9 +0,0 @@
-.386
-.model flat, stdcall
-option casemap :none
-
-.code
-start:
- mov eax, 42
- ret
-end start
Removed: lld/trunk/test/pecoff/Inputs/nop.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/nop.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/nop.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/nop.obj.yaml (removed)
@@ -1,51 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B82A000000C3
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: ""
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/nop64.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/nop64.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/nop64.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/nop64.obj.yaml (removed)
@@ -1,67 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: C3C3C3C3
- Relocations:
- - VirtualAddress: 0
- SymbolName: __imp__fn
- Type: IMAGE_REL_AMD64_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: ''
-symbols:
- - Name: '@comp.id'
- Value: 13485607
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 16
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: __imp__fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/reloc.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/reloc.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/reloc.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/reloc.obj.yaml (removed)
@@ -1,82 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 680000000068000000006800000000680000000068000000006800000000
- Relocations:
- - VirtualAddress: 1
- SymbolName: _message
- Type: IMAGE_REL_I386_SECTION
- - VirtualAddress: 6
- SymbolName: _message
- Type: IMAGE_REL_I386_SECREL
- - VirtualAddress: 11
- SymbolName: .data
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 16
- SymbolName: .data
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 21
- SymbolName: __imp__MessageBoxA at 16
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 26
- SymbolName: _abs_value
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 576F726C64210048656C6C6F2C00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 60
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 14
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _message
- Value: 5
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: __imp__MessageBoxA at 16
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _abs_value
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/reloc64.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/reloc64.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/reloc64.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/reloc64.obj.yaml (removed)
@@ -1,63 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 48B800000000000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffC3
- Relocations:
- - VirtualAddress: 2
- SymbolName: end
- Type: IMAGE_REL_AMD64_ADDR64
- - VirtualAddress: 11
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 16
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_1
- - VirtualAddress: 21
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_2
- - VirtualAddress: 26
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_3
- - VirtualAddress: 31
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_4
- - VirtualAddress: 36
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_5
- - VirtualAddress: 41
- SymbolName: end
- Type: IMAGE_REL_AMD64_SECTION
- - VirtualAddress: 46
- SymbolName: end
- Type: IMAGE_REL_AMD64_SECREL
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 41
- NumberOfRelocations: 7
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: entry
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: end
- Value: 40
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/resource.rc
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/resource.rc?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/resource.rc (original)
+++ lld/trunk/test/pecoff/Inputs/resource.rc (removed)
@@ -1,4 +0,0 @@
-STRINGTABLE
-{
- 1, "Hello"
-}
Removed: lld/trunk/test/pecoff/Inputs/resource.res
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/resource.res?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/resource.res (original) and lld/trunk/test/pecoff/Inputs/resource.res (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/responsefile.txt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/responsefile.txt?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/responsefile.txt (original)
+++ lld/trunk/test/pecoff/Inputs/responsefile.txt (removed)
@@ -1 +0,0 @@
--foo -bar\baz
Removed: lld/trunk/test/pecoff/Inputs/secrel1.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/secrel1.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/secrel1.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/secrel1.obj.yaml (removed)
@@ -1,69 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: C3
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data
- Type: IMAGE_REL_I386_SECREL
- - Name: .data2
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data2
- Type: IMAGE_REL_I386_SECREL
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 60
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: .data2
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 3
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/secrel2.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/secrel2.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/secrel2.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/secrel2.obj.yaml (removed)
@@ -1,47 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data
- Type: IMAGE_REL_I386_SECREL
- - Name: .data2
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data2
- Type: IMAGE_REL_I386_SECREL
-symbols:
- - Name: .data
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .data2
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
-...
Removed: lld/trunk/test/pecoff/Inputs/seh.c
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/seh.c?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/seh.c (original)
+++ lld/trunk/test/pecoff/Inputs/seh.c (removed)
@@ -1,13 +0,0 @@
-__declspec(noinline) void triggerSEH() {
- volatile int *p = 0;
- *p = 1;
-}
-
-int main() {
- __try {
- triggerSEH();
- } __except(1) {
- return 42;
- }
- return 0;
-}
Removed: lld/trunk/test/pecoff/Inputs/seh.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/seh.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/seh.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/seh.obj.yaml (removed)
@@ -1,387 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 1
- SectionData: 2020202F44454641554C544C49423A22757569642E6C696222202F44454641554C544C49423A22757569642E6C696222202F4641494C49464D49534D415443483A225F4D53435F5645523D3138303022202F4641494C49464D49534D415443483A225F4954455241544F525F44454255475F4C4556454C3D3022202F4641494C49464D49534D415443483A2252756E74696D654C6962726172793D4D445F44796E616D696352656C6561736522202F44454641554C544C49423A226D73766370727422202F44454641554C544C49423A224D535643525422202F44454641554C544C49423A224F4C444E414D45532220
- - Name: '.debug$S'
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000600000002200011100000000433A5C63796777696E5C686F6D655C727569755C7365682E6F626A003A003C11012200000700120000000D520100120000000D5201004D6963726F736F667420285229204F7074696D697A696E6720436F6D70696C657200
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 00
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 01
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 54726967676572696E672053454820657863657074696F6E0D0A0000457865637574696E6720534548205F5F65786365707420626C6F636B20696E20666F6F0D0A000000457865637574696E6720534548205F5F65786365707420626C6F636B0D0A00
- - Name: '.text$mn'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC516800000000FF150000000083C404C745FC000000008B45FCC700140000008BE55DC3CCCCCCCCCCCCCCCCCCCC558BEC51E8000000008D4DFFE8000000008BE55DC3CCCCCCCCCCCCCCCCCCCCCC558BEC6AFE6800000000680000000064A1000000005083EC08535657A1000000003145F833C5508D45F064A3000000008965E8C745FC00000000E800000000C745FCFEFFFFFFEB1EB801000000C38B65E86800000000FF150000000083C404C745FCFEFFFFFF8B4DF064890D00000000595F5E5B8BE55DC3CCCCCCCCCCCCCCCC558BEC6AFE6800000000680000000064A1000000005083EC08535657A1000000003145F833C5508D45F064A3000000008965E8C745FC00000000E800000000E800000000C745FCFEFFFFFFEB1EB801000000C38B65E86800000000FF150000000083C404C745FCFEFFFFFF33C08B4DF064890D00000000595F5E5B8BE55DC3
- Relocations:
- - VirtualAddress: 5
- SymbolName: '$SG73531'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 11
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 53
- SymbolName: '?TestCPPEX@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 61
- SymbolName: '??1TestClass@@QAE at XZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 86
- SymbolName: '__sehtable$?foo@@YAXXZ'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 91
- SymbolName: __except_handler4
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 109
- SymbolName: ___security_cookie
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 139
- SymbolName: '?TestExceptions@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 162
- SymbolName: '$SG73539'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 168
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 214
- SymbolName: '__sehtable$_main'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 219
- SymbolName: __except_handler4
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 237
- SymbolName: ___security_cookie
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 267
- SymbolName: '?foo@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 272
- SymbolName: '?TestExceptions@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 295
- SymbolName: '$SG73543'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 301
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - Name: '.text$mn'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC51894DFC6800000000FF150000000083C4048BE55DC3
- Relocations:
- - VirtualAddress: 8
- SymbolName: '??_C at _0BI@BBHGNMOG at Destroying?5TestClass?$CB?$AN?6?$AA@'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 14
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - Name: '.xdata$x'
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 8
- SectionData: FEFFFFFF00000000D8FFFFFF00000000FEFFFFFF000000000000000000000000FEFFFFFF00000000D8FFFFFF00000000FEFFFFFF0000000000000000
- Relocations:
- - VirtualAddress: 20
- SymbolName: '$LN5'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 24
- SymbolName: '$LN6'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 52
- SymbolName: '$LN5'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 56
- SymbolName: '$LN6'
- Type: IMAGE_REL_I386_DIR32
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 44657374726F79696E672054657374436C617373210D0A00
- - Name: .sxdata
- Characteristics: [ IMAGE_SCN_LNK_INFO ]
- Alignment: 4
- SectionData: 1B0000001A000000
-symbols:
- - Name: '@comp.id'
- Value: 14766605
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 2147484049
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .drectve
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 240
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: '.debug$S'
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 108
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .rdata
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: '?value@?$integral_constant at _N$0A@@std@@2_NB'
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .rdata
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 1996959894
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: '?value@?$integral_constant at _N$00 at std@@2_NB'
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .rdata
- Value: 0
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 99
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2801625422
- Number: 0
- - Name: '$SG73531'
- Value: 0
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '$SG73539'
- Value: 28
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '$SG73543'
- Value: 68
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '.text$mn'
- Value: 0
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 335
- NumberOfRelocations: 17
- NumberOfLinenumbers: 0
- CheckSum: 2488225337
- Number: 0
- - Name: '.text$mn'
- Value: 0
- SectionNumber: 7
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 25
- NumberOfRelocations: 2
- NumberOfLinenumbers: 0
- CheckSum: 210566957
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: __imp__printf
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '??1TestClass@@QAE at XZ'
- Value: 0
- SectionNumber: 7
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '?TestCPPEX@@YAXXZ'
- Value: 0
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '?TestExceptions@@YAXXZ'
- Value: 48
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '?foo@@YAXXZ'
- Value: 80
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 208
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __except_handler4
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '$LN5'
- Value: 152
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN7'
- Value: 157
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN6'
- Value: 158
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN5'
- Value: 285
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN7'
- Value: 290
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN6'
- Value: 291
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '.xdata$x'
- Value: 0
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 60
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 2900129504
- Number: 0
- - Name: '__sehtable$?foo@@YAXXZ'
- Value: 32
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '__sehtable$_main'
- Value: 0
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .rdata
- Value: 0
- SectionNumber: 9
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 24
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 1296623929
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: '??_C at _0BI@BBHGNMOG at Destroying?5TestClass?$CB?$AN?6?$AA@'
- Value: 0
- SectionNumber: 9
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: ___security_cookie
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .sxdata
- Value: 0
- SectionNumber: 10
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
Removed: lld/trunk/test/pecoff/Inputs/static-data1.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/static-data1.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/static-data1.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/static-data1.obj.yaml (removed)
@@ -1,67 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: ""
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 03000000
- - Name: ".debug$S"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000660000002B00011100000000433A5C63796777696E5C686F6D655C727569755C7374617469635C64617461312E6F626A0037003C1103020000030000000000000000000A0000001B9D01004D6963726F736F667420285229204D6163726F20417373656D626C657200000000
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".debug$S"
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 116
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _val1
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/static-data2.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/static-data2.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/static-data2.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/static-data2.obj.yaml (removed)
@@ -1,67 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: ""
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 04000000
- - Name: ".debug$S"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000660000002B00011100000000433A5C63796777696E5C686F6D655C727569755C7374617469635C64617461322E6F626A0037003C1103020000030000000000000000000A0000001B9D01004D6963726F736F667420285229204D6163726F20417373656D626C657200000000
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".debug$S"
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 116
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _val2
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/static.lib
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/static.lib?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/static.lib (original) and lld/trunk/test/pecoff/Inputs/static.lib (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/subsystem.main.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/subsystem.main.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/subsystem.main.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/subsystem.main.yaml (removed)
@@ -1,35 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B82A000000C3
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/subsystem.winmain.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/subsystem.winmain.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/subsystem.winmain.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/subsystem.winmain.yaml (removed)
@@ -1,35 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B82A000000C3
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _WinMain
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _WinMainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/tlsused.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/tlsused.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/tlsused.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/tlsused.obj.yaml (removed)
@@ -1,29 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: "0000000000000000"
-symbols:
- - Name: .data
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 8
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: __tls_used
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/unknown-drectve.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/unknown-drectve.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/unknown-drectve.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/unknown-drectve.obj.yaml (removed)
@@ -1,42 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
-
- # /nosuchoption:foobar
- SectionData: 2f6e6f737563686f7074696f6e3a666f6f62617200
-
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
Removed: lld/trunk/test/pecoff/Inputs/unwind.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/unwind.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/unwind.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/unwind.obj.yaml (removed)
@@ -1,129 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 4883EC184889742410440F110424534889E3488D235B4883C418C3C34881ECF0FF00004881ECF0FF80004881C4F0FF80004881C4F0FF0000C3
- - Name: .xdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 0912080312030F300E880000096402000422001A000000000000000021000000000000001B000000000000000100000000000000010E06000E11F0FF80000701FE1F001A
- Relocations:
- - VirtualAddress: 20
- SymbolName: __C_specific_handler
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 32
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 36
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 40
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - Name: .pdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 000000001B0000000000000012000000120000001C00000000000000010000002C000000000000001D00000034000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 4
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 8
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 12
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 16
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 20
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 24
- SymbolName: smallFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 28
- SymbolName: smallFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 32
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 36
- SymbolName: allocFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 40
- SymbolName: allocFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 44
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 57
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .xdata
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 68
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: .pdata
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 48
- NumberOfRelocations: 12
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 3
- - Name: func
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __C_specific_handler
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: smallFunc
- Value: 27
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: allocFunc
- Value: 28
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/vars-main-x64.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars-main-x64.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/vars-main-x64.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/vars-main-x64.obj.yaml (removed)
@@ -1,63 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- Relocations:
- - VirtualAddress: 6
- SymbolName: __imp_fn
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 12
- SymbolName: __imp_var
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 22
- SymbolName: __imp__name_with_underscore
- Type: IMAGE_REL_AMD64_ADDR32
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: __imp_fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__name_with_underscore
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "__delayLoadHelper2"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp_var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml (removed)
@@ -1,69 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- Relocations:
- - VirtualAddress: 6
- SymbolName: __imp__fn
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: __imp__var
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 22
- SymbolName: __imp___name_with_underscore
- Type: IMAGE_REL_I386_DIR32
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: __imp__fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp___name_with_underscore
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "___delayLoadHelper2 at 8"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: ___ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/Inputs/vars-main.c
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars-main.c?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/vars-main.c (original)
+++ lld/trunk/test/pecoff/Inputs/vars-main.c (removed)
@@ -1,7 +0,0 @@
-__declspec(dllimport) int var;
-__declspec(dllimport) int fn(void);
-__declspec(dllimport) int _name_with_underscore(void);
-
-int main() {
- return var + fn() + _name_with_underscore();
-}
Removed: lld/trunk/test/pecoff/Inputs/vars.c
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars.c?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/vars.c (original)
+++ lld/trunk/test/pecoff/Inputs/vars.c (removed)
@@ -1,20 +0,0 @@
-// cl.exe /c vars.c
-// link /dll /nodefaultlib /entry:dllmain /export:var, at 1,NONAME,DATA \
-// /export:fn /export:_name_with_underscore vars.obj
-
-// will be exported by ordinal
-int var = 3;
-
-// will be exported by name
-int fn(void) {
- return 4;
-}
-
-// will be exported by name
-int _name_with_underscore(void) {
- return 5;
-}
-
-int dllmain() {
- return 1;
-}
Removed: lld/trunk/test/pecoff/Inputs/vars.dll.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars.dll.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/vars.dll.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/vars.dll.yaml (removed)
@@ -1,19 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_32BIT_MACHINE, IMAGE_FILE_DLL ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 2147483648
- SectionData: 558BECB8040000005DC3CCCCCCCCCCCC558BECB8050000005DC3CCCCCCCCCCCC558BECB8010000005DC30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 2147483648
- SectionData: 0000000050570852000000004020000001000000030000000200000028200000342000003C200000003000001010000000100000492000005F20000001000200766172732E646C6C005F6E616D655F776974685F756E64657273636F726500666E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 2147483648
- SectionData: 0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
-symbols:
-...
Removed: lld/trunk/test/pecoff/Inputs/vars.lib
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars.lib?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/vars.lib (original) and lld/trunk/test/pecoff/Inputs/vars.lib (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/vars64.lib
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars64.lib?rev=244225&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/vars64.lib (original) and lld/trunk/test/pecoff/Inputs/vars64.lib (removed) differ
Removed: lld/trunk/test/pecoff/Inputs/weak-externals.asm
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/weak-externals.asm?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/weak-externals.asm (original)
+++ lld/trunk/test/pecoff/Inputs/weak-externals.asm (removed)
@@ -1,25 +0,0 @@
-.386
-.model flat
-
-;; val1 should be linked normally. no_such_symbol1 should be ignored.
-extern _no_such_symbol1 : PROC
-extern _val1 (_no_such_symbol1): PROC
-
-;; no_such_symbol2 should be linked as val2.
-extern _val2 : PROC
-extern _no_such_symbol2 (_val2) : PROC
-
-;; no_such_symbol3 should fail to link.
-extern _no_such_symbol3 : PROC
-
-public _fn1
-.code
-_fn1:
- push ebp
- mov ebp, esp
- call _val1
- call _no_such_symbol2
- call _no_such_symbol3
- pop ebp
- ret 0
-end _fn1
Removed: lld/trunk/test/pecoff/Inputs/weak-externals.obj.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/weak-externals.obj.yaml?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/Inputs/weak-externals.obj.yaml (original)
+++ lld/trunk/test/pecoff/Inputs/weak-externals.obj.yaml (removed)
@@ -1,91 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 558BECE800000000E800000000E8000000005DC3
- Relocations:
- - VirtualAddress: 4
- SymbolName: _val1
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 9
- SymbolName: _no_such_symbol2
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 14
- SymbolName: _no_such_symbol3
- Type: IMAGE_REL_I386_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: ""
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 20
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _no_such_symbol1
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _val2
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _no_such_symbol3
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _val1
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
- WeakExternal:
- TagIndex: 4
- Characteristics: IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
- - Name: _no_such_symbol2
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
- WeakExternal:
- TagIndex: 5
- Characteristics: IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
- - Name: _fn1
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
Removed: lld/trunk/test/pecoff/alignment.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/alignment.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/alignment.test (original)
+++ lld/trunk/test/pecoff/alignment.test (removed)
@@ -1,22 +0,0 @@
-# RUN: yaml2obj %p/Inputs/alignment.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: /entry:start /opt:noref -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Name: .bss (2E 62 73 73 00 00 00 00)
-CHECK: RawDataSize: 0
-
-CHECK: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK-NEXT: VirtualSize: 0x6
-
-CHECK: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK-NEXT: VirtualSize: 0x1001
-
-CHECK: Name: .yyy
-CHECK-NEXT: VirtualSize: 0x2
-CHECK-NEXT: VirtualAddress: 0x5000
-
-CHECK: Name: .zzz
-CHECK-NEXT: VirtualSize: 0x2
-CHECK-NEXT: VirtualAddress: 0x8000
Removed: lld/trunk/test/pecoff/alternatename.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/alternatename.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/alternatename.test (original)
+++ lld/trunk/test/pecoff/alternatename.test (removed)
@@ -1,44 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/alternatename1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/alternatename2.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/alternatename3.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /force /out:%t1.exe /alternatename:_main=_foo \
-# RUN: /subsystem:console -- %t1.obj
-# RUN: llvm-objdump -d %t1.exe | FileCheck -check-prefix=CHECK1 %s
-#
-# RUN: lld -flavor link /force /out:%t2.exe /alternatename:_main=_foo \
-# RUN: /subsystem:console -- %t1.obj %t2.obj
-# RUN: llvm-objdump -d %t2.exe | FileCheck -check-prefix=CHECK2 %s
-#
-# RUN: lld -flavor link /force /out:%t3.exe /subsystem:console -- %t3.obj
-# RUN: llvm-objdump -d %t3.exe | FileCheck -check-prefix=CHECK3 %s
-#
-# RUN: lld -flavor link /force /out:%t4.exe /alternatename:_main=_foo \
-# RUN: /alternatename:_xyz=_foo /subsystem:console -- %t1.obj
-# RUN: llvm-objdump -d %t4.exe | FileCheck -check-prefix=CHECK4 %s
-
-CHECK1: nop
-CHECK1-NEXT: nop
-CHECK1-NEXT: nop
-CHECK1-NEXT: nop
-CHECK1-NOT: int3
-
-CHECK2: int3
-CHECK2-NEXT: int3
-CHECK2-NEXT: int3
-CHECK2-NEXT: int3
-CHECK2-NOT: nop
-
-CHECK3: nop
-CHECK3-NEXT: nop
-CHECK3-NEXT: nop
-CHECK3-NEXT: nop
-CHECK3-NOT: int3
-
-CHECK4: nop
-CHECK4-NEXT: nop
-CHECK4-NEXT: nop
-CHECK4-NEXT: nop
-CHECK4-NOT: int3
Removed: lld/trunk/test/pecoff/armnt-ImageBase.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-ImageBase.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-ImageBase.test (original)
+++ lld/trunk/test/pecoff/armnt-ImageBase.test (removed)
@@ -1,14 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-ImageBase.obj.yaml
-# RUN: llvm-readobj -r %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /out:%t.exe %t.obj /subsystem:console
-# RUN: llvm-readobj -r %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Relocations [
-BEFORE: Section {{.*}} .text {
-BEFORE: 0x4 IMAGE_REL_ARM_ADDR32 __ImageBase
-BEFORE: }
-BEFORE: ]
-
-AFTER: Relocations [
-AFTER-NEXT: ]
-
Removed: lld/trunk/test/pecoff/armnt-addr32-exec.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-addr32-exec.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-addr32-exec.test (original)
+++ lld/trunk/test/pecoff/armnt-addr32-exec.test (removed)
@@ -1,11 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-addr32-exec.obj.yaml
-# RUN: llvm-objdump -s %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /out:%t.exe /entry:function /subsystem:console %t.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Contents of section .rdata:
-BEFORE: 0000 00000000
-
-AFTER: Contents of section .rdata:
-AFTER: 1000 01204000
-
Removed: lld/trunk/test/pecoff/armnt-addr32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-addr32.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-addr32.test (original)
+++ lld/trunk/test/pecoff/armnt-addr32.test (removed)
@@ -1,11 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-addr32.obj.yaml
-# RUN: llvm-objdump -s %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:is /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Contents of section .rdata:
-BEFORE: 0000 00000000 00000000
-
-AFTER: Contents of section .rdata:
-AFTER: 1000 00104000 00000000
-
Removed: lld/trunk/test/pecoff/armnt-address-of-entry-point.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-address-of-entry-point.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-address-of-entry-point.test (original)
+++ lld/trunk/test/pecoff/armnt-address-of-entry-point.test (removed)
@@ -1,6 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/executable.obj.yaml
-# RUN: lld -flavor link /out:%t.exe %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: AddressOfEntryPoint: 0x1001
-
Removed: lld/trunk/test/pecoff/armnt-blx23t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-blx23t.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-blx23t.test (original)
+++ lld/trunk/test/pecoff/armnt-blx23t.test (removed)
@@ -1,27 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-blx23t.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:function /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 70 47 bx lr
-BEFORE: 2: 00 bf nop
-BEFORE: 4: 2d e9 00 48 push.w {r11, lr}
-BEFORE: 8: eb 46 mov r11, sp
-BEFORE: a: 20 20 movs r0, #32
-BEFORE: c: 00 f0 00 f8 bl #0
-BEFORE: 10: 01 30 adds r0, #1
-BEFORE: 12: bd e8 00 88 pop.w {r11, pc}
-
-AFTER: Disassembly of section .text:
-AFTER: 1000: 70 47 bx lr
-AFTER: 1002: 00 bf nop
-AFTER: 1004: 2d e9 00 48 push.w {r11, lr}
-AFTER: 1008: eb 46 mov r11, sp
-AFTER: 100a: 20 20 movs r0, #32
-AFTER: 100c: ff f7 f8 ff bl #-16
-AFTER: 1010: 01 30 adds r0, #1
-AFTER: 1012: bd e8 00 88 pop.w {r11, pc}
-
Removed: lld/trunk/test/pecoff/armnt-branch24t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-branch24t.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-branch24t.test (original)
+++ lld/trunk/test/pecoff/armnt-branch24t.test (removed)
@@ -1,20 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-branch24t.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:function /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 70 47 bx lr
-BEFORE: 2: 00 bf nop
-BEFORE: 4: 20 20 movs r0, #32
-BEFORE: 6: 00 f0 00 b8 b.w #0
-
-AFTER: Disassembly of section .text:
-AFTER: .text:
-AFTER: 1000: 70 47 bx lr
-AFTER: 1002: 00 bf nop
-AFTER: 1004: 20 20 movs r0, #32
-AFTER: 1006: ff f7 fb bf b.w #-10
-
Removed: lld/trunk/test/pecoff/armnt-exports.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-exports.s?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-exports.s (original)
+++ lld/trunk/test/pecoff/armnt-exports.s (removed)
@@ -1,28 +0,0 @@
-
-# void __declspec(dllexport) function() {}
-# void _DllMainCRTStartup() {}
-
- .syntax unified
- .thumb
- .text
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- bx lr
-
- .def _DllMainCRTStartup
- .scl 2
- .type 32
- .endef
- .global _DllMainCRTStartup
- .align 2
- .thumb_func
-_DllMainCRTStartup
- bx lr
-
Removed: lld/trunk/test/pecoff/armnt-exports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-exports.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-exports.test (original)
+++ lld/trunk/test/pecoff/armnt-exports.test (removed)
@@ -1,10 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-exports.obj.yaml
-# RUN: lld -flavor link /dll /def:%p/Inputs/armnt-exports.def /out:%t.dll %t.obj
-# RUN: llvm-readobj -coff-exports %t.dll | FileCheck %s
-
-CHECK: Export {
-CHECK: Ordinal: 1
-CHECK: Name: function
-CHECK: RVA: 0x2001
-CHECK: }
-
Removed: lld/trunk/test/pecoff/armnt-imports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-imports.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-imports.test (original)
+++ lld/trunk/test/pecoff/armnt-imports.test (removed)
@@ -1,11 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-import.obj.yaml
-# RUN: lld -flavor link /out:%t.exe /subsystem:console %t.obj %p/Inputs/library.lib
-# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
-
-CHECK: Import {
-CHECK: Name: library.dll
-CHECK: ImportLookupTableRVA: 0x4000
-CHECK: ImportAddressTableRVA: 0x2000
-CHECK: Symbol: function (0)
-CHECK: }
-
Removed: lld/trunk/test/pecoff/armnt-mov32t-exec.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-mov32t-exec.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-mov32t-exec.test (original)
+++ lld/trunk/test/pecoff/armnt-mov32t-exec.test (removed)
@@ -1,21 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-mov32t-exec.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:get_function %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 70 47 bx lr
-BEFORE: 2: 00 bf nop
-BEFORE: 4: 40 f2 00 00 movw r0, #0
-BEFORE: 8: c0 f2 00 00 movt r0, #0
-BEFORE: c: 70 47 bx lr
-
-AFTER: Disassembly of section .text:
-AFTER: 1000: 70 47 bx lr
-AFTER: 1002: 00 bf nop
-AFTER: 1004: 41 f2 01 00 movw r0, #4097
-AFTER: 1008: c0 f2 40 00 movt r0, #64
-AFTER: 100c: 70 47 bx lr
-
Removed: lld/trunk/test/pecoff/armnt-movt32t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt-movt32t.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt-movt32t.test (original)
+++ lld/trunk/test/pecoff/armnt-movt32t.test (removed)
@@ -1,17 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-mov32t.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:get_buffer /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 40 f2 00 00 movw r0, #0
-BEFORE: 4: c0 f2 00 00 movt r0, #0
-BEFORE: 8: 70 47 bx lr
-
-AFTER: Disassembly of section .text:
-AFTER: 0: 41 f2 00 00 movw r0, #4096
-AFTER: 4: c0 f2 40 00 movt r0, #64
-AFTER: 8: 70 47 bx lr
-
Removed: lld/trunk/test/pecoff/armnt.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/armnt.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/armnt.test (original)
+++ lld/trunk/test/pecoff/armnt.test (removed)
@@ -1,6 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-obj.yaml
-# RUN: lld -flavor link /out:%t.dll /subsystem:console /entry:main %t.obj
-# RUN: llvm-readobj -sections %t.dll | FileCheck %s
-
-CHECK: Format: COFF-ARM
-
Removed: lld/trunk/test/pecoff/associative.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/associative.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/associative.test (original)
+++ lld/trunk/test/pecoff/associative.test (removed)
@@ -1,10 +0,0 @@
-# RUN: yaml2obj %p/Inputs/associative1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/associative1.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/associative3.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /machine:x86 /subsystem:console /entry:main \
-# RUN: /out:%t.exe -- %t1.obj %t2.obj %t3.obj
-# RUN: obj2yaml %t.exe | FileCheck %s
-
-CHECK: - Name: .CRT
-CHECK: SectionData: '77777777'
Removed: lld/trunk/test/pecoff/base-reloc.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/base-reloc.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/base-reloc.test (original)
+++ lld/trunk/test/pecoff/base-reloc.test (removed)
@@ -1,78 +0,0 @@
-# RUN: yaml2obj %p/Inputs/basereloc.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /opt:noref \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck %s --check-prefix=BASEREL
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force /fixed \
-# RUN: /opt:noref -- %t.obj
-# RUN: llvm-readobj -coff-basereloc %t2.exe | FileCheck %s --check-prefix=NOBASEREL
-
-BASEREL: BaseReloc [
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x2007
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x200C
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x201E
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: ABSOLUTE
-BASEREL-NEXT: Address: 0x2000
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x3007
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x300C
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x301E
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: ABSOLUTE
-BASEREL-NEXT: Address: 0x3000
-BASEREL-NEXT: }
-BASEREL-NEXT: ]
-
-NOBASEREL: BaseReloc [
-NOBASEREL-NEXT: ]
-
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /force /opt:noref \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -file-headers -sections %t3.exe | FileCheck %s \
-# RUN: --check-prefix=BASEREL-HEADER
-#
-# RUN: lld -flavor link /out:%t4.exe /subsystem:console /force /opt:noref \
-# RUN: /fixed -- %t.obj
-# RUN: llvm-readobj -file-headers %t4.exe | FileCheck %s \
-# RUN: --check-prefix=NOBASEREL-HEADER
-
-BASEREL-HEADER-NOT: IMAGE_FILE_RELOCS_STRIPPED
-
-NOBASEREL-HEADER: IMAGE_FILE_RELOCS_STRIPPED
-
-BASEREL-HEADER: BaseRelocationTableRVA: 0x4000
-BASEREL-HEADER: BaseRelocationTableSize: 0x20
-BASEREL-HEADER: Name: .reloc (2E 72 65 6C 6F 63 00 00)
-BASEREL-HEADER-NEXT: VirtualSize: 0x20
-BASEREL-HEADER-NEXT: VirtualAddress: 0x4000
-BASEREL-HEADER-NEXT: RawDataSize: 512
-BASEREL-HEADER-NEXT: PointerToRawData: 0xA00
-BASEREL-HEADER-NEXT: PointerToRelocations: 0x0
-BASEREL-HEADER-NEXT: PointerToLineNumbers: 0x0
-BASEREL-HEADER-NEXT: RelocationCount: 0
-BASEREL-HEADER-NEXT: LineNumberCount: 0
-BASEREL-HEADER-NEXT: Characteristics [ (0x42000040)
-BASEREL-HEADER-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-BASEREL-HEADER-NEXT: ]
Removed: lld/trunk/test/pecoff/baseaddr.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/baseaddr.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/baseaddr.test (original)
+++ lld/trunk/test/pecoff/baseaddr.test (removed)
@@ -1,18 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /opt:noref /subsystem:console /force \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=DEFAULT %s
-#
-# RUN: lld -flavor link /out:%t2.exe /opt:noref /base:8388608 \
-# RUN: /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -file-headers %t2.exe | FileCheck -check-prefix=BASE %s
-
-DEFAULT: ImageBase: 0x400000
-
-BASE: ImageBase: 0x800000
-
-# RUN: not lld -flavor link /base:3 /subsystem:console -- %t.obj >& %t.log
-# RUN: FileCheck -check-prefix=ERROR %s < %t.log
-
-ERROR: Base address have to be multiple of 64K, but got 3
Removed: lld/trunk/test/pecoff/bss-section.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/bss-section.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/bss-section.test (original)
+++ lld/trunk/test/pecoff/bss-section.test (removed)
@@ -1,21 +0,0 @@
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: -- %p/Inputs/bss.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Section {
-CHECK: Number: 1
-CHECK-NEXT: Name: .bss
-CHECK-NEXT: VirtualSize: 0x320
-CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 0
-CHECK-NEXT: PointerToRawData: 0x0
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [
-CHECK-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA
-CHECK-NEXT: IMAGE_SCN_MEM_READ
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE
-CHECK-NEXT: ]
-CHECK-NEXT: }
Removed: lld/trunk/test/pecoff/comdat.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/comdat.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/comdat.test (original)
+++ lld/trunk/test/pecoff/comdat.test (removed)
@@ -1,12 +0,0 @@
-# RUN: yaml2obj %p/Inputs/comdat.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/comdat.obj.yaml > %t2.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t2.obj 2>&1 > %t.log
-#
-# FileCheck complains if the input files is empty, so add a dummy line.
-# RUN: echo foo >> %t.log
-#
-# RUN: FileCheck %s < %t.log
-
-CHECK-NOT: duplicate symbol error
Removed: lld/trunk/test/pecoff/common-symbol.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/common-symbol.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/common-symbol.test (original)
+++ lld/trunk/test/pecoff/common-symbol.test (removed)
@@ -1,14 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/common-symbol.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /machine:x64 /out:%t.exe /subsystem:console /force \
-# RUN: /opt:noref -- %t.obj %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-# Operands of B8 (MOV EAX) are common symbols
-CHECK: 3000: b8 00 10 00 40
-CHECK: 3005: b8 04 10 00 40
-CHECK: 300a: b8 20 10 00 40
-CHECK: 300f: b8 60 10 00 40
-CHECK: 3014: b8 80 10 00 40
Removed: lld/trunk/test/pecoff/conflicting-machine.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/conflicting-machine.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/conflicting-machine.test (original)
+++ lld/trunk/test/pecoff/conflicting-machine.test (removed)
@@ -1,6 +0,0 @@
-# RUN: yaml2obj %p/Inputs/vars-main-x64.obj.yaml > %t-x64.obj
-
-# RUN: not lld -flavor link /machine:x86 /out:%t.exe /entry:main %t-x64.obj 2>&1 \
-# RUN: | FileCheck %s
-
-CHECK: module machine type 'X64' conflicts with target machine type 'X86'
Removed: lld/trunk/test/pecoff/delayimport.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/delayimport.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/delayimport.test (original)
+++ lld/trunk/test/pecoff/delayimport.test (removed)
@@ -1,54 +0,0 @@
-# RUN: yaml2obj %p/Inputs/vars-main-x86.obj.yaml > %t-x86.obj
-# RUN: yaml2obj %p/Inputs/vars-main-x64.obj.yaml > %t-x64.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /entry:main \
-# RUN: /delayload:vars.dll -- %t-x86.obj %p/Inputs/vars.lib
-# RUN: llvm-readobj -coff-imports %t1.exe | FileCheck -check-prefix=X86 %s
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:main \
-# RUN: /machine:x64 /delayload:vars64.dll -- %t-x64.obj %p/Inputs/vars64.lib
-# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=X64 %s
-
-X86: DelayImport {
-X86-NEXT: Name: vars.dll
-X86-NEXT: Attributes: 0x1
-X86-NEXT: ModuleHandle: 0x1000
-X86-NEXT: ImportAddressTable: 0x1004
-X86-NEXT: ImportNameTable: 0x2000
-X86-NEXT: BoundDelayImportTable: 0x0
-X86-NEXT: UnloadDelayImportTable: 0x0
-X86-NEXT: Import {
-X86-NEXT: Symbol: _name_with_underscore (0)
-X86-NEXT: Address: 0x40501F
-X86-NEXT: }
-X86-NEXT: Import {
-X86-NEXT: Symbol: fn (1)
-X86-NEXT: Address: 0x405034
-X86-NEXT: }
-X86-NEXT: Import {
-X86-NEXT: Symbol: (1)
-X86-NEXT: Address: 0x405049
-X86-NEXT: }
-X86-NEXT: }
-
-X64: DelayImport {
-X64-NEXT: Name: vars64.dll
-X64-NEXT: Attributes: 0x1
-X64-NEXT: ModuleHandle: 0x1000
-X64-NEXT: ImportAddressTable: 0x1008
-X64-NEXT: ImportNameTable: 0x2000
-X64-NEXT: BoundDelayImportTable: 0x0
-X64-NEXT: UnloadDelayImportTable: 0x0
-X64-NEXT: Import {
-X64-NEXT: Symbol: _name_with_underscore (0)
-X64-NEXT: Address: 0x14000501F
-X64-NEXT: }
-X64-NEXT: Import {
-X64-NEXT: Symbol: fn (1)
-X64-NEXT: Address: 0x140005076
-X64-NEXT: }
-X64-NEXT: Import {
-X64-NEXT: Symbol: (1)
-X64-NEXT: Address: 0x1400050CD
-X64-NEXT: }
-X64-NEXT: }
Removed: lld/trunk/test/pecoff/dll.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/dll.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/dll.test (original)
+++ lld/trunk/test/pecoff/dll.test (removed)
@@ -1,7 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console \
-# RUN: /entry:start /dll -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: IMAGE_FILE_DLL (0x2000)
Removed: lld/trunk/test/pecoff/dosstub.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/dosstub.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/dosstub.test (original)
+++ lld/trunk/test/pecoff/dosstub.test (removed)
@@ -1,11 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-
-# RUN: echo "MZ Hello world" > %t.stub
-# RUN: lld -flavor link /out:%t.exe /entry:start /subsystem:console \
-# RUN: /stub:%t.stub -- %t.obj
-# RUN: FileCheck -check-prefix=FILE %s < %t.exe
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=READOBJ %s
-
-FILE: MZ Hello world
-
-READOBJ: Format: COFF-i386
Removed: lld/trunk/test/pecoff/drectve.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/drectve.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/drectve.test (original)
+++ lld/trunk/test/pecoff/drectve.test (removed)
@@ -1,39 +0,0 @@
-# Test if the linker can properly parse the .drectve section contents.
-# "drectve.obj" contains "/defaultlib:vars /subsystem:console,42.195 -?foo"
-# in its .drectve section.
-
-# RUN: yaml2obj %p/Inputs/drectve.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /entry:main /opt:noref /libpath:%p/Inputs \
-# RUN: -- %t.obj >& %t.log
-#
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
-# RUN: llvm-objdump -p %t.exe | FileCheck -check-prefix=IMPORT %s
-# RUN: echo >> %t.log
-# RUN: FileCheck -check-prefix=ERROR %s < %t.log
-
-HEADER: MajorOperatingSystemVersion: 42
-HEADER: MinorOperatingSystemVersion: 195
-
-IMPORT: DLL Name: vars.dll
-IMPORT-NEXT: Hint/Ord Name
-IMPORT-NEXT: 0 _name_with_underscore
-IMPORT-NEXT: 1 fn
-IMPORT-NEXT: 1
-
-ERROR-NOT: foo
-
-
-# drectve2.obj contains "/include:foo".
-# RUN: yaml2obj %p/Inputs/drectve2.obj.yaml > %t2.obj
-# RUN: not lld -flavor link /out:%t2.exe /entry:main -- %t2.obj >& %t2.log
-# RUN: FileCheck -check-prefix=UNDEF2 %s < %t2.log
-
-UNDEF2: Undefined symbol: {{.*}}: foo
-
-# drectve4.lib contains "/include:bar".
-# RUN: not lld -flavor link /force /out:%t3.exe /entry:main /include:_fn1 -- \
-# RUN: %t2.obj %p/Inputs/drectve3.lib >& %t3.log
-# RUN: FileCheck -check-prefix=UNDEF3 %s < %t3.log
-
-UNDEF3: Undefined symbol: {{.*}}: bar
Removed: lld/trunk/test/pecoff/dynamic.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/dynamic.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/dynamic.test (original)
+++ lld/trunk/test/pecoff/dynamic.test (removed)
@@ -1,11 +0,0 @@
-# RUN: yaml2obj %p/Inputs/vars-main-x86.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj %p/Inputs/vars.lib
-# RUN: llvm-objdump -p %t.exe | FileCheck %s
-
-CHECK: DLL Name: vars.dll
-CHECK-NEXT: Hint/Ord Name
-CHECK-NEXT: 0 _name_with_underscore
-CHECK-NEXT: 1 fn
-CHECK-NEXT: 1
Removed: lld/trunk/test/pecoff/dynamicbase.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/dynamicbase.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/dynamicbase.test (original)
+++ lld/trunk/test/pecoff/dynamicbase.test (removed)
@@ -1,24 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck %s \
-# RUN: --check-prefix=DYNAMICBASE
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force /dynamicbase:no \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -file-headers %t2.exe | FileCheck %s \
-# RUN: --check-prefix=NODYNAMICBASE
-#
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /force /fixed -- %t.obj
-# RUN: llvm-readobj -file-headers %t3.exe | FileCheck %s \
-# RUN: --check-prefix=NODYNAMICBASE
-#
-# RUN: not lld -flavor link /out:%t4.exe /subsystem:console /force /fixed \
-# RUN: /dynamicbase -- %t.obj 2> %t.err
-# RUN: FileCheck %s --check-prefix=DYNAMIC-AND-FIXED < %t.err
-
-DYNAMICBASE: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
-
-NODYNAMICBASE-NOT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
-
-DYNAMIC-AND-FIXED: /dynamicbase must not be specified with /fixed
Removed: lld/trunk/test/pecoff/entry.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/entry.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/entry.test (original)
+++ lld/trunk/test/pecoff/entry.test (removed)
@@ -1,41 +0,0 @@
-# REQUIRES: asserts
-
-# RUN: yaml2obj %p/Inputs/entry.obj.yaml > %t.obj
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_main=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=MAIN %s < %t.log
-
-MAIN: _mainCRTStartup
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_wmain=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WMAIN %s < %t.log
-
-WMAIN: _wmainCRTStartup
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_WinMain=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_WinMain at 16=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
-
-WINMAIN: _WinMainCRTStartup
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_wWinMain=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WWINMAIN %s < %t.log
-
-WWINMAIN: _wWinMainCRTStartup
-
-# RUN: lld -flavor link /out:%t.exe /alternatename:_main=_foo \
-# RUN: /alternatename:_mainCRTStartup=_bar -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MAINADDR %s
-
-MAINADDR: AddressOfEntryPoint: 0x1004
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:baz -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MANGLE %s
-
-MANGLE: AddressOfEntryPoint: 0x1004
Removed: lld/trunk/test/pecoff/export-warning.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/export-warning.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/export-warning.test (original)
+++ lld/trunk/test/pecoff/export-warning.test (removed)
@@ -1,19 +0,0 @@
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn1 -- %t.obj 2> %t1.log
-# RUN: echo >> %t1.log
-# RUN: FileCheck -check-prefix=CHECK1 %s < %t1.log
-CHECK1-NOT: Export symbol '_exportfn1' specified more than once.
-
-# RUN: lld -flavor link /out:%t2.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn1, at 5 -- %t.obj 2> %t2.log
-# RUN: echo >> %t2.log
-# RUN: FileCheck -check-prefix=CHECK2 %s < %t2.log
-CHECK2: Export symbol '_exportfn1' specified more than once.
-
-# RUN: lld -flavor link /out:%t3.dll /dll /entry:init \
-# RUN: /export:exportfn1, at 8 /export:exportfn1, at 5 -- %t.obj 2> %t3.log
-# RUN: echo >> %t3.log
-# RUN: FileCheck -check-prefix=CHECK3 %s < %t3.log
-CHECK3: Export symbol '_exportfn1' specified more than once.
Removed: lld/trunk/test/pecoff/export.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/export.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/export.test (original)
+++ lld/trunk/test/pecoff/export.test (removed)
@@ -1,90 +0,0 @@
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn2 -- %t.obj
-# RUN: llvm-objdump -p %t1.dll | FileCheck -check-prefix=CHECK1 %s
-
-CHECK1: Export Table:
-CHECK1: DLL name: export.test.tmp1.dll
-CHECK1: Ordinal RVA Name
-CHECK1-NEXT: 1 0x2008 exportfn1
-CHECK1-NEXT: 2 0x2010 exportfn2
-
-# RUN: lld -flavor link /out:%t2.dll /dll /subsystem:console /entry:init \
-# RUN: /export:exportfn1, at 5 /export:exportfn2 -- %t.obj
-# RUN: llvm-objdump -p %t2.dll | FileCheck -check-prefix=CHECK2 %s
-
-CHECK2: Export Table:
-CHECK2: DLL name: export.test.tmp2.dll
-CHECK2: Ordinal RVA Name
-CHECK2-NEXT: 5 0x2008 exportfn1
-CHECK2-NEXT: 6 0x2010 exportfn2
-
-# RUN: lld -flavor link /out:%t3.dll /dll /subsystem:console /entry:init \
-# RUN: /export:exportfn1, at 5,noname /export:exportfn2 -- %t.obj
-# RUN: llvm-objdump -p %t3.dll | FileCheck -check-prefix=CHECK3 %s
-
-CHECK3: Export Table:
-CHECK3: DLL name: export.test.tmp3.dll
-CHECK3: Ordinal RVA Name
-CHECK3-NEXT: 5 0x2008
-CHECK3-NEXT: 6 0x2010 exportfn2
-
-# RUN: lld -flavor link /out:%t4.dll /dll /entry:init \
-# RUN: /def:%p/Inputs/exports.def -- %t.obj
-# RUN: llvm-objdump -p %t4.dll | FileCheck -check-prefix=CHECK4 %s
-
-CHECK4: Export Table:
-CHECK4: DLL name: export.test.tmp4.dll
-CHECK4: Ordinal RVA Name
-CHECK4-NEXT: 5 0x2008 exportfn1
-CHECK4-NEXT: 6 0x2010 exportfn2
-CHECK4-NEXT: 7 0x2010 exportfn3 at 256
-CHECK4-NEXT: 8 0x2010 exportfn5
-
-# RUN: lld -flavor link /out:%t5.dll /dll /entry:init \
-# RUN: /export:exportfn7 -- %t.obj
-# RUN: llvm-objdump -p %t5.dll | FileCheck -check-prefix=CHECK5 %s
-
-CHECK5: Export Table:
-CHECK5: DLL name: export.test.tmp5.dll
-CHECK5: Ordinal RVA Name
-CHECK5-NEXT: 1 0x2010 exportfn3 at 256
-CHECK5-NEXT: 2 0x2010 exportfn7
-
-# RUN: lld -flavor link /out:%t6.dll /dll /entry:init \
-# RUN: /export:exportfn8 -- %t.obj
-# RUN: llvm-objdump -p %t6.dll | FileCheck -check-prefix=CHECK6 %s
-
-CHECK6: Export Table:
-CHECK6: DLL name: export.test.tmp6.dll
-CHECK6: Ordinal RVA Name
-CHECK6-NEXT: 1 0x2010 exportfn3 at 256
-CHECK6-NEXT: 2 0x2010 exportfn8
-
-# RUN: lld -flavor link /out:%t7.dll /dll /entry:init \
-# RUN: /export:exportfn7 /export:exportfn7 at 8 \
-# RUN: /export:exportfn8 /export:exportfn8 /export:exportfn3 -- %t.obj
-# RUN: llvm-objdump -p %t7.dll | FileCheck -check-prefix=DUP %s
-
-DUP: Export Table:
-DUP: DLL name: export.test.tmp7.dll
-DUP: Ordinal RVA Name
-DUP-NEXT: 1 0x2010 exportfn3
-DUP-NEXT: 2 0x2010 exportfn7
-DUP-NEXT: 3 0x2010 exportfn8
-DUP-NOT: ?exportfn8@@YAXXZ
-DUP-NOT: exportfn3 at 256
-
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t8.dll /dll /entry:init \
-# RUN: /export:f1=exportfn1 /export:f2 at 4=exportfn2,private -- %t.obj
-# RUN: llvm-objdump -p %t8.dll | FileCheck -check-prefix=EQUAL %s
-
-EQUAL: Export Table:
-EQUAL: DLL name: export.test.tmp8.dll
-EQUAL: Ordinal RVA Name
-EQUAL-NEXT: 1 0x2010 exportfn3 at 256
-EQUAL-NEXT: 2 0x2008 f1
-EQUAL-NEXT: 3 0x2010 f2{{$}}
Removed: lld/trunk/test/pecoff/exportlib.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/exportlib.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/exportlib.test (original)
+++ lld/trunk/test/pecoff/exportlib.test (removed)
@@ -1,32 +0,0 @@
-# REQUIRES: winlib
-
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn2 -- %t.obj
-# RUN: llvm-readobj %t.lib | FileCheck %s
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-i386
-CHECK: Arch: i386
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-i386
-CHECK: Arch: i386
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-i386
-CHECK: Arch: i386
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-<unknown arch>
-CHECK: Arch: unknown
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-<unknown arch>
-CHECK: Arch: unknown
-CHECK: AddressSize: 32bit
Removed: lld/trunk/test/pecoff/exportlib2.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/exportlib2.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/exportlib2.test (original)
+++ lld/trunk/test/pecoff/exportlib2.test (removed)
@@ -1,21 +0,0 @@
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn2 /lldmoduledeffile:%t1.def -- %t.obj
-# RUN: FileCheck -check-prefix=CHECK1 %s < %t1.def
-
-CHECK1: LIBRARY "exportlib2.test.tmp.dll"
-CHECK1: EXPORTS
-CHECK1: exportfn1 @1
-CHECK1: exportfn2 @2
-CHECK1: exportfn3 at 256 @3
-
-# RUN: lld -flavor link /out:%t.dll /dll /entry:init \
-# RUN: /def:%p/Inputs/exports2.def /lldmoduledeffile:%t2.def -- %t.obj
-# RUN: FileCheck -check-prefix=CHECK2 %s < %t2.def
-
-CHECK2: LIBRARY "exportlib2.test.tmp.dll"
-CHECK2: EXPORTS
-CHECK2: exportfn1 @5
-CHECK2: exportfn3 at 256 @6
-CHECK2: exportfn7 at 8 @7
Removed: lld/trunk/test/pecoff/grouped-sections.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/grouped-sections.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/grouped-sections.test (original)
+++ lld/trunk/test/pecoff/grouped-sections.test (removed)
@@ -1,17 +0,0 @@
-# RUN: yaml2obj %p/Inputs/grouped-sections.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main -- %t.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-#
-# The file "grouped-sections.obj" has three data sections in the following
-# order:
-#
-# .data$2
-# .data$1
-# .data
-#
-# If all the sections will be merged correctly, the resulting ".data"
-# section will have the string "Hello, world".
-
-CHECK: Contents of section .data:
-CHECK-NEXT: Hello, world
Removed: lld/trunk/test/pecoff/hello.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/hello.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/hello.test (original)
+++ lld/trunk/test/pecoff/hello.test (removed)
@@ -1,51 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=FILE %s
-
-FILE: ImageOptionalHeader {
-FILE: SizeOfInitializedData: 1024
-FILE: SizeOfHeaders: 512
-FILE: }
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -sections %t2.exe | FileCheck -check-prefix=SECTIONS %s
-
-SECTIONS: Format: COFF-i386
-SECTIONS-NEXT: Arch: i386
-SECTIONS-NEXT: AddressSize: 32bit
-SECTIONS-NEXT: Sections [
-SECTIONS-NEXT: Section {
-SECTIONS-NEXT: Number: 1
-SECTIONS-NEXT: Name: .data
-SECTIONS-NEXT: VirtualSize: 0x12
-SECTIONS-NEXT: VirtualAddress: 0x1000
-SECTIONS-NEXT: RawDataSize: 512
-SECTIONS-NEXT: PointerToRawData: 0x200
-SECTIONS-NEXT: PointerToRelocations: 0x0
-SECTIONS-NEXT: PointerToLineNumbers: 0x0
-SECTIONS-NEXT: RelocationCount: 0
-SECTIONS-NEXT: LineNumberCount: 0
-SECTIONS-NEXT: Characteristics [
-SECTIONS-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
-SECTIONS-NEXT: IMAGE_SCN_MEM_READ
-SECTIONS-NEXT: IMAGE_SCN_MEM_WRITE
-SECTIONS-NEXT: ]
-SECTIONS-NEXT: }
-SECTIONS-NEXT: Section {
-SECTIONS-NEXT: Number: 2
-SECTIONS-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-SECTIONS-NEXT: VirtualSize: 0x1C
-SECTIONS-NEXT: VirtualAddress: 0x2000
-SECTIONS-NEXT: RawDataSize: 512
-SECTIONS-NEXT: PointerToRawData: 0x400
-SECTIONS-NEXT: PointerToRelocations: 0x0
-SECTIONS-NEXT: PointerToLineNumbers: 0x0
-SECTIONS-NEXT: RelocationCount: 0
-SECTIONS-NEXT: LineNumberCount: 0
-SECTIONS-NEXT: Characteristics [
-SECTIONS-NEXT: IMAGE_SCN_CNT_CODE
-SECTIONS-NEXT: IMAGE_SCN_MEM_EXECUTE
-SECTIONS-NEXT: IMAGE_SCN_MEM_READ
-SECTIONS-NEXT: ]
-SECTIONS-NEXT: }
Removed: lld/trunk/test/pecoff/hello64.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/hello64.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/hello64.test (original)
+++ lld/trunk/test/pecoff/hello64.test (removed)
@@ -1,22 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/hello64.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:windows /machine:x64 \
-# RUN: /entry:main -- %t.obj %p/Inputs/hello64lib.lib
-# RUN: llvm-objdump -disassemble %t.exe | FileCheck %s
-
-CHECK: 6000: 48 83 ec 28 subq $40, %rsp
-CHECK: 6004: 48 c7 c1 00 00 00 00 movq $0, %rcx
-CHECK: 600b: 48 8d 15 f4 af ff ff leaq -20492(%rip), %rdx
-CHECK: 6012: 4c 8d 05 e7 af ff ff leaq -20505(%rip), %r8
-CHECK: 6019: 41 b9 00 00 00 00 movl $0, %r9d
-CHECK: 601f: e8 12 00 00 00 callq 18
-CHECK: 6024: b9 00 00 00 00 movl $0, %ecx
-CHECK: 6029: e8 00 00 00 00 callq 0
-CHECK: 602e: ff 25 cc cf ff ff jmpq *-12340(%rip)
-CHECK: 6034: cc int3
-CHECK: 6035: cc int3
-CHECK: 6036: ff 25 cc cf ff ff jmpq *-12340(%rip)
-CHECK: 603c: cc int3
-CHECK: 603d: cc int3
Removed: lld/trunk/test/pecoff/help.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/help.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/help.test (original)
+++ lld/trunk/test/pecoff/help.test (removed)
@@ -1,4 +0,0 @@
-# RUN: not lld -flavor link /help | FileCheck %s
-# RUN: not lld -flavor link '/?' | FileCheck %s
-
-CHECK: USAGE
Removed: lld/trunk/test/pecoff/imagebase.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/imagebase.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/imagebase.test (original)
+++ lld/trunk/test/pecoff/imagebase.test (removed)
@@ -1,15 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/imagebase.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /entry:_start \
-# RUN: /opt:noref -- %t.obj
-# RUN: llvm-objdump -disassemble %t1.exe | FileCheck -check-prefix=DEFAULT %s
-
-DEFAULT: a1 00 00 40 00 movl 4194304, %eax
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:_start \
-# RUN: /base:65536 /opt:noref -- %t.obj
-# RUN: llvm-objdump -disassemble %t2.exe | FileCheck -check-prefix=BASE %s
-
-BASE: a1 00 00 01 00 movl 65536, %eax
Removed: lld/trunk/test/pecoff/importlib.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/importlib.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/importlib.test (original)
+++ lld/trunk/test/pecoff/importlib.test (removed)
@@ -1,61 +0,0 @@
-# REQUIRES: x86
-
-# Verify that lld can handle .lib files. "main.obj" refers "var" and
-# "fn" defined in "vars.lib".
-#
-# RUN: yaml2obj %p/Inputs/vars-main-x86.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj %p/Inputs/vars.lib
-# RUN: llvm-objdump -d %t1.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t1.exe | FileCheck -check-prefix=IMPORT %s
-# RUN: llvm-readobj -sections %t1.exe | FileCheck -check-prefix=SIZE %s
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:main /opt:noref \
-# RUN: /libpath:%p/Inputs -- %t.obj vars.lib
-# RUN: llvm-objdump -d %t2.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=IMPORT %s
-#
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /entry:main /opt:noref \
-# RUN: /libpath:%p/Inputs /defaultlib:vars.lib -- %t.obj
-# RUN: llvm-objdump -d %t3.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t3.exe | FileCheck -check-prefix=IMPORT %s
-#
-# RUN: env LIB=%p/Inputs lld -flavor link /out:%t4.exe /subsystem:console \
-# RUN: /opt:noref /entry:main -- %t.obj vars.lib
-# RUN: llvm-objdump -d %t4.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t4.exe | FileCheck -check-prefix=IMPORT %s
-#
-# RUN: env LINK="/out:%t5.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj" lld -flavor link %p/Inputs/vars.lib
-# RUN: llvm-objdump -d %t5.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t5.exe | FileCheck -check-prefix=IMPORT %s
-
-TEXT: Disassembly of section .text:
-TEXT-NEXT: .text:
-TEXT-NEXT: pushl %ebp
-TEXT-NEXT: movl %esp, %ebp
-TEXT-NEXT: pushl %esi
-TEXT-NEXT: calll *{{[0-9]+}}
-TEXT-NEXT: movl {{[0-9]+}}, %ecx
-TEXT-NEXT: movl (%ecx), %esi
-TEXT-NEXT: addl %eax, %esi
-TEXT-NEXT: calll *{{[0-9]+}}
-TEXT-NEXT: addl %esi, %eax
-TEXT-NEXT: popl %esi
-TEXT-NEXT: popl %ebp
-TEXT-NEXT: ret
-
-IMPORT: Import {
-IMPORT-NEXT: Name: vars.dll
-IMPORT-NEXT: ImportLookupTableRVA: 0x4000
-IMPORT-NEXT: ImportAddressTableRVA: 0x2000
-IMPORT-NEXT: Symbol: _name_with_underscore (0)
-IMPORT-NEXT: Symbol: fn (1)
-IMPORT-NEXT: Symbol: (1)
-IMPORT-NEXT: }
-
-SIZE: Section {
-SIZE-NEXT: Number: 1
-SIZE-NEXT: Name: .idata (2E 69 64 61 74 61 00 00)
-SIZE-NEXT: VirtualSize: 0x27
Removed: lld/trunk/test/pecoff/include.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/include.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/include.test (original)
+++ lld/trunk/test/pecoff/include.test (removed)
@@ -1,8 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: not lld -flavor link /out:%t.exe /include:sym1 /include:sym2 \
-# RUN: /subsystem:console -- %t.obj 2> %t.log
-# RUN: FileCheck %s < %t.log
-
-CHECK: Undefined symbol: <command line option /include>: sym1
-CHECK: Undefined symbol: <command line option /include>: sym2
Removed: lld/trunk/test/pecoff/lib.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/lib.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/lib.test (original)
+++ lld/trunk/test/pecoff/lib.test (removed)
@@ -1,15 +0,0 @@
-# REQUIRES: x86
-
-# Verify that lld can handle a library file.
-#
-# RUN: yaml2obj %p/Inputs/main.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj %p/Inputs/static.lib
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: Disassembly of section .text:
-CHECK-NEXT: .text:
-CHECK-NEXT: movl 4198400, %eax
-CHECK-NEXT: addl 4198404, %eax
-CHECK-NEXT: ret
Removed: lld/trunk/test/pecoff/libarg.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/libarg.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/libarg.test (original)
+++ lld/trunk/test/pecoff/libarg.test (removed)
@@ -1,9 +0,0 @@
-# REQUIRES: winlib
-#
-# If argv[1] == "/lib", link.exe morphs into lib.exe.
-#
-# RUN: lld -flavor link /lib >& %t.log
-# RUN: FileCheck %s < %t.log
-
-CHECK-NOT: unrecognized option '/lib'
-CHECK: usage: LIB
Removed: lld/trunk/test/pecoff/localyimported.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/localyimported.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/localyimported.test (original)
+++ lld/trunk/test/pecoff/localyimported.test (removed)
@@ -1,15 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-#
-# RUN: not lld -flavor link /out:%t.exe /include:__imp__nosuchsym %t.obj \
-# RUN: >& %t.log
-# RUN: FileCheck -check-prefix=X86 %s < %t.log
-
-X86: Undefined symbol: __imp__nosuchsym: _nosuchsym
-
-# RUN: yaml2obj %p/Inputs/hello64.obj.yaml > %t2.obj
-#
-# RUN: not lld -flavor link /out:%t2.exe /include:__imp__nosuchsym %t2.obj \
-# RUN: /machine:x64 >& %t2.log
-# RUN: FileCheck -check-prefix=X64 %s < %t2.log
-
-X64: Undefined symbol: __imp__nosuchsym: _nosuchsym
Removed: lld/trunk/test/pecoff/long-section-name.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/long-section-name.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/long-section-name.test (original)
+++ lld/trunk/test/pecoff/long-section-name.test (removed)
@@ -1,7 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start \
-# RUN: /merge:.text=.longsectionname -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Name: .longsectionname (2F 34 00 00 00 00 00 00)
Removed: lld/trunk/test/pecoff/machinetype.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/machinetype.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/machinetype.test (original)
+++ lld/trunk/test/pecoff/machinetype.test (removed)
@@ -1,13 +0,0 @@
-# RUN: yaml2obj %p/Inputs/machine-type-unknown.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/hello64.obj.yaml > %t3.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force -- %t1.obj %t2.obj
-# RUN: llvm-readobj %t.exe | FileCheck -check-prefix=X86 %s
-
-X86: Arch: i386
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force -- %t1.obj %t3.obj
-# RUN: llvm-readobj %t.exe | FileCheck -check-prefix=X64 %s
-
-X64: Arch: x86_64
Removed: lld/trunk/test/pecoff/manifest.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/manifest.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/manifest.test (original)
+++ lld/trunk/test/pecoff/manifest.test (removed)
@@ -1,63 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force \
-# RUN: -- %t.obj
-# RUN: FileCheck -check-prefix=MANIFEST %s < %t1.exe.manifest
-
-MANIFEST: <?xml version="1.0" standalone="yes"?>
-MANIFEST: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-MANIFEST: manifestVersion="1.0">
-MANIFEST: <trustInfo>
-MANIFEST: <security>
-MANIFEST: <requestedPrivileges>
-MANIFEST: <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
-MANIFEST: </requestedPrivileges>
-MANIFEST: </security>
-MANIFEST: </trustInfo>
-MANIFEST: </assembly>
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force \
-# RUN: /manifestuac:"level='requireAdministrator' uiAccess='true'" -- %t.obj
-# RUN: FileCheck -check-prefix=UAC %s < %t2.exe.manifest
-
-UAC: <?xml version="1.0" standalone="yes"?>
-UAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-UAC: manifestVersion="1.0">
-UAC: <trustInfo>
-UAC: <security>
-UAC: <requestedPrivileges>
-UAC: <requestedExecutionLevel level='requireAdministrator' uiAccess='true'/>
-UAC: </requestedPrivileges>
-UAC: </security>
-UAC: </trustInfo>
-UAC: </assembly>
-
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /force \
-# RUN: /manifestdependency:"foo='bar'" -- %t.obj
-# RUN: FileCheck -check-prefix=DEPENDENCY %s < %t3.exe.manifest
-
-DEPENDENCY: <?xml version="1.0" standalone="yes"?>
-DEPENDENCY: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-DEPENDENCY: manifestVersion="1.0">
-DEPENDENCY: <trustInfo>
-DEPENDENCY: <security>
-DEPENDENCY: <requestedPrivileges>
-DEPENDENCY: <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
-DEPENDENCY: </requestedPrivileges>
-DEPENDENCY: </security>
-DEPENDENCY: </trustInfo>
-DEPENDENCY: <dependency>
-DEPENDENCY: <dependentAssembly>
-DEPENDENCY: <assemblyIdentity foo='bar' />
-DEPENDENCY: </dependentAssembly>
-DEPENDENCY: </dependency>
-DEPENDENCY: </assembly>
-
-# RUN: lld -flavor link /out:%t4.exe /subsystem:console /force \
-# RUN: /manifestuac:no -- %t.obj
-# RUN: FileCheck -check-prefix=NOUAC %s < %t4.exe.manifest
-
-NOUAC: <?xml version="1.0" standalone="yes"?>
-NOUAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-NOUAC: manifestVersion="1.0">
-NOUAC: </assembly>
Removed: lld/trunk/test/pecoff/merge-largest.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/merge-largest.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/merge-largest.test (original)
+++ lld/trunk/test/pecoff/merge-largest.test (removed)
@@ -1,24 +0,0 @@
-# RUN: yaml2obj %p/Inputs/merge-largest1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/merge-largest2.obj.yaml > %t2.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t2.obj 2>&1 > %t.log
-#
-# FileCheck complains if the input files is empty, so add a dummy line.
-# RUN: echo foo >> %t.log
-# RUN: FileCheck -check-prefix=STDERR %s < %t.log
-#
-# RUN: llvm-readobj -sections %t.exe | FileCheck -check-prefix=READOBJ %s
-
-STDERR-NOT: duplicate symbol error
-
-READOBJ: Format: COFF-i386
-READOBJ-NEXT: Arch: i386
-READOBJ-NEXT: AddressSize: 32bit
-READOBJ-NEXT: Sections [
-READOBJ-NEXT: Section {
-READOBJ-NEXT: Number: 1
-READOBJ-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-READOBJ-NEXT: VirtualSize: 0x8
-READOBJ-NEXT: VirtualAddress: 0x1000
-READOBJ-NEXT: RawDataSize: 512
Removed: lld/trunk/test/pecoff/merge-same-size.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/merge-same-size.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/merge-same-size.test (original)
+++ lld/trunk/test/pecoff/merge-same-size.test (removed)
@@ -1,32 +0,0 @@
-# RUN: yaml2obj %p/Inputs/merge-same-size1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/merge-same-size2.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/merge-same-size3.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t2.obj > %t1.log 2>&1
-#
-# FileCheck complains if the input files is empty, so add a dummy line.
-# RUN: echo foo >> %t1.log
-# RUN: FileCheck -check-prefix=SAMESIZE %s < %t1.log
-#
-# RUN: not lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t3.obj > %t2.log 2>&1
-# RUN: FileCheck -check-prefix=DIFFERENT %s < %t2.log
-#
-# RUN: llvm-readobj -sections %t.exe | FileCheck -check-prefix=READOBJ %s
-
-SAMESIZE-NOT: duplicate symbol error
-
-DIFFERENT: Size mismatch
-DIFFERENT: duplicate symbol error
-
-READOBJ: Format: COFF-i386
-READOBJ-NEXT: Arch: i386
-READOBJ-NEXT: AddressSize: 32bit
-READOBJ-NEXT: Sections [
-READOBJ-NEXT: Section {
-READOBJ-NEXT: Number: 1
-READOBJ-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-READOBJ-NEXT: VirtualSize: 0x7
-READOBJ-NEXT: VirtualAddress: 0x1000
-READOBJ-NEXT: RawDataSize: 512
Removed: lld/trunk/test/pecoff/multi.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/multi.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/multi.test (original)
+++ lld/trunk/test/pecoff/multi.test (removed)
@@ -1,17 +0,0 @@
-# REQUIRES: x86
-
-# Verify that lld can handle multiple input files.
-#
-# RUN: yaml2obj %p/Inputs/main.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/static-data1.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/static-data2.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t1.obj %t2.obj %t3.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: Disassembly of section .text:
-CHECK: .text:
-CHECK: movl {{[0-9]+}}, %eax
-CHECK: addl {{[0-9]+}}, %eax
-CHECK: ret
Removed: lld/trunk/test/pecoff/noentry.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/noentry.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/noentry.test (original)
+++ lld/trunk/test/pecoff/noentry.test (removed)
@@ -1,10 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /noentry /dll -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: AddressOfEntryPoint: 0x0
-
-# RUN: not lld -flavor link /out:%t.exe /noentry -- %t.obj >& %t.log
-# RUN: FileCheck --check-prefix=ERROR %s < %t.log
-
-ERROR: /noentry must be specified with /dll
Removed: lld/trunk/test/pecoff/nonstandard-sections.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/nonstandard-sections.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/nonstandard-sections.test (original)
+++ lld/trunk/test/pecoff/nonstandard-sections.test (removed)
@@ -1,75 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nonstandard-sections.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Arch: i386
-CHECK-NEXT: AddressSize: 32bit
-CHECK-NEXT: Sections [
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 1
-CHECK-NEXT: Name: .bar (2E 62 61 72 00 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x400
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0x40000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 2
-CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x2000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x600
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 3
-CHECK-NEXT: Name: .foo (2E 66 6F 6F 00 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x3000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x800
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 4
-CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x4000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0xA00
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0x60000020)
-CHECK-NEXT: IMAGE_SCN_CNT_CODE (0x20)
-CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: ]
Removed: lld/trunk/test/pecoff/options.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/options.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/options.test (original)
+++ lld/trunk/test/pecoff/options.test (removed)
@@ -1,40 +0,0 @@
-# Tests for miscellaneous command line options.
-
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t-x86.obj
-# RUN: yaml2obj %p/Inputs/nop64.obj.yaml > %t-x64.obj
-
-# RUN: lld -flavor link /align:8192 /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ALIGN %s
-ALIGN: SectionAlignment: 8192
-
-# RUN: lld -flavor link /allowbind:no /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOBIND %s
-NOBIND: IMAGE_DLL_CHARACTERISTICS_NO_BIND
-
-# RUN: lld -flavor link /allowisolation:no /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOISO %s
-NOISO: IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION
-
-# RUN: lld -flavor link /swaprun:cd /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=RUNCD %s
-RUNCD: IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
-
-# RUN: lld -flavor link /swaprun:net /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=RUNNET %s
-RUNNET: IMAGE_FILE_NET_RUN_FROM_SWAP
-
-# RUN: lld -flavor link /machine:x64 /force /highentropyva /out:%t.exe \
-# RUN: /entry:start /subsystem:console -- %t-x64.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ENT %s
-ENT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
-
-# RUN: lld -flavor link /machine:x64 /force /highentropyva:no /out:%t.exe \
-# RUN: /entry:start /subsystem:console -- %t-x64.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOENT %s
-NOENT-NOT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
-
Removed: lld/trunk/test/pecoff/pe32plus.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/pe32plus.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/pe32plus.test (original)
+++ lld/trunk/test/pecoff/pe32plus.test (removed)
@@ -1,87 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop64.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start \
-# RUN: /machine:x64 -- %t.obj %p/Inputs/vars.lib
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: Format: COFF-x86-64
-CHECK-NEXT: Arch: x86_64
-CHECK-NEXT: AddressSize: 64bit
-CHECK-NEXT: ImageFileHeader {
-CHECK-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 (0x8664)
-CHECK-NEXT: SectionCount: 5
-CHECK-NEXT: TimeDateStamp:
-CHECK-NEXT: PointerToSymbolTable: 0x0
-CHECK-NEXT: SymbolCount: 0
-CHECK-NEXT: OptionalHeaderSize: 240
-CHECK-NEXT: Characteristics [ (0x22)
-CHECK-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2)
-CHECK-NEXT: IMAGE_FILE_LARGE_ADDRESS_AWARE (0x20)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: ImageOptionalHeader {
-CHECK-NEXT: MajorLinkerVersion: 0
-CHECK-NEXT: MinorLinkerVersion: 0
-CHECK-NEXT: SizeOfCode: 512
-CHECK-NEXT: SizeOfInitializedData: 2048
-CHECK-NEXT: SizeOfUninitializedData: 0
-CHECK-NEXT: AddressOfEntryPoint: 0x5000
-CHECK-NEXT: BaseOfCode: 0x5000
-CHECK-NEXT: ImageBase: 0x140000000
-CHECK-NEXT: SectionAlignment: 4096
-CHECK-NEXT: FileAlignment: 512
-CHECK-NEXT: MajorOperatingSystemVersion: 6
-CHECK-NEXT: MinorOperatingSystemVersion: 0
-CHECK-NEXT: MajorImageVersion: 0
-CHECK-NEXT: MinorImageVersion: 0
-CHECK-NEXT: MajorSubsystemVersion: 6
-CHECK-NEXT: MinorSubsystemVersion: 0
-CHECK-NEXT: SizeOfImage: 24576
-CHECK-NEXT: SizeOfHeaders: 1024
-CHECK-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3)
-CHECK-NEXT: Characteristics [ (0x8160)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA (0x20)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000)
-CHECK-NEXT: ]
-CHECK-NEXT: SizeOfStackReserve: 1048576
-CHECK-NEXT: SizeOfStackCommit: 4096
-CHECK-NEXT: SizeOfHeapReserve: 1048576
-CHECK-NEXT: SizeOfHeapCommit: 4096
-CHECK-NEXT: NumberOfRvaAndSize: 16
-CHECK-NEXT: DataDirectory {
-CHECK-NEXT: ExportTableRVA: 0x0
-CHECK-NEXT: ExportTableSize: 0x0
-CHECK-NEXT: ImportTableRVA: 0x3000
-CHECK-NEXT: ImportTableSize: 0x28
-CHECK-NEXT: ResourceTableRVA: 0x0
-CHECK-NEXT: ResourceTableSize: 0x0
-CHECK-NEXT: ExceptionTableRVA: 0x0
-CHECK-NEXT: ExceptionTableSize: 0x0
-CHECK-NEXT: CertificateTableRVA: 0x0
-CHECK-NEXT: CertificateTableSize: 0x0
-CHECK-NEXT: BaseRelocationTableRVA: 0x0
-CHECK-NEXT: BaseRelocationTableSize: 0x0
-CHECK-NEXT: DebugRVA: 0x0
-CHECK-NEXT: DebugSize: 0x0
-CHECK-NEXT: ArchitectureRVA: 0x0
-CHECK-NEXT: ArchitectureSize: 0x0
-CHECK-NEXT: GlobalPtrRVA: 0x0
-CHECK-NEXT: GlobalPtrSize: 0x0
-CHECK-NEXT: TLSTableRVA: 0x0
-CHECK-NEXT: TLSTableSize: 0x0
-CHECK-NEXT: LoadConfigTableRVA: 0x0
-CHECK-NEXT: LoadConfigTableSize: 0x0
-CHECK-NEXT: BoundImportRVA: 0x0
-CHECK-NEXT: BoundImportSize: 0x0
-CHECK-NEXT: IATRVA: 0x2000
-CHECK-NEXT: IATSize: 0x10
-CHECK-NEXT: DelayImportDescriptorRVA: 0x0
-CHECK-NEXT: DelayImportDescriptorSize: 0x0
-CHECK-NEXT: CLRRuntimeHeaderRVA: 0x0
-CHECK-NEXT: CLRRuntimeHeaderSize: 0x0
-CHECK-NEXT: ReservedRVA: 0x0
-CHECK-NEXT: ReservedSize: 0x0
-CHECK-NEXT: }
-CHECK-NEXT: }
Removed: lld/trunk/test/pecoff/reloc.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/reloc.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/reloc.test (original)
+++ lld/trunk/test/pecoff/reloc.test (removed)
@@ -1,16 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/reloc.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/abs.obj.yaml > %t2.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /opt:noref \
-# RUN: -- %t1.obj %t2.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: .text:
-CHECK: 3000: 68 02 00 00 00
-CHECK: 3005: 68 05 00 00 00
-CHECK: 300a: 68 00 10 40 00
-CHECK: 300f: 68 00 10 40 00
-CHECK: 3014: 68 00 20 40 00
-CHECK: 3019: 68 ef be ad de
Removed: lld/trunk/test/pecoff/reloc64.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/reloc64.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/reloc64.test (original)
+++ lld/trunk/test/pecoff/reloc64.test (removed)
@@ -1,20 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/reloc64.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /machine:x64 \
-# RUN: /entry:entry -- %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: Disassembly of section .text:
-CHECK-NEXT: .text:
-CHECK-NEXT: 1000: 48 b8 28 10 00 40 01 00 00 ff
-CHECK-NEXT: 100a: e8 19 00 00 ff
-CHECK-NEXT: 100f: e8 13 00 00 ff
-CHECK-NEXT: 1014: e8 0d 00 00 ff
-CHECK-NEXT: 1019: e8 07 00 00 ff
-CHECK-NEXT: 101e: e8 01 00 00 ff
-CHECK-NEXT: 1023: e8 fb ff ff fe
-CHECK-NEXT: 1028: e8 01 00 00 ff
-CHECK-NEXT: 102d: e8 28 00 00 ff
-CHECK-NEXT: 1032: c3
Removed: lld/trunk/test/pecoff/resource.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/resource.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/resource.test (original)
+++ lld/trunk/test/pecoff/resource.test (removed)
@@ -1,18 +0,0 @@
-# REQUIRES: winres
-
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start /opt:noref \
-# RUN: -- %t.obj %p/Inputs/resource.res
-
-# Check if the binary contains UTF-16LE string "Hello" copied from resource.res.
-# RUN: FileCheck --check-prefix=EXE %s < %t.exe
-
-EXE: {{H.e.l.l.o}}
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start /opt:noref \
-# RUN: /manifest:embed -- %t.obj %p/Inputs/resource.res
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: ResourceTableRVA: 0x1000
-CHECK: ResourceTableSize: 0x208
Removed: lld/trunk/test/pecoff/responsefile.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/responsefile.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/responsefile.test (original)
+++ lld/trunk/test/pecoff/responsefile.test (removed)
@@ -1,7 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-# RUN: not lld -flavor link /verbose @%p/Inputs/responsefile.txt >& %t.log
-# RUN: FileCheck %s < %t.log
-
-CHECK: warning: ignoring unknown argument: -foo
-CHECK: warning: ignoring unknown argument: -bar\baz
-Command line: link /verbose -foo -bar\baz
Removed: lld/trunk/test/pecoff/safeseh.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/safeseh.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/safeseh.test (original)
+++ lld/trunk/test/pecoff/safeseh.test (removed)
@@ -1,9 +0,0 @@
-# "hello.obj" does not have the symbol "@feat.00", so it's not
-# compatible with SEH.
-
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t1.obj
-# RUN: not lld -flavor link /safeseh /out:%t1.exe /subsystem:console \
-# RUN: -- %t1.obj 2> %t1.err
-# RUN: FileCheck -check-prefix=INCOMPAT %s < %t1.err
-
-INCOMPAT: /SAFESEH is specified, but {{.*}} is not compatible with SEH.
Removed: lld/trunk/test/pecoff/secrel.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/secrel.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/secrel.test (original)
+++ lld/trunk/test/pecoff/secrel.test (removed)
@@ -1,16 +0,0 @@
-# RUN: yaml2obj %p/Inputs/secrel1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/secrel2.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/secrel2.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main \
-# RUN: -- %t1.obj %t2.obj %t3.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-CHECK: Contents of section .data:
-CHECK: 1000 00000000 00000000 00000000 00000000
-CHECK: 1010 10000000 00000000 00000000 00000000
-CHECK: 1020 20000000 00000000 00000000 00000000
-CHECK: Contents of section .data2:
-CHECK: 2000 00000000 00000000 00000000 00000000
-CHECK: 2010 10000000 00000000 00000000 00000000
-CHECK: 2020 20000000 00000000 00000000 00000000
Removed: lld/trunk/test/pecoff/section-attribute.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/section-attribute.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/section-attribute.test (original)
+++ lld/trunk/test/pecoff/section-attribute.test (removed)
@@ -1,45 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nonstandard-sections.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: /section:.foo,d /section:.bar,rw /section:.text,rwe -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Sections [
-CHECK: Section {
-CHECK: Number: 1
-CHECK: Name: .bar (2E 62 61 72 00 00 00 00)
-CHECK: Characteristics [ (0xC0000040)
-CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: Section {
-CHECK: Number: 2
-CHECK: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK: Characteristics [ (0xC0000040)
-CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: Section {
-CHECK: Number: 3
-CHECK: Name: .foo (2E 66 6F 6F 00 00 00 00)
-CHECK: Characteristics [ (0xC2000040)
-CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: Section {
-CHECK: Number: 4
-CHECK: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK: Characteristics [ (0xE0000020)
-CHECK: IMAGE_SCN_CNT_CODE (0x20)
-CHECK: IMAGE_SCN_MEM_EXECUTE (0x20000000)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: ]
Removed: lld/trunk/test/pecoff/section-renaming.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/section-renaming.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/section-renaming.test (original)
+++ lld/trunk/test/pecoff/section-renaming.test (removed)
@@ -1,61 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nonstandard-sections.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: /merge:.foo=.hoge /merge:.bar=.text -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Format: COFF-i386
-CHECK-NEXT: Arch: i386
-CHECK-NEXT: AddressSize: 32bit
-CHECK-NEXT: Sections [
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 1
-CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x200
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 2
-CHECK-NEXT: Name: .hoge (2E 68 6F 67 65 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x2000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x400
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 3
-CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK-NEXT: VirtualSize: 0x8
-CHECK-NEXT: VirtualAddress: 0x3000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x600
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0x60000020)
-CHECK-NEXT: IMAGE_SCN_CNT_CODE (0x20)
-CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: ]
Removed: lld/trunk/test/pecoff/seh.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/seh.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/seh.test (original)
+++ lld/trunk/test/pecoff/seh.test (removed)
@@ -1,31 +0,0 @@
-# RUN: yaml2obj %p/Inputs/seh.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /nodefaultlib \
-# RUN: -- %t.obj
-# RUN: llvm-objdump -private-headers %t.exe | FileCheck %s
-
-CHECK: Load configuration:
-CHECK: Timestamp: 0
-CHECK: Major Version: 0
-CHECK: Minor Version: 0
-CHECK: GlobalFlags Clear: 0
-CHECK: GlobalFlags Set: 0
-CHECK: Critical Section Default Timeout: 0
-CHECK: Decommit Free Block Threshold: 0
-CHECK: Decommit Total Free Threshold: 0
-CHECK: Lock Prefix Table: 0
-CHECK: Maximum Allocation Size: 0
-CHECK: Virtual Memory Threshold: 0
-CHECK: Process Affinity Mask: 0
-CHECK: Process Heap Flags: 0
-CHECK: CSD Version: 0
-CHECK: Security Cookie: 0
-CHECK: SEH Table: 4206592
-CHECK: SEH Count: 2
-CHECK: SEH Table: 0x{{[0-9a-f]+}} 0x{{[0-9a-f]+}}
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /nodefaultlib \
-# RUN: /safeseh:no -- %t.obj
-# RUN: llvm-objdump -private-headers %t.exe | FileCheck -check-prefix=NOSEH %s
-
-NOSEH-NOT: SEH Table:
Removed: lld/trunk/test/pecoff/seh64.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/seh64.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/seh64.test (original)
+++ lld/trunk/test/pecoff/seh64.test (removed)
@@ -1,57 +0,0 @@
-# RUN: yaml2obj %p/Inputs/unwind.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /machine:x64 /out:%t.exe /subsystem:console /force \
-# RUN: /nodefaultlib -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
-# RUN: llvm-objdump -unwind-info %t.exe | FileCheck -check-prefix=UNWIND %s
-
-HEADER: ExceptionTableRVA: 0x1000
-
-UNWIND: Function Table:
-UNWIND: Start Address: 0x2000
-UNWIND: End Address: 0x201b
-UNWIND: Unwind Info Address: 0x3000
-UNWIND: Version: 1
-UNWIND: Flags: 1 UNW_ExceptionHandler
-UNWIND: Size of prolog: 18
-UNWIND: Number of Codes: 8
-UNWIND: Frame register: RBX
-UNWIND: Frame offset: 0
-UNWIND: Unwind Codes:
-UNWIND: 0x12: UOP_SetFPReg
-UNWIND: 0x0f: UOP_PushNonVol RBX
-UNWIND: 0x0e: UOP_SaveXMM128 XMM8 [0x0000]
-UNWIND: 0x09: UOP_SaveNonVol RSI [0x0010]
-UNWIND: 0x04: UOP_AllocSmall 24
-UNWIND: 0x00: UOP_PushMachFrame w/o error code
-UNWIND: Function Table:
-UNWIND: Start Address: 0x2012
-UNWIND: End Address: 0x2012
-UNWIND: Unwind Info Address: 0x301c
-UNWIND: Version: 1
-UNWIND: Flags: 4 UNW_ChainInfo
-UNWIND: Size of prolog: 0
-UNWIND: Number of Codes: 0
-UNWIND: No frame pointer used
-UNWIND: Function Table:
-UNWIND: Start Address: 0x201b
-UNWIND: End Address: 0x201c
-UNWIND: Unwind Info Address: 0x302c
-UNWIND: Version: 1
-UNWIND: Flags: 0
-UNWIND: Size of prolog: 0
-UNWIND: Number of Codes: 0
-UNWIND: No frame pointer used
-UNWIND: Function Table:
-UNWIND: Start Address: 0x201c
-UNWIND: End Address: 0x2039
-UNWIND: Unwind Info Address: 0x3034
-UNWIND: Version: 1
-UNWIND: Flags: 0
-UNWIND: Size of prolog: 14
-UNWIND: Number of Codes: 6
-UNWIND: No frame pointer used
-UNWIND: Unwind Codes:
-UNWIND: 0x0e: UOP_AllocLarge 8454128
-UNWIND: 0x07: UOP_AllocLarge 8190
-UNWIND: 0x00: UOP_PushMachFrame w/o error code
Removed: lld/trunk/test/pecoff/subsystem.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/subsystem.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/subsystem.test (original)
+++ lld/trunk/test/pecoff/subsystem.test (removed)
@@ -1,12 +0,0 @@
-# RUN: yaml2obj %p/Inputs/subsystem.main.yaml > %t.main.obj
-# RUN: yaml2obj %p/Inputs/subsystem.winmain.yaml > %t.winmain.obj
-#
-# RUN: lld -flavor link /out:%t.main.exe -- %t.main.obj
-# RUN: llvm-readobj -file-headers %t.main.exe | FileCheck -check-prefix=MAIN %s
-#
-# RUN: lld -flavor link /out:%t.winmain.exe -- %t.winmain.obj
-# RUN: llvm-readobj -file-headers %t.winmain.exe | \
-# RUN: FileCheck -check-prefix=WINMAIN %s
-
-MAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
-WINMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
Removed: lld/trunk/test/pecoff/tls.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/tls.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/tls.test (original)
+++ lld/trunk/test/pecoff/tls.test (removed)
@@ -1,14 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/tlsused.obj.yaml > %t2.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force -- %t1.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=NOTLS %s
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force -- %t1.obj %t2.obj
-# RUN: llvm-readobj -file-headers %t2.exe | FileCheck -check-prefix=TLS %s
-
-NOTLS: TLSTableRVA: 0x0
-NOTLS: TLSTableSize: 0x0
-
-TLS: TLSTableRVA: 0x1014
-TLS: TLSTableSize: 0x18
Removed: lld/trunk/test/pecoff/trivial.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/trivial.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/trivial.test (original)
+++ lld/trunk/test/pecoff/trivial.test (removed)
@@ -1,103 +0,0 @@
-# Checks functionality of PECOFF writer. "nop.obj" is an object that has only
-# text section. Other data, including data sections, relocations, symbol
-# tables are not present in nop.obj.
-#
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console,3.11 /version:1.25 \
-# RUN: /entry:start /opt:noref -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=FILE %s
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:start \
-# RUN: /opt:noref -- %t.obj
-# RUN: llvm-readobj -sections %t2.exe | FileCheck -check-prefix=SECTIONS %s
-
-FILE: Format: COFF-i386
-FILE-NEXT: Arch: i386
-FILE-NEXT: AddressSize: 32bit
-FILE-NEXT: ImageFileHeader {
-FILE-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C)
-FILE-NEXT: SectionCount: 1
-FILE-NEXT: TimeDateStamp:
-FILE-NEXT: PointerToSymbolTable: 0x0
-FILE-NEXT: SymbolCount: 0
-FILE-NEXT: OptionalHeaderSize: 224
-FILE-NEXT: Characteristics [ (0x102)
-FILE-NEXT: IMAGE_FILE_32BIT_MACHINE (0x100)
-FILE-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2)
-FILE-NEXT: ]
-FILE-NEXT: }
-FILE-NEXT: ImageOptionalHeader {
-FILE-NEXT: MajorLinkerVersion: 0
-FILE-NEXT: MinorLinkerVersion: 0
-FILE-NEXT: SizeOfCode: 512
-FILE-NEXT: SizeOfInitializedData: 0
-FILE-NEXT: SizeOfUninitializedData: 0
-FILE-NEXT: AddressOfEntryPoint: 0x1000
-FILE-NEXT: BaseOfCode: 0x1000
-FILE-NEXT: BaseOfData: 0
-FILE-NEXT: ImageBase: 0x400000
-FILE-NEXT: SectionAlignment: 4096
-FILE-NEXT: FileAlignment: 512
-FILE-NEXT: MajorOperatingSystemVersion: 3
-FILE-NEXT: MinorOperatingSystemVersion: 11
-FILE-NEXT: MajorImageVersion: 1
-FILE-NEXT: MinorImageVersion: 25
-FILE-NEXT: MajorSubsystemVersion: 3
-FILE-NEXT: MinorSubsystemVersion: 11
-FILE-NEXT: SizeOfImage: 8192
-FILE-NEXT: SizeOfHeaders: 512
-FILE-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3)
-FILE-NEXT: Characteristics [ (0x8540)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_NO_SEH (0x400)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000)
-FILE-NEXT: ]
-FILE-NEXT: SizeOfStackReserve: 1048576
-FILE-NEXT: SizeOfStackCommit: 4096
-FILE-NEXT: SizeOfHeapReserve: 1048576
-FILE-NEXT: SizeOfHeapCommit: 4096
-FILE-NEXT: NumberOfRvaAndSize: 16
-FILE: DOSHeader {
-FILE-NEXT: Magic: MZ
-FILE-NEXT: UsedBytesInTheLastPage: 0
-FILE-NEXT: FileSizeInPages: 0
-FILE-NEXT: NumberOfRelocationItems: 0
-FILE-NEXT: HeaderSizeInParagraphs: 0
-FILE-NEXT: MinimumExtraParagraphs: 0
-FILE-NEXT: MaximumExtraParagraphs: 0
-FILE-NEXT: InitialRelativeSS: 0
-FILE-NEXT: InitialSP: 0
-FILE-NEXT: Checksum: 0
-FILE-NEXT: InitialIP: 0
-FILE-NEXT: InitialRelativeCS: 0
-FILE-NEXT: AddressOfRelocationTable: 64
-FILE-NEXT: OverlayNumber: 0
-FILE-NEXT: OEMid: 0
-FILE-NEXT: OEMinfo: 0
-FILE-NEXT: AddressOfNewExeHeader: 128
-FILE-NEXT: }
-
-SECTIONS: Format: COFF-i386
-SECTIONS-NEXT: Arch: i386
-SECTIONS-NEXT: AddressSize: 32bit
-SECTIONS-NEXT: Sections [
-SECTIONS-NEXT: Section {
-SECTIONS-NEXT: Number: 1
-SECTIONS-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-SECTIONS-NEXT: VirtualSize: 0x6
-SECTIONS-NEXT: VirtualAddress: 0x1000
-SECTIONS-NEXT: RawDataSize: 512
-SECTIONS-NEXT: PointerToRawData: 0x200
-SECTIONS-NEXT: PointerToRelocations: 0x0
-SECTIONS-NEXT: PointerToLineNumbers: 0x0
-SECTIONS-NEXT: RelocationCount: 0
-SECTIONS-NEXT: LineNumberCount: 0
-SECTIONS-NEXT: Characteristics [
-SECTIONS-NEXT: IMAGE_SCN_CNT_CODE
-SECTIONS-NEXT: IMAGE_SCN_MEM_EXECUTE
-SECTIONS-NEXT: IMAGE_SCN_MEM_READ
-SECTIONS-NEXT: ]
-SECTIONS-NEXT: }
-SECTIONS-NEXT: ]
Removed: lld/trunk/test/pecoff/unknown-drectve.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/unknown-drectve.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/unknown-drectve.test (original)
+++ lld/trunk/test/pecoff/unknown-drectve.test (removed)
@@ -1,6 +0,0 @@
-# RUN: yaml2obj %p/Inputs/unknown-drectve.obj.yaml > %t.obj
-#
-# RUN: not lld -flavor link /out:%t.exe -- %t.obj >& %t.log
-# RUN: FileCheck -check-prefix=ERROR %s < %t.log
-
-ERROR: Cannot open /nosuchoption:foobar
Removed: lld/trunk/test/pecoff/weak-external.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/weak-external.test?rev=244225&view=auto
==============================================================================
--- lld/trunk/test/pecoff/weak-external.test (original)
+++ lld/trunk/test/pecoff/weak-external.test (removed)
@@ -1,9 +0,0 @@
-# RUN: yaml2obj %p/Inputs/weak-externals.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /force /out:%t.exe /subsystem:console \
-# RUN: /entry:fn -- %t.obj %p/Inputs/static.lib 2> %t2.log
-# RUN: FileCheck %s < %t2.log
-
-CHECK: _no_such_symbol1
-CHECK-NOT: _no_such_symbol2
-CHECK: _no_such_symbol3
Modified: lld/trunk/unittests/DriverTests/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/unittests/DriverTests/CMakeLists.txt?rev=244226&r1=244225&r2=244226&view=diff
==============================================================================
--- lld/trunk/unittests/DriverTests/CMakeLists.txt (original)
+++ lld/trunk/unittests/DriverTests/CMakeLists.txt Thu Aug 6 11:19:35 2015
@@ -2,14 +2,11 @@ add_lld_unittest(DriverTests
UniversalDriverTest.cpp
GnuLdDriverTest.cpp
DarwinLdDriverTest.cpp
- WinLinkDriverTest.cpp
- WinLinkModuleDefTest.cpp
)
target_link_libraries(DriverTests
lldDriver
lldCOFF
lldCore
- lldPECOFF
lldMachO
)
Removed: lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp (original)
+++ lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp (removed)
@@ -1,728 +0,0 @@
-//===- lld/unittest/WinLinkDriverTest.cpp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief Windows link.exe driver tests.
-///
-//===----------------------------------------------------------------------===//
-
-#include "DriverTest.h"
-#include "lld/ReaderWriter/PECOFFLinkingContext.h"
-#include "llvm/ADT/Optional.h"
-#include "llvm/Support/COFF.h"
-#include <set>
-#include <vector>
-
-using namespace llvm;
-using namespace lld;
-
-namespace {
-class WinLinkParserTest
- : public ParserTest<WinLinkDriver, PECOFFLinkingContext> {
-protected:
- const LinkingContext *linkingContext() override { return &_ctx; }
-};
-}
-
-TEST_F(WinLinkParserTest, Basic) {
- EXPECT_TRUE(parse("link.exe", "/subsystem:console", "/out:a.exe",
- "-entry:start", "a.obj", "b.obj", "c.obj", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, _ctx.getSubsystem());
- EXPECT_EQ(llvm::COFF::IMAGE_FILE_MACHINE_I386, _ctx.getMachineType());
- EXPECT_EQ("a.exe", _ctx.outputPath());
- EXPECT_EQ("start", _ctx.getEntrySymbolName());
- EXPECT_EQ(4, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
- EXPECT_EQ("b.obj", inputFile(1));
- EXPECT_EQ("c.obj", inputFile(2));
- EXPECT_TRUE(_ctx.getInputSearchPaths().empty());
-
- // Unspecified flags will have default values.
- EXPECT_FALSE(_ctx.isDll());
- EXPECT_EQ(6, _ctx.getMinOSVersion().majorVersion);
- EXPECT_EQ(0, _ctx.getMinOSVersion().minorVersion);
- EXPECT_EQ(0x400000U, _ctx.getBaseAddress());
- EXPECT_EQ(1024 * 1024U, _ctx.getStackReserve());
- EXPECT_EQ(4096U, _ctx.getStackCommit());
- EXPECT_EQ(4096U, _ctx.getSectionDefaultAlignment());
- EXPECT_FALSE(_ctx.allowRemainingUndefines());
- EXPECT_TRUE(_ctx.isNxCompat());
- EXPECT_FALSE(_ctx.getLargeAddressAware());
- EXPECT_TRUE(_ctx.getAllowBind());
- EXPECT_TRUE(_ctx.getAllowIsolation());
- EXPECT_FALSE(_ctx.getSwapRunFromCD());
- EXPECT_FALSE(_ctx.getSwapRunFromNet());
- EXPECT_TRUE(_ctx.getBaseRelocationEnabled());
- EXPECT_TRUE(_ctx.isTerminalServerAware());
- EXPECT_TRUE(_ctx.getDynamicBaseEnabled());
- EXPECT_TRUE(_ctx.getCreateManifest());
- EXPECT_EQ("", _ctx.getManifestDependency());
- EXPECT_FALSE(_ctx.getEmbedManifest());
- EXPECT_EQ(1, _ctx.getManifestId());
- EXPECT_TRUE(_ctx.getManifestUAC());
- EXPECT_EQ("'asInvoker'", _ctx.getManifestLevel());
- EXPECT_EQ("'false'", _ctx.getManifestUiAccess());
- EXPECT_TRUE(_ctx.deadStrip());
- EXPECT_FALSE(_ctx.logInputFiles());
-}
-
-TEST_F(WinLinkParserTest, StartsWithHyphen) {
- EXPECT_TRUE(
- parse("link.exe", "-subsystem:console", "-out:a.exe", "a.obj", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, _ctx.getSubsystem());
- EXPECT_EQ("a.exe", _ctx.outputPath());
- EXPECT_EQ(2, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
-}
-
-TEST_F(WinLinkParserTest, UppercaseOption) {
- EXPECT_TRUE(
- parse("link.exe", "/SUBSYSTEM:CONSOLE", "/OUT:a.exe", "a.obj", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, _ctx.getSubsystem());
- EXPECT_EQ("a.exe", _ctx.outputPath());
- EXPECT_EQ(2, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
-}
-
-TEST_F(WinLinkParserTest, Mllvm) {
- EXPECT_TRUE(parse("link.exe", "/mllvm:-debug", "a.obj", nullptr));
- const std::vector<const char *> &options = _ctx.llvmOptions();
- EXPECT_EQ(1U, options.size());
- EXPECT_STREQ("-debug", options[0]);
-}
-
-TEST_F(WinLinkParserTest, NoInputFiles) {
- EXPECT_FALSE(parse("link.exe", nullptr));
- EXPECT_EQ("No input files\n", errorMessage());
-}
-
-//
-// Tests for implicit file extension interpolation.
-//
-
-TEST_F(WinLinkParserTest, NoFileExtension) {
- EXPECT_TRUE(parse("link.exe", "foo", "bar", nullptr));
- EXPECT_EQ("foo.exe", _ctx.outputPath());
- EXPECT_EQ(3, inputFileCount());
- EXPECT_EQ("foo.obj", inputFile(0));
- EXPECT_EQ("bar.obj", inputFile(1));
-}
-
-TEST_F(WinLinkParserTest, NonStandardFileExtension) {
- EXPECT_TRUE(parse("link.exe", "foo.o", nullptr));
- EXPECT_EQ("foo.exe", _ctx.outputPath());
- EXPECT_EQ(2, inputFileCount());
- EXPECT_EQ("foo.o", inputFile(0));
-}
-
-TEST_F(WinLinkParserTest, Libpath) {
- EXPECT_TRUE(
- parse("link.exe", "/libpath:dir1", "/libpath:dir2", "a.obj", nullptr));
- const std::vector<StringRef> &paths = _ctx.getInputSearchPaths();
- EXPECT_EQ(2U, paths.size());
- EXPECT_EQ("dir1", paths[0]);
- EXPECT_EQ("dir2", paths[1]);
-}
-
-//
-// Tests for input file order
-//
-
-TEST_F(WinLinkParserTest, InputOrder) {
- EXPECT_TRUE(parse("link.exe", "a.lib", "b.obj", "c.obj", "a.lib", "d.obj",
- nullptr));
- EXPECT_EQ(5, inputFileCount());
- EXPECT_EQ("b.obj", inputFile(0));
- EXPECT_EQ("c.obj", inputFile(1));
- EXPECT_EQ("d.obj", inputFile(2));
- EXPECT_EQ("a.lib", inputFile(3));
-}
-
-//
-// Tests for command line options that take values.
-//
-
-TEST_F(WinLinkParserTest, AlternateName) {
- EXPECT_TRUE(parse("link.exe", "/alternatename:sym1=sym",
- "/alternatename:sym2=sym", "a.out", nullptr));
- const std::set<std::string> &aliases = _ctx.getAlternateNames("sym");
- EXPECT_EQ(2U, aliases.size());
- auto it = aliases.begin();
- EXPECT_EQ("sym1", *it++);
- EXPECT_EQ("sym2", *it++);
-}
-
-TEST_F(WinLinkParserTest, Export) {
- EXPECT_TRUE(parse("link.exe", "/export:foo", "a.out", nullptr));
- const std::vector<PECOFFLinkingContext::ExportDesc> &exports =
- _ctx.getDllExports();
- EXPECT_EQ(1U, exports.size());
- EXPECT_EQ("_foo", exports[0].name);
- EXPECT_EQ(-1, exports[0].ordinal);
- EXPECT_FALSE(exports[0].noname);
- EXPECT_FALSE(exports[0].isData);
-}
-
-TEST_F(WinLinkParserTest, ExportWithOptions) {
- EXPECT_TRUE(parse("link.exe", "/export:foo, at 8,noname,data",
- "/export:bar, at 10,data", "a.out", nullptr));
- const std::vector<PECOFFLinkingContext::ExportDesc> &exports =
- _ctx.getDllExports();
- EXPECT_EQ(2U, exports.size());
- EXPECT_EQ("_foo", exports[0].name);
- EXPECT_EQ(8, exports[0].ordinal);
- EXPECT_TRUE(exports[0].noname);
- EXPECT_TRUE(exports[0].isData);
- EXPECT_EQ("_bar", exports[1].name);
- EXPECT_EQ(10, exports[1].ordinal);
- EXPECT_FALSE(exports[1].noname);
- EXPECT_TRUE(exports[1].isData);
-}
-
-TEST_F(WinLinkParserTest, ExportDuplicateExports) {
- EXPECT_TRUE(
- parse("link.exe", "/export:foo", "/export:foo, at 2", "a.out", nullptr));
- const std::vector<PECOFFLinkingContext::ExportDesc> &exports =
- _ctx.getDllExports();
- EXPECT_EQ(1U, exports.size());
- EXPECT_EQ("_foo", exports[0].name);
- EXPECT_EQ(-1, exports[0].ordinal);
-}
-
-TEST_F(WinLinkParserTest, ExportDuplicateOrdinals) {
- EXPECT_FALSE(
- parse("link.exe", "/export:foo, at 1", "/export:bar, at 1", "a.out", nullptr));
-}
-
-TEST_F(WinLinkParserTest, ExportInvalid1) {
- EXPECT_FALSE(parse("link.exe", "/export:foo, at 0", "a.out", nullptr));
-}
-
-TEST_F(WinLinkParserTest, ExportInvalid2) {
- EXPECT_FALSE(parse("link.exe", "/export:foo, at 65536", "a.out", nullptr));
-}
-
-TEST_F(WinLinkParserTest, MachineX86) {
- EXPECT_TRUE(parse("link.exe", "/machine:x86", "a.obj", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_FILE_MACHINE_I386, _ctx.getMachineType());
-}
-
-TEST_F(WinLinkParserTest, MachineX64) {
- EXPECT_TRUE(parse("link.exe", "/machine:x64", "a.obj", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_FILE_MACHINE_AMD64, _ctx.getMachineType());
-}
-
-TEST_F(WinLinkParserTest, MachineArm) {
- EXPECT_TRUE(parse("link.exe", "/machine:arm", "a.obj", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_FILE_MACHINE_ARMNT, _ctx.getMachineType());
-}
-
-TEST_F(WinLinkParserTest, MachineUnknown) {
- EXPECT_FALSE(parse("link.exe", "/machine:nosucharch", "a.obj", nullptr));
- EXPECT_EQ("error: unknown machine type: nosucharch\n", errorMessage());
-}
-
-TEST_F(WinLinkParserTest, MajorImageVersion) {
- EXPECT_TRUE(parse("link.exe", "/version:7", "foo.o", nullptr));
- EXPECT_EQ(7, _ctx.getImageVersion().majorVersion);
- EXPECT_EQ(0, _ctx.getImageVersion().minorVersion);
-}
-
-TEST_F(WinLinkParserTest, MajorMinorImageVersion) {
- EXPECT_TRUE(parse("link.exe", "/version:72.35", "foo.o", nullptr));
- EXPECT_EQ(72, _ctx.getImageVersion().majorVersion);
- EXPECT_EQ(35, _ctx.getImageVersion().minorVersion);
-}
-
-TEST_F(WinLinkParserTest, MinMajorOSVersion) {
- EXPECT_TRUE(parse("link.exe", "/subsystem:windows,3", "foo.o", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI, _ctx.getSubsystem());
- EXPECT_EQ(3, _ctx.getMinOSVersion().majorVersion);
- EXPECT_EQ(0, _ctx.getMinOSVersion().minorVersion);
-}
-
-TEST_F(WinLinkParserTest, MinMajorMinorOSVersion) {
- EXPECT_TRUE(parse("link.exe", "/subsystem:windows,3.1", "foo.o", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI, _ctx.getSubsystem());
- EXPECT_EQ(3, _ctx.getMinOSVersion().majorVersion);
- EXPECT_EQ(1, _ctx.getMinOSVersion().minorVersion);
-}
-
-TEST_F(WinLinkParserTest, Base) {
- EXPECT_TRUE(parse("link.exe", "/base:8388608", "a.obj", nullptr));
- EXPECT_EQ(0x800000U, _ctx.getBaseAddress());
-}
-
-TEST_F(WinLinkParserTest, InvalidBase) {
- EXPECT_FALSE(parse("link.exe", "/base:1234", "a.obj", nullptr));
- EXPECT_TRUE(StringRef(errorMessage())
- .startswith("Base address have to be multiple of 64K"));
-}
-
-TEST_F(WinLinkParserTest, StackReserve) {
- EXPECT_TRUE(parse("link.exe", "/stack:8192", "a.obj", nullptr));
- EXPECT_EQ(8192U, _ctx.getStackReserve());
- EXPECT_EQ(4096U, _ctx.getStackCommit());
-}
-
-TEST_F(WinLinkParserTest, StackReserveAndCommit) {
- EXPECT_TRUE(parse("link.exe", "/stack:16384,8192", "a.obj", nullptr));
- EXPECT_EQ(16384U, _ctx.getStackReserve());
- EXPECT_EQ(8192U, _ctx.getStackCommit());
-}
-
-TEST_F(WinLinkParserTest, InvalidStackSize) {
- EXPECT_FALSE(parse("link.exe", "/stack:8192,16384", "a.obj", nullptr));
- EXPECT_TRUE(StringRef(errorMessage()).startswith("Invalid stack size"));
-}
-
-TEST_F(WinLinkParserTest, HeapReserve) {
- EXPECT_TRUE(parse("link.exe", "/heap:8192", "a.obj", nullptr));
- EXPECT_EQ(8192U, _ctx.getHeapReserve());
- EXPECT_EQ(4096U, _ctx.getHeapCommit());
-}
-
-TEST_F(WinLinkParserTest, HeapReserveAndCommit) {
- EXPECT_TRUE(parse("link.exe", "/heap:16384,8192", "a.obj", nullptr));
- EXPECT_EQ(16384U, _ctx.getHeapReserve());
- EXPECT_EQ(8192U, _ctx.getHeapCommit());
-}
-
-TEST_F(WinLinkParserTest, InvalidHeapSize) {
- EXPECT_FALSE(parse("link.exe", "/heap:8192,16384", "a.obj", nullptr));
- EXPECT_TRUE(StringRef(errorMessage()).startswith("Invalid heap size"));
-}
-
-TEST_F(WinLinkParserTest, SectionAlignment) {
- EXPECT_TRUE(parse("link.exe", "/align:8192", "a.obj", nullptr));
- EXPECT_EQ(8192U, _ctx.getSectionDefaultAlignment());
-}
-
-TEST_F(WinLinkParserTest, InvalidAlignment) {
- EXPECT_FALSE(parse("link.exe", "/align:1000", "a.obj", nullptr));
- EXPECT_EQ("Section alignment must be a power of 2, but got 1000\n",
- errorMessage());
-}
-
-TEST_F(WinLinkParserTest, Include) {
- EXPECT_TRUE(parse("link.exe", "/include:foo", "a.out", nullptr));
- auto symbols = _ctx.initialUndefinedSymbols();
- EXPECT_FALSE(symbols.empty());
- EXPECT_EQ("foo", symbols[0]);
-}
-
-TEST_F(WinLinkParserTest, Merge) {
- EXPECT_TRUE(parse("link.exe", "/merge:.foo=.bar", "/merge:.bar=.baz",
- "a.out", nullptr));
- EXPECT_EQ(".baz", _ctx.getOutputSectionName(".foo"));
- EXPECT_EQ(".baz", _ctx.getOutputSectionName(".bar"));
- EXPECT_EQ(".abc", _ctx.getOutputSectionName(".abc"));
-}
-
-TEST_F(WinLinkParserTest, Merge_Circular) {
- EXPECT_FALSE(parse("link.exe", "/merge:.foo=.bar", "/merge:.bar=.foo",
- "a.out", nullptr));
-}
-
-TEST_F(WinLinkParserTest, Implib) {
- EXPECT_TRUE(parse("link.exe", "/implib:foo.dll.lib", "a.out", nullptr));
- EXPECT_EQ("foo.dll.lib", _ctx.getOutputImportLibraryPath());
-}
-
-TEST_F(WinLinkParserTest, ImplibDefault) {
- EXPECT_TRUE(parse("link.exe", "/out:foobar.dll", "a.out", nullptr));
- EXPECT_EQ("foobar.lib", _ctx.getOutputImportLibraryPath());
-}
-
-//
-// Tests for /section
-//
-
-namespace {
-const uint32_t discardable = llvm::COFF::IMAGE_SCN_MEM_DISCARDABLE;
-const uint32_t not_cached = llvm::COFF::IMAGE_SCN_MEM_NOT_CACHED;
-const uint32_t not_paged = llvm::COFF::IMAGE_SCN_MEM_NOT_PAGED;
-const uint32_t shared = llvm::COFF::IMAGE_SCN_MEM_SHARED;
-const uint32_t execute = llvm::COFF::IMAGE_SCN_MEM_EXECUTE;
-const uint32_t read = llvm::COFF::IMAGE_SCN_MEM_READ;
-const uint32_t write = llvm::COFF::IMAGE_SCN_MEM_WRITE;
-
-#define TEST_SECTION(testname, arg, expect) \
- TEST_F(WinLinkParserTest, testname) { \
- EXPECT_TRUE(parse("link.exe", "/section:.text," arg, "a.obj", nullptr)); \
- EXPECT_EQ(expect, _ctx.getSectionAttributes(".text", execute | read)); \
- }
-
-TEST_SECTION(SectionD, "d", execute | read | discardable)
-TEST_SECTION(SectionE, "e", execute)
-TEST_SECTION(SectionK, "k", execute | read | not_cached)
-TEST_SECTION(SectionP, "p", execute | read | not_paged)
-TEST_SECTION(SectionR, "r", read)
-TEST_SECTION(SectionS, "s", execute | read | shared)
-TEST_SECTION(SectionW, "w", write)
-
-#undef TEST_SECTION
-
-TEST_F(WinLinkParserTest, Section) {
- EXPECT_TRUE(parse("link.exe", "/section:.text,dekprsw",
- "/section:.text,!dekprsw", "a.obj", nullptr));
- EXPECT_EQ(0U, _ctx.getSectionAttributes(".text", execute | read));
-}
-
-TEST_F(WinLinkParserTest, SectionNegate) {
- EXPECT_TRUE(parse("link.exe", "/section:.text,!e", "a.obj", nullptr));
- EXPECT_EQ(read, _ctx.getSectionAttributes(".text", execute | read));
-}
-
-TEST_F(WinLinkParserTest, SectionMultiple) {
- EXPECT_TRUE(parse("link.exe", "/section:.foo,e", "/section:.foo,rw",
- "/section:.foo,!d", "a.obj", nullptr));
- uint32_t flags = execute | read | not_paged | discardable;
- uint32_t expected = execute | read | write | not_paged;
- EXPECT_EQ(expected, _ctx.getSectionAttributes(".foo", flags));
-}
-
-} // end anonymous namespace
-
-//
-// Tests for /defaultlib and /nodefaultlib.
-//
-
-TEST_F(WinLinkParserTest, DefaultLib) {
- EXPECT_TRUE(parse("link.exe", "/defaultlib:user32.lib",
- "/defaultlib:kernel32", "a.obj", nullptr));
- EXPECT_EQ(4, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
- EXPECT_EQ("user32.lib", inputFile(1));
- EXPECT_EQ("kernel32.lib", inputFile(2));
-}
-
-TEST_F(WinLinkParserTest, DefaultLibDuplicates) {
- EXPECT_TRUE(parse("link.exe", "/defaultlib:user32.lib",
- "/defaultlib:user32.lib", "a.obj", nullptr));
- EXPECT_EQ(3, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
- EXPECT_EQ("user32.lib", inputFile(1));
-}
-
-TEST_F(WinLinkParserTest, NoDefaultLib) {
- EXPECT_TRUE(parse("link.exe", "/defaultlib:user32.lib",
- "/defaultlib:kernel32", "/nodefaultlib:user32.lib", "a.obj",
- nullptr));
- EXPECT_EQ(3, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
- EXPECT_EQ("kernel32.lib", inputFile(1));
-}
-
-TEST_F(WinLinkParserTest, NoDefaultLibCase) {
- EXPECT_TRUE(parse("link.exe", "/defaultlib:user32",
- "/defaultlib:kernel32", "/nodefaultlib:USER32.LIB", "a.obj",
- nullptr));
- EXPECT_EQ(3, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
- EXPECT_EQ("kernel32.lib", inputFile(1));
-}
-
-TEST_F(WinLinkParserTest, NoDefaultLibAll) {
- EXPECT_TRUE(parse("link.exe", "/defaultlib:user32.lib",
- "/defaultlib:kernel32", "/nodefaultlib", "a.obj", nullptr));
- EXPECT_EQ(2, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
-}
-
-TEST_F(WinLinkParserTest, DisallowLib) {
- EXPECT_TRUE(parse("link.exe", "/defaultlib:user32.lib",
- "/defaultlib:kernel32", "/disallowlib:user32.lib", "a.obj",
- nullptr));
- EXPECT_EQ(3, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
- EXPECT_EQ("kernel32.lib", inputFile(1));
-}
-
-//
-// Tests for DLL.
-//
-
-TEST_F(WinLinkParserTest, NoEntry) {
- EXPECT_TRUE(parse("link.exe", "/noentry", "/dll", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.isDll());
- EXPECT_EQ(0x10000000U, _ctx.getBaseAddress());
- EXPECT_EQ("", _ctx.entrySymbolName());
-}
-
-TEST_F(WinLinkParserTest, NoEntryError) {
- // /noentry without /dll is an error.
- EXPECT_FALSE(parse("link.exe", "/noentry", "a.obj", nullptr));
- EXPECT_EQ("/noentry must be specified with /dll\n", errorMessage());
-}
-
-//
-// Tests for DELAYLOAD.
-//
-
-TEST_F(WinLinkParserTest, DelayLoad) {
- EXPECT_TRUE(parse("link.exe", "/delayload:abc.dll", "/delayload:def.dll",
- "a.obj", nullptr));
- EXPECT_TRUE(_ctx.isDelayLoadDLL("abc.dll"));
- EXPECT_TRUE(_ctx.isDelayLoadDLL("DEF.DLL"));
- EXPECT_FALSE(_ctx.isDelayLoadDLL("xyz.dll"));
-}
-
-//
-// Tests for SEH.
-//
-
-TEST_F(WinLinkParserTest, SafeSEH) {
- EXPECT_TRUE(parse("link.exe", "/safeseh", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.requireSEH());
- EXPECT_FALSE(_ctx.noSEH());
-}
-
-TEST_F(WinLinkParserTest, NoSafeSEH) {
- EXPECT_TRUE(parse("link.exe", "/safeseh:no", "a.obj", nullptr));
- EXPECT_FALSE(_ctx.requireSEH());
- EXPECT_TRUE(_ctx.noSEH());
-}
-
-//
-// Tests for boolean flags.
-//
-
-TEST_F(WinLinkParserTest, Force) {
- EXPECT_TRUE(parse("link.exe", "/force", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.allowRemainingUndefines());
-}
-
-TEST_F(WinLinkParserTest, ForceUnresolved) {
- EXPECT_TRUE(parse("link.exe", "/force:unresolved", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.allowRemainingUndefines());
-}
-
-TEST_F(WinLinkParserTest, NoNxCompat) {
- EXPECT_TRUE(parse("link.exe", "/nxcompat:no", "a.obj", nullptr));
- EXPECT_FALSE(_ctx.isNxCompat());
-}
-
-TEST_F(WinLinkParserTest, LargeAddressAware) {
- EXPECT_TRUE(parse("link.exe", "/largeaddressaware", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.getLargeAddressAware());
-}
-
-TEST_F(WinLinkParserTest, NoLargeAddressAware) {
- EXPECT_TRUE(parse("link.exe", "/largeaddressaware:no", "a.obj", nullptr));
- EXPECT_FALSE(_ctx.getLargeAddressAware());
-}
-
-TEST_F(WinLinkParserTest, AllowBind) {
- EXPECT_TRUE(parse("link.exe", "/allowbind", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.getAllowBind());
-}
-
-TEST_F(WinLinkParserTest, NoAllowBind) {
- EXPECT_TRUE(parse("link.exe", "/allowbind:no", "a.obj", nullptr));
- EXPECT_FALSE(_ctx.getAllowBind());
-}
-
-TEST_F(WinLinkParserTest, AllowIsolation) {
- EXPECT_TRUE(parse("link.exe", "/allowisolation", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.getAllowIsolation());
-}
-
-TEST_F(WinLinkParserTest, NoAllowIsolation) {
- EXPECT_TRUE(parse("link.exe", "/allowisolation:no", "a.obj", nullptr));
- EXPECT_FALSE(_ctx.getAllowIsolation());
-}
-
-TEST_F(WinLinkParserTest, SwapRunFromCD) {
- EXPECT_TRUE(parse("link.exe", "/swaprun:cd", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.getSwapRunFromCD());
-}
-
-TEST_F(WinLinkParserTest, SwapRunFromNet) {
- EXPECT_TRUE(parse("link.exe", "/swaprun:net", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.getSwapRunFromNet());
-}
-
-TEST_F(WinLinkParserTest, Debug) {
- EXPECT_TRUE(parse("link.exe", "/debug", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.deadStrip());
- EXPECT_TRUE(_ctx.getDebug());
- EXPECT_EQ("a.pdb", _ctx.getPDBFilePath());
-}
-
-TEST_F(WinLinkParserTest, PDB) {
- EXPECT_TRUE(parse("link.exe", "/debug", "/pdb:foo.pdb", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.getDebug());
- EXPECT_EQ("foo.pdb", _ctx.getPDBFilePath());
-}
-
-TEST_F(WinLinkParserTest, Fixed) {
- EXPECT_TRUE(parse("link.exe", "/fixed", "a.out", nullptr));
- EXPECT_FALSE(_ctx.getBaseRelocationEnabled());
- EXPECT_FALSE(_ctx.getDynamicBaseEnabled());
-}
-
-TEST_F(WinLinkParserTest, NoFixed) {
- EXPECT_TRUE(parse("link.exe", "/fixed:no", "a.out", nullptr));
- EXPECT_TRUE(_ctx.getBaseRelocationEnabled());
-}
-
-TEST_F(WinLinkParserTest, TerminalServerAware) {
- EXPECT_TRUE(parse("link.exe", "/tsaware", "a.out", nullptr));
- EXPECT_TRUE(_ctx.isTerminalServerAware());
-}
-
-TEST_F(WinLinkParserTest, NoTerminalServerAware) {
- EXPECT_TRUE(parse("link.exe", "/tsaware:no", "a.out", nullptr));
- EXPECT_FALSE(_ctx.isTerminalServerAware());
-}
-
-TEST_F(WinLinkParserTest, DynamicBase) {
- EXPECT_TRUE(parse("link.exe", "/dynamicbase", "a.out", nullptr));
- EXPECT_TRUE(_ctx.getDynamicBaseEnabled());
-}
-
-TEST_F(WinLinkParserTest, NoDynamicBase) {
- EXPECT_TRUE(parse("link.exe", "/dynamicbase:no", "a.out", nullptr));
- EXPECT_FALSE(_ctx.getDynamicBaseEnabled());
-}
-
-//
-// Test for /failifmismatch
-//
-
-TEST_F(WinLinkParserTest, FailIfMismatch_Match) {
- EXPECT_TRUE(parse("link.exe", "/failifmismatch:foo=bar",
- "/failifmismatch:foo=bar", "/failifmismatch:abc=def",
- "a.out", nullptr));
-}
-
-TEST_F(WinLinkParserTest, FailIfMismatch_Mismatch) {
- EXPECT_FALSE(parse("link.exe", "/failifmismatch:foo=bar",
- "/failifmismatch:foo=baz", "a.out", nullptr));
-}
-
-//
-// Tests for /manifest, /manifestuac, /manifestfile, and /manifestdependency.
-//
-TEST_F(WinLinkParserTest, Manifest_Default) {
- EXPECT_TRUE(parse("link.exe", "/manifest", "a.out", nullptr));
- EXPECT_TRUE(_ctx.getCreateManifest());
- EXPECT_FALSE(_ctx.getEmbedManifest());
- EXPECT_EQ(1, _ctx.getManifestId());
- EXPECT_EQ("'asInvoker'", _ctx.getManifestLevel());
- EXPECT_EQ("'false'", _ctx.getManifestUiAccess());
-}
-
-TEST_F(WinLinkParserTest, Manifest_No) {
- EXPECT_TRUE(parse("link.exe", "/manifest:no", "a.out", nullptr));
- EXPECT_FALSE(_ctx.getCreateManifest());
-}
-
-TEST_F(WinLinkParserTest, Manifestuac_no) {
- EXPECT_TRUE(parse("link.exe", "/manifestuac:NO", "a.out", nullptr));
- EXPECT_FALSE(_ctx.getManifestUAC());
-}
-
-TEST_F(WinLinkParserTest, Manifestuac_Level) {
- EXPECT_TRUE(parse("link.exe", "/manifestuac:level='requireAdministrator'",
- "a.out", nullptr));
- EXPECT_EQ("'requireAdministrator'", _ctx.getManifestLevel());
- EXPECT_EQ("'false'", _ctx.getManifestUiAccess());
-}
-
-TEST_F(WinLinkParserTest, Manifestuac_UiAccess) {
- EXPECT_TRUE(parse("link.exe", "/manifestuac:uiAccess='true'", "a.out", nullptr));
- EXPECT_EQ("'asInvoker'", _ctx.getManifestLevel());
- EXPECT_EQ("'true'", _ctx.getManifestUiAccess());
-}
-
-TEST_F(WinLinkParserTest, Manifestuac_LevelAndUiAccess) {
- EXPECT_TRUE(parse("link.exe",
- "/manifestuac:level='requireAdministrator' uiAccess='true'",
- "a.out", nullptr));
- EXPECT_EQ("'requireAdministrator'", _ctx.getManifestLevel());
- EXPECT_EQ("'true'", _ctx.getManifestUiAccess());
-}
-
-TEST_F(WinLinkParserTest, Manifestfile) {
- EXPECT_TRUE(parse("link.exe", "/manifestfile:bar.manifest",
- "a.out", nullptr));
- EXPECT_EQ("bar.manifest", _ctx.getManifestOutputPath());
-}
-
-TEST_F(WinLinkParserTest, Manifestdependency) {
- EXPECT_TRUE(parse("link.exe", "/manifestdependency:foo bar", "a.out",
- nullptr));
- EXPECT_EQ("foo bar", _ctx.getManifestDependency());
-}
-
-//
-// Test for /OPT
-//
-
-TEST_F(WinLinkParserTest, OptNoRef) {
- EXPECT_TRUE(parse("link.exe", "/opt:noref", "a.obj", nullptr));
- EXPECT_FALSE(_ctx.deadStrip());
-}
-
-TEST_F(WinLinkParserTest, OptIgnore) {
- EXPECT_TRUE(parse("link.exe", "/opt:ref", "/opt:icf", "/opt:noicf",
- "/opt:icf=foo", "/opt:lbr", "/opt:nolbr", "a.obj",
- nullptr));
-}
-
-TEST_F(WinLinkParserTest, OptUnknown) {
- EXPECT_FALSE(parse("link.exe", "/opt:foo", "a.obj", nullptr));
-}
-
-//
-// Test for /PROFILE
-//
-
-TEST_F(WinLinkParserTest, Profile) {
- EXPECT_TRUE(parse("link.exe", "/profile", "a.obj", nullptr));
- EXPECT_TRUE(_ctx.deadStrip());
- EXPECT_TRUE(_ctx.getBaseRelocationEnabled());
- EXPECT_TRUE(_ctx.getDynamicBaseEnabled());
-}
-
-//
-// Test for command line flags that are ignored.
-//
-
-TEST_F(WinLinkParserTest, Ignore) {
- // There are some no-op command line options that are recognized for
- // compatibility with link.exe.
- EXPECT_TRUE(parse("link.exe", "/nologo", "/errorreport:prompt",
- "/incremental", "/incremental:no", "/delay:unload",
- "/disallowlib:foo", "/pdbaltpath:bar",
- "/wx", "/wx:no", "/tlbid:1", "/tlbout:foo", "/idlout:foo",
- "/ignore:4000", "/ignoreidl", "/implib:foo", "/safeseh",
- "/safeseh:no", "/functionpadmin", "/maxilksize:1024",
- "a.obj", nullptr));
- EXPECT_EQ("", errorMessage());
- EXPECT_EQ(2, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
-}
-
-//
-// Test for "--"
-//
-
-TEST_F(WinLinkParserTest, DashDash) {
- EXPECT_TRUE(parse("link.exe", "/subsystem:console", "/out:a.exe", "a.obj",
- "--", "b.obj", "-c.obj", nullptr));
- EXPECT_EQ(llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI, _ctx.getSubsystem());
- EXPECT_EQ("a.exe", _ctx.outputPath());
- EXPECT_EQ(4, inputFileCount());
- EXPECT_EQ("a.obj", inputFile(0));
- EXPECT_EQ("b.obj", inputFile(1));
- EXPECT_EQ("-c.obj", inputFile(2));
-}
Removed: lld/trunk/unittests/DriverTests/WinLinkModuleDefTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/unittests/DriverTests/WinLinkModuleDefTest.cpp?rev=244225&view=auto
==============================================================================
--- lld/trunk/unittests/DriverTests/WinLinkModuleDefTest.cpp (original)
+++ lld/trunk/unittests/DriverTests/WinLinkModuleDefTest.cpp (removed)
@@ -1,155 +0,0 @@
-//===- lld/unittest/WinLinkModuleDefTest.cpp ------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "gtest/gtest.h"
-#include "lld/Driver/WinLinkModuleDef.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include <memory>
-
-using namespace llvm;
-using namespace lld;
-
-class ParserTest : public testing::Test {
-protected:
- std::vector<moduledef::Directive *> _dirs;
-
- void parse(const char *contents) {
- auto membuf =
- std::unique_ptr<MemoryBuffer>(MemoryBuffer::getMemBuffer(contents));
- moduledef::Lexer lexer(std::move(membuf));
- moduledef::Parser parser(lexer, _alloc);
- EXPECT_TRUE(parser.parse(_dirs));
- EXPECT_TRUE(!_dirs.empty());
- }
-
- void verifyExportDesc(const PECOFFLinkingContext::ExportDesc &exp,
- StringRef sym, int ordinal, bool noname, bool isData) {
- EXPECT_EQ(sym, exp.name);
- EXPECT_EQ(ordinal, exp.ordinal);
- EXPECT_EQ(noname, exp.noname);
- EXPECT_EQ(isData, exp.isData);
- }
-
-private:
- llvm::BumpPtrAllocator _alloc;
-};
-
-TEST_F(ParserTest, Exports) {
- parse("EXPORTS\n"
- " sym1\n"
- " sym2 @5\n"
- " sym3 @8 NONAME\n"
- " sym4 DATA\n"
- " sym5 @10 NONAME DATA\n");
- EXPECT_EQ(1U, _dirs.size());
- const std::vector<PECOFFLinkingContext::ExportDesc> &exports =
- cast<moduledef::Exports>(_dirs[0])->getExports();
- EXPECT_EQ(5U, exports.size());
- verifyExportDesc(exports[0], "sym1", -1, false, false);
- verifyExportDesc(exports[1], "sym2", 5, false, false);
- verifyExportDesc(exports[2], "sym3", 8, true, false);
- verifyExportDesc(exports[3], "sym4", -1, false, true);
- verifyExportDesc(exports[4], "sym5", 10, true, true);
-}
-
-TEST_F(ParserTest, Heapsize) {
- parse("HEAPSIZE 65536");
- EXPECT_EQ(1U, _dirs.size());
- auto *heapsize = cast<moduledef::Heapsize>(_dirs[0]);
- EXPECT_EQ(65536U, heapsize->getReserve());
- EXPECT_EQ(0U, heapsize->getCommit());
-}
-
-TEST_F(ParserTest, HeapsizeWithCommit) {
- parse("HEAPSIZE 65536, 8192");
- EXPECT_EQ(1U, _dirs.size());
- auto *heapsize = cast<moduledef::Heapsize>(_dirs[0]);
- EXPECT_EQ(65536U, heapsize->getReserve());
- EXPECT_EQ(8192U, heapsize->getCommit());
-}
-
-TEST_F(ParserTest, StacksizeBasic) {
- parse("STACKSIZE 65536");
- EXPECT_EQ(1U, _dirs.size());
- auto *stacksize = cast<moduledef::Stacksize>(_dirs[0]);
- EXPECT_EQ(65536U, stacksize->getReserve());
- EXPECT_EQ(0U, stacksize->getCommit());
-}
-
-TEST_F(ParserTest, StacksizeWithCommit) {
- parse("STACKSIZE 65536, 8192");
- EXPECT_EQ(1U, _dirs.size());
- auto *stacksize = cast<moduledef::Stacksize>(_dirs[0]);
- EXPECT_EQ(65536U, stacksize->getReserve());
- EXPECT_EQ(8192U, stacksize->getCommit());
-}
-
-TEST_F(ParserTest, Library) {
- parse("LIBRARY foo.dll");
- EXPECT_EQ(1U, _dirs.size());
- auto *lib = cast<moduledef::Library>(_dirs[0]);
- EXPECT_EQ("foo.dll", lib->getName());
-}
-
-TEST_F(ParserTest, NameBasic) {
- parse("NAME foo.exe");
- EXPECT_EQ(1U, _dirs.size());
- auto *name = cast<moduledef::Name>(_dirs[0]);
- EXPECT_EQ("foo.exe", name->getOutputPath());
- EXPECT_EQ(0U, name->getBaseAddress());
-}
-
-TEST_F(ParserTest, NameWithBase) {
- parse("NAME foo.exe BASE=4096");
- EXPECT_EQ(1U, _dirs.size());
- auto *name = cast<moduledef::Name>(_dirs[0]);
- EXPECT_EQ("foo.exe", name->getOutputPath());
- EXPECT_EQ(4096U, name->getBaseAddress());
-}
-
-TEST_F(ParserTest, NameLongFileName) {
- parse("NAME \"a long file name.exe\"");
- EXPECT_EQ(1U, _dirs.size());
- auto *name = cast<moduledef::Name>(_dirs[0]);
- EXPECT_EQ("a long file name.exe", name->getOutputPath());
- EXPECT_EQ(0U, name->getBaseAddress());
-}
-
-TEST_F(ParserTest, VersionMajor) {
- parse("VERSION 12");
- EXPECT_EQ(1U, _dirs.size());
- auto *ver = cast<moduledef::Version>(_dirs[0]);
- EXPECT_EQ(12, ver->getMajorVersion());
- EXPECT_EQ(0, ver->getMinorVersion());
-}
-
-TEST_F(ParserTest, VersionMajorMinor) {
- parse("VERSION 12.34");
- EXPECT_EQ(1U, _dirs.size());
- auto *ver = cast<moduledef::Version>(_dirs[0]);
- EXPECT_EQ(12, ver->getMajorVersion());
- EXPECT_EQ(34, ver->getMinorVersion());
-}
-
-TEST_F(ParserTest, Multiple) {
- parse("LIBRARY foo\n"
- "EXPORTS sym\n"
- "VERSION 12");
- EXPECT_EQ(3U, _dirs.size());
- auto *lib = cast<moduledef::Library>(_dirs[0]);
- EXPECT_EQ("foo.dll", lib->getName());
-
- const std::vector<PECOFFLinkingContext::ExportDesc> &exports =
- cast<moduledef::Exports>(_dirs[1])->getExports();
- EXPECT_EQ(1U, exports.size());
- verifyExportDesc(exports[0], "sym", -1, false, false);
-
- auto *ver = cast<moduledef::Version>(_dirs[2]);
- EXPECT_EQ(12, ver->getMajorVersion());
-}
More information about the llvm-commits
mailing list