mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-11 11:34:02 +00:00
MC-COFF: Add COFFAsmParser. Completes PR8343.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116150 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c0c8df3cea
commit
7d4900416a
@ -269,6 +269,7 @@ namespace llvm {
|
||||
|
||||
extern MCAsmParserExtension *createDarwinAsmParser();
|
||||
extern MCAsmParserExtension *createELFAsmParser();
|
||||
extern MCAsmParserExtension *createCOFFAsmParser();
|
||||
|
||||
}
|
||||
|
||||
@ -288,7 +289,10 @@ AsmParser::AsmParser(const Target &T, SourceMgr &_SM, MCContext &_Ctx,
|
||||
//
|
||||
// FIXME: This is a hack, we need to (majorly) cleanup how these objects are
|
||||
// created.
|
||||
if (_MAI.hasSubsectionsViaSymbols()) {
|
||||
if (_MAI.hasMicrosoftFastStdCallMangling()) {
|
||||
PlatformParser = createCOFFAsmParser();
|
||||
PlatformParser->Initialize(*this);
|
||||
} else if (_MAI.hasSubsectionsViaSymbols()) {
|
||||
PlatformParser = createDarwinAsmParser();
|
||||
PlatformParser->Initialize(*this);
|
||||
} else {
|
||||
|
@ -1,6 +1,7 @@
|
||||
add_llvm_library(LLVMMCParser
|
||||
AsmLexer.cpp
|
||||
AsmParser.cpp
|
||||
COFFAsmParser.cpp
|
||||
DarwinAsmParser.cpp
|
||||
ELFAsmParser.cpp
|
||||
MCAsmLexer.cpp
|
||||
|
144
lib/MC/MCParser/COFFAsmParser.cpp
Normal file
144
lib/MC/MCParser/COFFAsmParser.cpp
Normal file
@ -0,0 +1,144 @@
|
||||
//===- COFFAsmParser.cpp - COFF Assembly Parser ---------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/MC/MCParser/MCAsmParserExtension.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCParser/MCAsmLexer.h"
|
||||
#include "llvm/MC/MCSectionCOFF.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
#include "llvm/Support/COFF.h"
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
|
||||
class COFFAsmParser : public MCAsmParserExtension {
|
||||
template<bool (COFFAsmParser::*Handler)(StringRef, SMLoc)>
|
||||
void AddDirectiveHandler(StringRef Directive) {
|
||||
getParser().AddDirectiveHandler(this, Directive,
|
||||
HandleDirective<COFFAsmParser, Handler>);
|
||||
}
|
||||
|
||||
bool ParseSectionSwitch(StringRef Section,
|
||||
unsigned Characteristics,
|
||||
SectionKind Kind);
|
||||
|
||||
virtual void Initialize(MCAsmParser &Parser) {
|
||||
// Call the base implementation.
|
||||
MCAsmParserExtension::Initialize(Parser);
|
||||
|
||||
AddDirectiveHandler<&COFFAsmParser::ParseSectionDirectiveText>(".text");
|
||||
AddDirectiveHandler<&COFFAsmParser::ParseSectionDirectiveData>(".data");
|
||||
AddDirectiveHandler<&COFFAsmParser::ParseSectionDirectiveBSS>(".bss");
|
||||
AddDirectiveHandler<&COFFAsmParser::ParseDirectiveDef>(".def");
|
||||
AddDirectiveHandler<&COFFAsmParser::ParseDirectiveScl>(".scl");
|
||||
AddDirectiveHandler<&COFFAsmParser::ParseDirectiveType>(".type");
|
||||
AddDirectiveHandler<&COFFAsmParser::ParseDirectiveEndef>(".endef");
|
||||
}
|
||||
|
||||
bool ParseSectionDirectiveText(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".text",
|
||||
COFF::IMAGE_SCN_CNT_CODE
|
||||
| COFF::IMAGE_SCN_MEM_EXECUTE
|
||||
| COFF::IMAGE_SCN_MEM_READ,
|
||||
SectionKind::getText());
|
||||
}
|
||||
bool ParseSectionDirectiveData(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".data",
|
||||
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
| COFF::IMAGE_SCN_MEM_READ
|
||||
| COFF::IMAGE_SCN_MEM_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
}
|
||||
bool ParseSectionDirectiveBSS(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".bss",
|
||||
COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA
|
||||
| COFF::IMAGE_SCN_MEM_READ
|
||||
| COFF::IMAGE_SCN_MEM_WRITE,
|
||||
SectionKind::getBSS());
|
||||
}
|
||||
|
||||
bool ParseDirectiveDef(StringRef, SMLoc);
|
||||
bool ParseDirectiveScl(StringRef, SMLoc);
|
||||
bool ParseDirectiveType(StringRef, SMLoc);
|
||||
bool ParseDirectiveEndef(StringRef, SMLoc);
|
||||
|
||||
public:
|
||||
COFFAsmParser() {}
|
||||
};
|
||||
|
||||
} // end annonomous namespace.
|
||||
|
||||
bool COFFAsmParser::ParseSectionSwitch(StringRef Section,
|
||||
unsigned Characteristics,
|
||||
SectionKind Kind) {
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in section switching directive");
|
||||
Lex();
|
||||
|
||||
getStreamer().SwitchSection(getContext().getCOFFSection(
|
||||
Section, Characteristics, Kind));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool COFFAsmParser::ParseDirectiveDef(StringRef, SMLoc) {
|
||||
StringRef SymbolName;
|
||||
|
||||
if (getParser().ParseIdentifier(SymbolName))
|
||||
return TokError("expected identifier in directive");
|
||||
|
||||
MCSymbol *Sym = getContext().GetOrCreateSymbol(SymbolName);
|
||||
|
||||
getStreamer().BeginCOFFSymbolDef(Sym);
|
||||
|
||||
Lex();
|
||||
return false;
|
||||
}
|
||||
|
||||
bool COFFAsmParser::ParseDirectiveScl(StringRef, SMLoc) {
|
||||
int64_t SymbolStorageClass;
|
||||
if (getParser().ParseAbsoluteExpression(SymbolStorageClass))
|
||||
return true;
|
||||
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in directive");
|
||||
|
||||
Lex();
|
||||
getStreamer().EmitCOFFSymbolStorageClass(SymbolStorageClass);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool COFFAsmParser::ParseDirectiveType(StringRef, SMLoc) {
|
||||
int64_t Type;
|
||||
if (getParser().ParseAbsoluteExpression(Type))
|
||||
return true;
|
||||
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in directive");
|
||||
|
||||
Lex();
|
||||
getStreamer().EmitCOFFSymbolType(Type);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool COFFAsmParser::ParseDirectiveEndef(StringRef, SMLoc) {
|
||||
Lex();
|
||||
getStreamer().EndCOFFSymbolDef();
|
||||
return false;
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
|
||||
MCAsmParserExtension *createCOFFAsmParser() {
|
||||
return new COFFAsmParser;
|
||||
}
|
||||
|
||||
}
|
@ -24,8 +24,11 @@ f0:
|
||||
//CHECK-NEXT: PointerToLineNumbers
|
||||
//CHECK-NEXT: NumberOfRelocations
|
||||
//CHECK-NEXT: NumberOfLineNumbers
|
||||
//CHECK-NEXT: Charateristics = 0x400001
|
||||
//CHECK-NEXT: Charateristics = 0x60400020
|
||||
//CHECK-NEXT: IMAGE_SCN_CNT_CODE
|
||||
//CHECK-NEXT: IMAGE_SCN_ALIGN_8BYTES
|
||||
//CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE
|
||||
//CHECK-NEXT: IMAGE_SCN_MEM_READ
|
||||
//CHECK-NEXT: SectionData =
|
||||
//CHECK-NEXT: 00 00 00 00 0F 1F 40 00 - 00 00 00 00 0F 1F 40 00
|
||||
|
||||
@ -38,7 +41,10 @@ f0:
|
||||
//CHECK-NEXT: PointerToLineNumbers
|
||||
//CHECK-NEXT: NumberOfRelocations
|
||||
//CHECK-NEXT: NumberOfLineNumbers
|
||||
//CHECK-NEXT: Charateristics = 0x400001
|
||||
//CHECK-NEXT: Charateristics = 0xC0400040
|
||||
//CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
//CHECK-NEXT: IMAGE_SCN_ALIGN_8BYTES
|
||||
//CHECK-NEXT: IMAGE_SCN_MEM_READ
|
||||
//CHECK-NEXT: IMAGE_SCN_MEM_WRITE
|
||||
//CHECK-NEXT: SectionData =
|
||||
//CHECK-NEXT: 00 00 00 00 90 90 90 90 - 00 00 00 00 00 00 00 00
|
||||
|
@ -1,123 +0,0 @@
|
||||
; This test checks that the COFF object emitter works for the most basic
|
||||
; programs.
|
||||
|
||||
; RUN: llc -filetype=obj -mtriple i686-pc-win32 %s -o - | coff-dump.py | FileCheck %s
|
||||
; RUN: llc -filetype=obj -mtriple x86_64-pc-win32 %s -o %t
|
||||
|
||||
@.str = private constant [12 x i8] c"Hello World\00" ; <[12 x i8]*> [#uses=1]
|
||||
|
||||
define i32 @main() nounwind {
|
||||
entry:
|
||||
%call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8]* @.str, i32 0, i32 0)) nounwind ; <i32> [#uses=0]
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
declare i32 @printf(i8* nocapture, ...) nounwind
|
||||
|
||||
; CHECK: {
|
||||
; CHECK: MachineType = IMAGE_FILE_MACHINE_I386 (0x14C)
|
||||
; CHECK: NumberOfSections = 2
|
||||
; CHECK: TimeDateStamp = {{[0-9]+}}
|
||||
; CHECK: PointerToSymbolTable = 0x{{[0-9A-F]+}}
|
||||
; CHECK: NumberOfSymbols = 6
|
||||
; CHECK: SizeOfOptionalHeader = 0
|
||||
; CHECK: Characteristics = 0x0
|
||||
; CHECK: Sections = [
|
||||
; CHECK: 1 = {
|
||||
; CHECK: Name = .text
|
||||
; CHECK: VirtualSize = 0
|
||||
; CHECK: VirtualAddress = 0
|
||||
; CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
; CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
; CHECK: PointerToRelocations = 0x{{[0-9A-F]+}}
|
||||
; CHECK: PointerToLineNumbers = 0x0
|
||||
; CHECK: NumberOfRelocations = 2
|
||||
; CHECK: NumberOfLineNumbers = 0
|
||||
; CHECK: Charateristics = 0x60500020
|
||||
; CHECK: IMAGE_SCN_CNT_CODE
|
||||
; CHECK: IMAGE_SCN_ALIGN_16BYTES
|
||||
; CHECK: IMAGE_SCN_MEM_EXECUTE
|
||||
; CHECK: IMAGE_SCN_MEM_READ
|
||||
; CHECK: SectionData =
|
||||
; CHECK: Relocations = [
|
||||
; CHECK: 0 = {
|
||||
; CHECK: VirtualAddress = 0x{{[0-9A-F]+}}
|
||||
; CHECK: SymbolTableIndex = 2
|
||||
; CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
; CHECK: SymbolName = .data
|
||||
; CHECK: }
|
||||
; CHECK: 1 = {
|
||||
; CHECK: VirtualAddress = 0x{{[0-9A-F]+}}
|
||||
; CHECK: SymbolTableIndex = 5
|
||||
; CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
; CHECK: SymbolName = _printf
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
; CHECK: }
|
||||
; CHECK: 2 = {
|
||||
; CHECK: Name = .data
|
||||
; CHECK: VirtualSize = 0
|
||||
; CHECK: VirtualAddress = 0
|
||||
; CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
; CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
; CHECK: PointerToRelocations = 0x0
|
||||
; CHECK: PointerToLineNumbers = 0x0
|
||||
; CHECK: NumberOfRelocations = 0
|
||||
; CHECK: NumberOfLineNumbers = 0
|
||||
; CHECK: Charateristics = 0xC0100040
|
||||
; CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
; CHECK: IMAGE_SCN_ALIGN_1BYTES
|
||||
; CHECK: IMAGE_SCN_MEM_READ
|
||||
; CHECK: IMAGE_SCN_MEM_WRITE
|
||||
; CHECK: SectionData =
|
||||
; CHECK: 48 65 6C 6C 6F 20 57 6F - 72 6C 64 00 |Hello World.|
|
||||
; CHECK: Relocations = None
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
; CHECK: Symbols = [
|
||||
; CHECK: 0 = {
|
||||
; CHECK: Name = .text
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 1
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
; CHECK: NumberOfAuxSymbols = 1
|
||||
; CHECK: AuxillaryData =
|
||||
; CHECK: 15 00 00 00 02 00 00 00 - 00 00 00 00 01 00 00 00 |................|
|
||||
; CHECK: 00 00 |..|
|
||||
; CHECK: }
|
||||
; CHECK: 2 = {
|
||||
; CHECK: Name = .data
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 2
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
; CHECK: NumberOfAuxSymbols = 1
|
||||
; CHECK: AuxillaryData =
|
||||
; CHECK: 0C 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |................|
|
||||
; CHECK: 00 00 |..|
|
||||
; CHECK: }
|
||||
; CHECK: 4 = {
|
||||
; CHECK: Name = _main
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 1
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_FUNCTION (2)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
; CHECK: NumberOfAuxSymbols = 0
|
||||
; CHECK: AuxillaryData =
|
||||
; CHECK: }
|
||||
; CHECK: 5 = {
|
||||
; CHECK: Name = _printf
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 0
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
; CHECK: NumberOfAuxSymbols = 0
|
||||
; CHECK: AuxillaryData =
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
; CHECK: }
|
133
test/MC/COFF/basic-coff.s
Normal file
133
test/MC/COFF/basic-coff.s
Normal file
@ -0,0 +1,133 @@
|
||||
// This test checks that the COFF object emitter works for the most basic
|
||||
// programs.
|
||||
|
||||
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | coff-dump.py | FileCheck %s
|
||||
// I WOULD RUN, BUT THIS FAILS: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s
|
||||
|
||||
.def _main;
|
||||
.scl 2;
|
||||
.type 32;
|
||||
.endef
|
||||
.text
|
||||
.globl _main
|
||||
.align 16, 0x90
|
||||
_main: # @main
|
||||
# BB#0: # %entry
|
||||
subl $4, %esp
|
||||
movl $L_.str, (%esp)
|
||||
calll _printf
|
||||
xorl %eax, %eax
|
||||
addl $4, %esp
|
||||
ret
|
||||
|
||||
.data
|
||||
L_.str: # @.str
|
||||
.asciz "Hello World"
|
||||
|
||||
// CHECK: {
|
||||
// CHECK: MachineType = IMAGE_FILE_MACHINE_I386 (0x14C)
|
||||
// CHECK: NumberOfSections = 2
|
||||
// CHECK: TimeDateStamp = {{[0-9]+}}
|
||||
// CHECK: PointerToSymbolTable = 0x{{[0-9A-F]+}}
|
||||
// CHECK: NumberOfSymbols = 6
|
||||
// CHECK: SizeOfOptionalHeader = 0
|
||||
// CHECK: Characteristics = 0x0
|
||||
// CHECK: Sections = [
|
||||
// CHECK: 1 = {
|
||||
// CHECK: Name = .text
|
||||
// CHECK: VirtualSize = 0
|
||||
// CHECK: VirtualAddress = 0
|
||||
// CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
// CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
// CHECK: PointerToRelocations = 0x{{[0-9A-F]+}}
|
||||
// CHECK: PointerToLineNumbers = 0x0
|
||||
// CHECK: NumberOfRelocations = 2
|
||||
// CHECK: NumberOfLineNumbers = 0
|
||||
// CHECK: Charateristics = 0x60500020
|
||||
// CHECK: IMAGE_SCN_CNT_CODE
|
||||
// CHECK: IMAGE_SCN_ALIGN_16BYTES
|
||||
// CHECK: IMAGE_SCN_MEM_EXECUTE
|
||||
// CHECK: IMAGE_SCN_MEM_READ
|
||||
// CHECK: SectionData =
|
||||
// CHECK: Relocations = [
|
||||
// CHECK: 0 = {
|
||||
// CHECK: VirtualAddress = 0x{{[0-9A-F]+}}
|
||||
// CHECK: SymbolTableIndex = 2
|
||||
// CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
// CHECK: SymbolName = .data
|
||||
// CHECK: }
|
||||
// CHECK: 1 = {
|
||||
// CHECK: VirtualAddress = 0x{{[0-9A-F]+}}
|
||||
// CHECK: SymbolTableIndex = 5
|
||||
// CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
// CHECK: SymbolName = _printf
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
||||
// CHECK: }
|
||||
// CHECK: 2 = {
|
||||
// CHECK: Name = .data
|
||||
// CHECK: VirtualSize = 0
|
||||
// CHECK: VirtualAddress = 0
|
||||
// CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
// CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
// CHECK: PointerToRelocations = 0x0
|
||||
// CHECK: PointerToLineNumbers = 0x0
|
||||
// CHECK: NumberOfRelocations = 0
|
||||
// CHECK: NumberOfLineNumbers = 0
|
||||
// CHECK: Charateristics = 0xC0100040
|
||||
// CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
// CHECK: IMAGE_SCN_ALIGN_1BYTES
|
||||
// CHECK: IMAGE_SCN_MEM_READ
|
||||
// CHECK: IMAGE_SCN_MEM_WRITE
|
||||
// CHECK: SectionData =
|
||||
// CHECK: 48 65 6C 6C 6F 20 57 6F - 72 6C 64 00 |Hello World.|
|
||||
// CHECK: Relocations = None
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
||||
// CHECK: Symbols = [
|
||||
// CHECK: 0 = {
|
||||
// CHECK: Name = .text
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 1
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
// CHECK: NumberOfAuxSymbols = 1
|
||||
// CHECK: AuxillaryData =
|
||||
// CHECK: 15 00 00 00 02 00 00 00 - 00 00 00 00 01 00 00 00 |................|
|
||||
// CHECK: 00 00 |..|
|
||||
// CHECK: }
|
||||
// CHECK: 2 = {
|
||||
// CHECK: Name = .data
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 2
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
// CHECK: NumberOfAuxSymbols = 1
|
||||
// CHECK: AuxillaryData =
|
||||
// CHECK: 0C 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |................|
|
||||
// CHECK: 00 00 |..|
|
||||
// CHECK: }
|
||||
// CHECK: 4 = {
|
||||
// CHECK: Name = _main
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 1
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_FUNCTION (2)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
// CHECK: NumberOfAuxSymbols = 0
|
||||
// CHECK: AuxillaryData =
|
||||
// CHECK: }
|
||||
// CHECK: 5 = {
|
||||
// CHECK: Name = _printf
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 0
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
// CHECK: NumberOfAuxSymbols = 0
|
||||
// CHECK: AuxillaryData =
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
||||
// CHECK: }
|
@ -1,29 +0,0 @@
|
||||
; The purpose of this test is to verify that we do not produce unneeded
|
||||
; relocations when symbols are in the same section and we know their offset.
|
||||
|
||||
; RUN: llc -filetype=obj -mtriple i686-pc-win32 %s -o - | coff-dump.py | FileCheck %s
|
||||
; RUN: llc -filetype=obj -mtriple x86_64-pc-win32 %s -o - | coff-dump.py | FileCheck %s
|
||||
|
||||
define void @foo() {
|
||||
e:
|
||||
br label %i
|
||||
i:
|
||||
br label %i
|
||||
}
|
||||
|
||||
define void @bar() {
|
||||
e:
|
||||
br label %i
|
||||
i:
|
||||
br label %i
|
||||
}
|
||||
|
||||
define void @baz() {
|
||||
e:
|
||||
call void @baz()
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: Sections = [
|
||||
; CHECK-NOT: NumberOfRelocations = {{[^0]}}
|
||||
; CHECK: Symbols = [
|
50
test/MC/COFF/simple-fixups.s
Normal file
50
test/MC/COFF/simple-fixups.s
Normal file
@ -0,0 +1,50 @@
|
||||
// The purpose of this test is to verify that we do not produce unneeded
|
||||
// relocations when symbols are in the same section and we know their offset.
|
||||
|
||||
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | coff-dump.py | FileCheck %s
|
||||
// I WOULD RUN, BUT THIS FAILS: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | coff-dump.py | FileCheck %s
|
||||
|
||||
.def _foo;
|
||||
.scl 2;
|
||||
.type 32;
|
||||
.endef
|
||||
.text
|
||||
.globl _foo
|
||||
.align 16, 0x90
|
||||
_foo: # @foo
|
||||
# BB#0: # %e
|
||||
.align 16, 0x90
|
||||
LBB0_1: # %i
|
||||
# =>This Inner Loop Header: Depth=1
|
||||
jmp LBB0_1
|
||||
|
||||
.def _bar;
|
||||
.scl 2;
|
||||
.type 32;
|
||||
.endef
|
||||
.globl _bar
|
||||
.align 16, 0x90
|
||||
_bar: # @bar
|
||||
# BB#0: # %e
|
||||
.align 16, 0x90
|
||||
LBB1_1: # %i
|
||||
# =>This Inner Loop Header: Depth=1
|
||||
jmp LBB1_1
|
||||
|
||||
.def _baz;
|
||||
.scl 2;
|
||||
.type 32;
|
||||
.endef
|
||||
.globl _baz
|
||||
.align 16, 0x90
|
||||
_baz: # @baz
|
||||
# BB#0: # %e
|
||||
subl $4, %esp
|
||||
Ltmp0:
|
||||
calll _baz
|
||||
addl $4, %esp
|
||||
ret
|
||||
|
||||
// CHECK: Sections = [
|
||||
// CHECK-NOT: NumberOfRelocations = {{[^0]}}
|
||||
// CHECK: Symbols = [
|
@ -3,6 +3,9 @@
|
||||
|
||||
; This test case was reduced from Lua/lapi.c.
|
||||
|
||||
; This test has yet to be converted to assembly becase llvm-mc cannot read
|
||||
; x86-64 COFF code yet.
|
||||
|
||||
; RUN: llc -filetype=obj -mtriple i686-pc-win32 %s -o %t
|
||||
; RUN: llc -filetype=obj -mtriple x86_64-pc-win32 %s -o %t
|
||||
|
||||
|
@ -1,48 +0,0 @@
|
||||
; The purpose of this test is to verify that symbol aliases
|
||||
; (@foo = alias <type> @bar) generate the correct entries in the symbol table.
|
||||
; They should be identical except for the name.
|
||||
|
||||
; RUN: llc -filetype=obj -mtriple i686-pc-win32 %s -o - | coff-dump.py | FileCheck %s
|
||||
; RUN: llc -filetype=obj -mtriple x86_64-pc-win32 %s -o - | coff-dump.py | FileCheck %s
|
||||
|
||||
define void @foo() {
|
||||
entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
@bar = global i32 zeroinitializer
|
||||
|
||||
@foo_alias = alias void ()* @foo
|
||||
@bar_alias = alias i32* @bar
|
||||
|
||||
; CHECK: Name = {{_?}}foo
|
||||
; CHECK-NEXT: Value = [[FOO_VALUE:.*$]]
|
||||
; CHECK-NEXT: SectionNumber = [[FOO_SECTION_NUMBER:.*$]]
|
||||
; CHECK-NEXT: SimpleType = [[FOO_SIMPLE_TYPE:.*$]]
|
||||
; CHECK-NEXT: ComplexType = [[FOO_COMPLEX_TYPE:.*$]]
|
||||
; CHECK-NEXT: StorageClass = [[FOO_STORAGE_CLASS:.*$]]
|
||||
; CHECK-NEXT: NumberOfAuxSymbols = [[FOO_NUMBER_OF_AUX_SYMBOLS:.*$]]
|
||||
|
||||
; CHECK: Name = {{_?}}bar
|
||||
; CHECK-NEXT: Value = [[BAR_VALUE:.*$]]
|
||||
; CHECK-NEXT: SectionNumber = [[BAR_SECTION_NUMBER:.*$]]
|
||||
; CHECK-NEXT: SimpleType = [[BAR_SIMPLE_TYPE:.*$]]
|
||||
; CHECK-NEXT: ComplexType = [[BAR_COMPLEX_TYPE:.*$]]
|
||||
; CHECK-NEXT: StorageClass = [[BAR_STORAGE_CLASS:.*$]]
|
||||
; CHECK-NEXT: NumberOfAuxSymbols = [[BAR_NUMBER_OF_AUX_SYMBOLS:.*$]]
|
||||
|
||||
; CHECK: Name = {{_?}}foo_alias
|
||||
; CHECK-NEXT: Value = [[FOO_VALUE]]
|
||||
; CHECK-NEXT: SectionNumber = [[FOO_SECTION_NUMBER]]
|
||||
; CHECK-NEXT: SimpleType = [[FOO_SIMPLE_TYPE]]
|
||||
; CHECK-NEXT: ComplexType = [[FOO_COMPLEX_TYPE]]
|
||||
; CHECK-NEXT: StorageClass = [[FOO_STORAGE_CLASS]]
|
||||
; CHECK-NEXT: NumberOfAuxSymbols = [[FOO_NUMBER_OF_AUX_SYMBOLS]]
|
||||
|
||||
; CHECK: Name = {{_?}}bar_alias
|
||||
; CHECK-NEXT: Value = [[BAR_VALUE]]
|
||||
; CHECK-NEXT: SectionNumber = [[BAR_SECTION_NUMBER]]
|
||||
; CHECK-NEXT: SimpleType = [[BAR_SIMPLE_TYPE]]
|
||||
; CHECK-NEXT: ComplexType = [[BAR_COMPLEX_TYPE]]
|
||||
; CHECK-NEXT: StorageClass = [[BAR_STORAGE_CLASS]]
|
||||
; CHECK-NEXT: NumberOfAuxSymbols = [[BAR_NUMBER_OF_AUX_SYMBOLS]]
|
62
test/MC/COFF/symbol-alias.s
Normal file
62
test/MC/COFF/symbol-alias.s
Normal file
@ -0,0 +1,62 @@
|
||||
// The purpose of this test is to verify that symbol aliases
|
||||
// (@foo = alias <type> @bar) generate the correct entries in the symbol table.
|
||||
// They should be identical except for the name.
|
||||
|
||||
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | coff-dump.py | FileCheck %s
|
||||
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | coff-dump.py | FileCheck %s
|
||||
|
||||
.def _foo;
|
||||
.scl 2;
|
||||
.type 32;
|
||||
.endef
|
||||
.text
|
||||
.globl _foo
|
||||
.align 16, 0x90
|
||||
_foo: # @foo
|
||||
# BB#0: # %entry
|
||||
ret
|
||||
|
||||
.data
|
||||
.globl _bar # @bar
|
||||
.align 4
|
||||
_bar:
|
||||
.long 0 # 0x0
|
||||
|
||||
|
||||
.globl _foo_alias
|
||||
_foo_alias = _foo
|
||||
.globl _bar_alias
|
||||
_bar_alias = _bar
|
||||
|
||||
// CHECK: Name = {{_?}}foo
|
||||
// CHECK-NEXT: Value = [[FOO_VALUE:.*$]]
|
||||
// CHECK-NEXT: SectionNumber = [[FOO_SECTION_NUMBER:.*$]]
|
||||
// CHECK-NEXT: SimpleType = [[FOO_SIMPLE_TYPE:.*$]]
|
||||
// CHECK-NEXT: ComplexType = [[FOO_COMPLEX_TYPE:.*$]]
|
||||
// CHECK-NEXT: StorageClass = [[FOO_STORAGE_CLASS:.*$]]
|
||||
// CHECK-NEXT: NumberOfAuxSymbols = [[FOO_NUMBER_OF_AUX_SYMBOLS:.*$]]
|
||||
|
||||
// CHECK: Name = {{_?}}bar
|
||||
// CHECK-NEXT: Value = [[BAR_VALUE:.*$]]
|
||||
// CHECK-NEXT: SectionNumber = [[BAR_SECTION_NUMBER:.*$]]
|
||||
// CHECK-NEXT: SimpleType = [[BAR_SIMPLE_TYPE:.*$]]
|
||||
// CHECK-NEXT: ComplexType = [[BAR_COMPLEX_TYPE:.*$]]
|
||||
// CHECK-NEXT: StorageClass = [[BAR_STORAGE_CLASS:.*$]]
|
||||
// CHECK-NEXT: NumberOfAuxSymbols = [[BAR_NUMBER_OF_AUX_SYMBOLS:.*$]]
|
||||
|
||||
// CHECK: Name = {{_?}}foo_alias
|
||||
// CHECK-NEXT: Value = [[FOO_VALUE]]
|
||||
// CHECK-NEXT: SectionNumber = [[FOO_SECTION_NUMBER]]
|
||||
// CHECK-NEXT: SimpleType = [[FOO_SIMPLE_TYPE]]
|
||||
// CHECK-NEXT: ComplexType = [[FOO_COMPLEX_TYPE]]
|
||||
// CHECK-NEXT: StorageClass = [[FOO_STORAGE_CLASS]]
|
||||
// CHECK-NEXT: NumberOfAuxSymbols = [[FOO_NUMBER_OF_AUX_SYMBOLS]]
|
||||
|
||||
// CHECK: Name = {{_?}}bar_alias
|
||||
// CHECK-NEXT: Value = [[BAR_VALUE]]
|
||||
// CHECK-NEXT: SectionNumber = [[BAR_SECTION_NUMBER]]
|
||||
// CHECK-NEXT: SimpleType = [[BAR_SIMPLE_TYPE]]
|
||||
// CHECK-NEXT: ComplexType = [[BAR_COMPLEX_TYPE]]
|
||||
// CHECK-NEXT: StorageClass = [[BAR_STORAGE_CLASS]]
|
||||
// CHECK-NEXT: NumberOfAuxSymbols = [[BAR_NUMBER_OF_AUX_SYMBOLS]]
|
||||
|
@ -1,172 +0,0 @@
|
||||
; The purpose of this test is to see if the COFF object writer is emitting the
|
||||
; proper relocations for multiple pieces of data in a single data fragment.
|
||||
|
||||
; RUN: llc -filetype=obj -mtriple i686-pc-win32 %s -o - | coff-dump.py | FileCheck %s
|
||||
; RUN: llc -filetype=obj -mtriple x86_64-pc-win32 %s -o %t
|
||||
|
||||
@.str0 = private constant [7 x i8] c"Hello \00" ; <[7 x i8]*> [#uses=1]
|
||||
@.str1 = private constant [7 x i8] c"World!\00" ; <[7 x i8]*> [#uses=1]
|
||||
@.str2 = private constant [19 x i8] c"I'm The Last Line.\00"
|
||||
|
||||
define i32 @main() nounwind {
|
||||
entry:
|
||||
%call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8]* @.str0, i32 0, i32 0)) nounwind ; <i32> [#uses=0]
|
||||
%puts0 = tail call i32 @puts(i8* getelementptr inbounds ([7 x i8]* @.str1, i32 0, i32 0)) ; <i32> [#uses=0]
|
||||
%puts1 = tail call i32 @puts(i8* getelementptr inbounds ([19 x i8]* @.str2, i32 0, i32 0)) ; <i32> [#uses=0]
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
declare i32 @printf(i8* nocapture, ...) nounwind
|
||||
|
||||
declare i32 @puts(i8* nocapture) nounwind
|
||||
|
||||
; CHECK: {
|
||||
; CHECK: MachineType = IMAGE_FILE_MACHINE_I386 (0x14C)
|
||||
; CHECK: NumberOfSections = 2
|
||||
; CHECK: TimeDateStamp = {{[0-9]+}}
|
||||
; CHECK: PointerToSymbolTable = 0x{{[0-9A-F]+}}
|
||||
; CHECK: NumberOfSymbols = 7
|
||||
; CHECK: SizeOfOptionalHeader = 0
|
||||
; CHECK: Characteristics = 0x0
|
||||
; CHECK: Sections = [
|
||||
; CHECK: 1 = {
|
||||
; CHECK: Name = .text
|
||||
; CHECK: VirtualSize = 0
|
||||
; CHECK: VirtualAddress = 0
|
||||
; CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
; CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
; CHECK: PointerToRelocations = 0x{{[0-9A-F]+}}
|
||||
; CHECK: PointerToLineNumbers = 0x0
|
||||
; CHECK: NumberOfRelocations = 6
|
||||
; CHECK: NumberOfLineNumbers = 0
|
||||
; CHECK: Charateristics = 0x60500020
|
||||
; CHECK: IMAGE_SCN_CNT_CODE
|
||||
; CHECK: IMAGE_SCN_ALIGN_16BYTES
|
||||
; CHECK: IMAGE_SCN_MEM_EXECUTE
|
||||
; CHECK: IMAGE_SCN_MEM_READ
|
||||
; CHECK: SectionData =
|
||||
; CHECK: 83 EC 04 C7 04 24 00 00 - 00 00 E8 00 00 00 00 C7 |.....$..........|
|
||||
; CHECK: 04 24 07 00 00 00 E8 00 - 00 00 00 C7 04 24 10 00 |.$...........$..|
|
||||
; CHECK: 00 00 E8 00 00 00 00 31 - C0 83 C4 04 C3 00 00 00 |.......1........|
|
||||
; CHECK: Relocations = [
|
||||
; CHECK: 0 = {
|
||||
; CHECK: VirtualAddress = 0x6
|
||||
; CHECK: SymbolTableIndex = 2
|
||||
; CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
; CHECK: SymbolName = .data
|
||||
; CHECK: }
|
||||
; CHECK: 1 = {
|
||||
; CHECK: VirtualAddress = 0xB
|
||||
; CHECK: SymbolTableIndex = 5
|
||||
; CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
; CHECK: SymbolName = _printf
|
||||
; CHECK: }
|
||||
; CHECK: 2 = {
|
||||
; CHECK: VirtualAddress = 0x12
|
||||
; CHECK: SymbolTableIndex = 2
|
||||
; CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
; CHECK: SymbolName = .data
|
||||
; CHECK: }
|
||||
; CHECK: 3 = {
|
||||
; CHECK: VirtualAddress = 0x17
|
||||
; CHECK: SymbolTableIndex = 6
|
||||
; CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
; CHECK: SymbolName = _puts
|
||||
; CHECK: }
|
||||
; CHECK: 4 = {
|
||||
; CHECK: VirtualAddress = 0x1E
|
||||
; CHECK: SymbolTableIndex = 2
|
||||
; CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
; CHECK: SymbolName = .data
|
||||
; CHECK: }
|
||||
; CHECK: 5 = {
|
||||
; CHECK: VirtualAddress = 0x23
|
||||
; CHECK: SymbolTableIndex = 6
|
||||
; CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
; CHECK: SymbolName = _puts
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
; CHECK: }
|
||||
; CHECK: 2 = {
|
||||
; CHECK: Name = .data
|
||||
; CHECK: VirtualSize = 0
|
||||
; CHECK: VirtualAddress = 0
|
||||
; CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
; CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
; CHECK: PointerToRelocations = 0x0
|
||||
; CHECK: PointerToLineNumbers = 0x0
|
||||
; CHECK: NumberOfRelocations = 0
|
||||
; CHECK: NumberOfLineNumbers = 0
|
||||
; CHECK: Charateristics = 0xC0500040
|
||||
; CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
; CHECK: IMAGE_SCN_ALIGN_16BYTES
|
||||
; CHECK: IMAGE_SCN_MEM_READ
|
||||
; CHECK: IMAGE_SCN_MEM_WRITE
|
||||
; CHECK: SectionData =
|
||||
; CHECK: 48 65 6C 6C 6F 20 00 57 - 6F 72 6C 64 21 00 00 00 |Hello .World!...|
|
||||
; CHECK: 49 27 6D 20 54 68 65 20 - 4C 61 73 74 20 4C 69 6E |I'm The Last Lin|
|
||||
; CHECK: 65 2E 00 |e..|
|
||||
; CHECK: Relocations = None
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
; CHECK: Symbols = [
|
||||
; CHECK: 0 = {
|
||||
; CHECK: Name = .text
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 1
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
; CHECK: NumberOfAuxSymbols = 1
|
||||
; CHECK: AuxillaryData =
|
||||
; CHECK: 30 00 00 00 06 00 00 00 - 00 00 00 00 01 00 00 00 |0...............|
|
||||
; CHECK: 00 00 |..|
|
||||
|
||||
; CHECK: }
|
||||
; CHECK: 2 = {
|
||||
; CHECK: Name = .data
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 2
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
; CHECK: NumberOfAuxSymbols = 1
|
||||
; CHECK: AuxillaryData =
|
||||
; CHECK: 23 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |#...............|
|
||||
; CHECK: 00 00 |..|
|
||||
|
||||
; CHECK: }
|
||||
; CHECK: 4 = {
|
||||
; CHECK: Name = _main
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 1
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_FUNCTION (2)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
; CHECK: NumberOfAuxSymbols = 0
|
||||
; CHECK: AuxillaryData =
|
||||
|
||||
; CHECK: 5 = {
|
||||
; CHECK: Name = _printf
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 0
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
; CHECK: NumberOfAuxSymbols = 0
|
||||
; CHECK: AuxillaryData =
|
||||
|
||||
; CHECK: }
|
||||
; CHECK: 6 = {
|
||||
; CHECK: Name = _puts
|
||||
; CHECK: Value = 0
|
||||
; CHECK: SectionNumber = 0
|
||||
; CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
; CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
; CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
; CHECK: NumberOfAuxSymbols = 0
|
||||
; CHECK: AuxillaryData =
|
||||
|
||||
; CHECK: }
|
||||
; CHECK: ]
|
||||
; CHECK: }
|
187
test/MC/COFF/symbol-fragment-offset.s
Normal file
187
test/MC/COFF/symbol-fragment-offset.s
Normal file
@ -0,0 +1,187 @@
|
||||
// The purpose of this test is to see if the COFF object writer is emitting the
|
||||
// proper relocations for multiple pieces of data in a single data fragment.
|
||||
|
||||
// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | coff-dump.py | FileCheck %s
|
||||
// I WOULD RUN, BUT THIS FAILS: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s
|
||||
|
||||
.def _main;
|
||||
.scl 2;
|
||||
.type 32;
|
||||
.endef
|
||||
.text
|
||||
.globl _main
|
||||
.align 16, 0x90
|
||||
_main: # @main
|
||||
# BB#0: # %entry
|
||||
subl $4, %esp
|
||||
movl $L_.str0, (%esp)
|
||||
calll _printf
|
||||
movl $L_.str1, (%esp)
|
||||
calll _puts
|
||||
movl $L_.str2, (%esp)
|
||||
calll _puts
|
||||
xorl %eax, %eax
|
||||
addl $4, %esp
|
||||
ret
|
||||
|
||||
.data
|
||||
L_.str0: # @.str0
|
||||
.asciz "Hello "
|
||||
|
||||
L_.str1: # @.str1
|
||||
.asciz "World!"
|
||||
|
||||
.align 16 # @.str2
|
||||
L_.str2:
|
||||
.asciz "I'm The Last Line."
|
||||
|
||||
// CHECK: {
|
||||
// CHECK: MachineType = IMAGE_FILE_MACHINE_I386 (0x14C)
|
||||
// CHECK: NumberOfSections = 2
|
||||
// CHECK: TimeDateStamp = {{[0-9]+}}
|
||||
// CHECK: PointerToSymbolTable = 0x{{[0-9A-F]+}}
|
||||
// CHECK: NumberOfSymbols = 7
|
||||
// CHECK: SizeOfOptionalHeader = 0
|
||||
// CHECK: Characteristics = 0x0
|
||||
// CHECK: Sections = [
|
||||
// CHECK: 1 = {
|
||||
// CHECK: Name = .text
|
||||
// CHECK: VirtualSize = 0
|
||||
// CHECK: VirtualAddress = 0
|
||||
// CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
// CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
// CHECK: PointerToRelocations = 0x{{[0-9A-F]+}}
|
||||
// CHECK: PointerToLineNumbers = 0x0
|
||||
// CHECK: NumberOfRelocations = 6
|
||||
// CHECK: NumberOfLineNumbers = 0
|
||||
// CHECK: Charateristics = 0x60500020
|
||||
// CHECK: IMAGE_SCN_CNT_CODE
|
||||
// CHECK: IMAGE_SCN_ALIGN_16BYTES
|
||||
// CHECK: IMAGE_SCN_MEM_EXECUTE
|
||||
// CHECK: IMAGE_SCN_MEM_READ
|
||||
// CHECK: SectionData =
|
||||
// CHECK: 83 EC 04 C7 04 24 00 00 - 00 00 E8 00 00 00 00 C7 |.....$..........|
|
||||
// CHECK: 04 24 07 00 00 00 E8 00 - 00 00 00 C7 04 24 10 00 |.$...........$..|
|
||||
// CHECK: 00 00 E8 00 00 00 00 31 - C0 83 C4 04 C3 00 00 00 |.......1........|
|
||||
// CHECK: Relocations = [
|
||||
// CHECK: 0 = {
|
||||
// CHECK: VirtualAddress = 0x6
|
||||
// CHECK: SymbolTableIndex = 2
|
||||
// CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
// CHECK: SymbolName = .data
|
||||
// CHECK: }
|
||||
// CHECK: 1 = {
|
||||
// CHECK: VirtualAddress = 0xB
|
||||
// CHECK: SymbolTableIndex = 5
|
||||
// CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
// CHECK: SymbolName = _printf
|
||||
// CHECK: }
|
||||
// CHECK: 2 = {
|
||||
// CHECK: VirtualAddress = 0x12
|
||||
// CHECK: SymbolTableIndex = 2
|
||||
// CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
// CHECK: SymbolName = .data
|
||||
// CHECK: }
|
||||
// CHECK: 3 = {
|
||||
// CHECK: VirtualAddress = 0x17
|
||||
// CHECK: SymbolTableIndex = 6
|
||||
// CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
// CHECK: SymbolName = _puts
|
||||
// CHECK: }
|
||||
// CHECK: 4 = {
|
||||
// CHECK: VirtualAddress = 0x1E
|
||||
// CHECK: SymbolTableIndex = 2
|
||||
// CHECK: Type = IMAGE_REL_I386_DIR32 (6)
|
||||
// CHECK: SymbolName = .data
|
||||
// CHECK: }
|
||||
// CHECK: 5 = {
|
||||
// CHECK: VirtualAddress = 0x23
|
||||
// CHECK: SymbolTableIndex = 6
|
||||
// CHECK: Type = IMAGE_REL_I386_REL32 (20)
|
||||
// CHECK: SymbolName = _puts
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
||||
// CHECK: }
|
||||
// CHECK: 2 = {
|
||||
// CHECK: Name = .data
|
||||
// CHECK: VirtualSize = 0
|
||||
// CHECK: VirtualAddress = 0
|
||||
// CHECK: SizeOfRawData = {{[0-9]+}}
|
||||
// CHECK: PointerToRawData = 0x{{[0-9A-F]+}}
|
||||
// CHECK: PointerToRelocations = 0x0
|
||||
// CHECK: PointerToLineNumbers = 0x0
|
||||
// CHECK: NumberOfRelocations = 0
|
||||
// CHECK: NumberOfLineNumbers = 0
|
||||
// CHECK: Charateristics = 0xC0500040
|
||||
// CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
// CHECK: IMAGE_SCN_ALIGN_16BYTES
|
||||
// CHECK: IMAGE_SCN_MEM_READ
|
||||
// CHECK: IMAGE_SCN_MEM_WRITE
|
||||
// CHECK: SectionData =
|
||||
// CHECK: 48 65 6C 6C 6F 20 00 57 - 6F 72 6C 64 21 00 00 00 |Hello .World!...|
|
||||
// CHECK: 49 27 6D 20 54 68 65 20 - 4C 61 73 74 20 4C 69 6E |I'm The Last Lin|
|
||||
// CHECK: 65 2E 00 |e..|
|
||||
// CHECK: Relocations = None
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
||||
// CHECK: Symbols = [
|
||||
// CHECK: 0 = {
|
||||
// CHECK: Name = .text
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 1
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
// CHECK: NumberOfAuxSymbols = 1
|
||||
// CHECK: AuxillaryData =
|
||||
// CHECK: 30 00 00 00 06 00 00 00 - 00 00 00 00 01 00 00 00 |0...............|
|
||||
// CHECK: 00 00 |..|
|
||||
|
||||
// CHECK: }
|
||||
// CHECK: 2 = {
|
||||
// CHECK: Name = .data
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 2
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_STATIC (3)
|
||||
// CHECK: NumberOfAuxSymbols = 1
|
||||
// CHECK: AuxillaryData =
|
||||
// CHECK: 23 00 00 00 00 00 00 00 - 00 00 00 00 02 00 00 00 |#...............|
|
||||
// CHECK: 00 00 |..|
|
||||
|
||||
// CHECK: }
|
||||
// CHECK: 4 = {
|
||||
// CHECK: Name = _main
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 1
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_FUNCTION (2)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
// CHECK: NumberOfAuxSymbols = 0
|
||||
// CHECK: AuxillaryData =
|
||||
|
||||
// CHECK: 5 = {
|
||||
// CHECK: Name = _printf
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 0
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
// CHECK: NumberOfAuxSymbols = 0
|
||||
// CHECK: AuxillaryData =
|
||||
|
||||
// CHECK: }
|
||||
// CHECK: 6 = {
|
||||
// CHECK: Name = _puts
|
||||
// CHECK: Value = 0
|
||||
// CHECK: SectionNumber = 0
|
||||
// CHECK: SimpleType = IMAGE_SYM_TYPE_NULL (0)
|
||||
// CHECK: ComplexType = IMAGE_SYM_DTYPE_NULL (0)
|
||||
// CHECK: StorageClass = IMAGE_SYM_CLASS_EXTERNAL (2)
|
||||
// CHECK: NumberOfAuxSymbols = 0
|
||||
// CHECK: AuxillaryData =
|
||||
|
||||
// CHECK: }
|
||||
// CHECK: ]
|
||||
// CHECK: }
|
Loading…
x
Reference in New Issue
Block a user