[llvm] r263521 - [MachO] Add MachO alt-entry directive support.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 14 18:43:06 PDT 2016
Author: lhames
Date: Mon Mar 14 20:43:05 2016
New Revision: 263521
URL: http://llvm.org/viewvc/llvm-project?rev=263521&view=rev
Log:
[MachO] Add MachO alt-entry directive support.
This patch adds support for the MachO .alt_entry assembly directive, and uses
it for global aliases with non-zero GEP offsets. The alt_entry flag indicates
that a symbol should be layed out immediately after the preceding symbol.
Conceptually it introduces an alternate entry point for a function or data
structure. E.g.:
safe_foo:
// check preconditions for foo
.alt_entry fast_foo
fast_foo:
// body of foo, can assume preconditions.
The .alt_entry flag is also implicitly set on assembly aliases of the form:
a = b + C
where C is a non-zero constant, since these have the same effect as an
alt_entry symbol: they introduce a label that cannot be moved relative to the
preceding one. Setting the alt_entry flag on aliases of this form fixes
http://llvm.org/PR25381.
Added:
llvm/trunk/test/CodeGen/X86/alias-gep.ll
llvm/trunk/test/MC/MachO/altentry.s
Modified:
llvm/trunk/include/llvm/MC/MCAsmInfo.h
llvm/trunk/include/llvm/MC/MCDirectives.h
llvm/trunk/include/llvm/MC/MCSymbolMachO.h
llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/trunk/lib/MC/MCAsmInfo.cpp
llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp
llvm/trunk/lib/MC/MCAsmStreamer.cpp
llvm/trunk/lib/MC/MCELFStreamer.cpp
llvm/trunk/lib/MC/MCMachOStreamer.cpp
llvm/trunk/lib/MC/MCParser/AsmParser.cpp
llvm/trunk/lib/MC/MachObjectWriter.cpp
llvm/trunk/test/MC/MachO/absolute.s
llvm/trunk/test/MC/MachO/variable-exprs.s
llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s
llvm/trunk/tools/llvm-readobj/MachODumper.cpp
Modified: llvm/trunk/include/llvm/MC/MCAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfo.h?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCAsmInfo.h (original)
+++ llvm/trunk/include/llvm/MC/MCAsmInfo.h Mon Mar 14 20:43:05 2016
@@ -280,6 +280,10 @@ protected:
/// to false.
bool HasNoDeadStrip;
+ /// True if this target supports the MachO .alt_entry directive. Defaults to
+ /// false.
+ bool HasAltEntry;
+
/// Used to declare a global as being a weak symbol. Defaults to ".weak".
const char *WeakDirective;
@@ -498,6 +502,7 @@ public:
bool hasSingleParameterDotFile() const { return HasSingleParameterDotFile; }
bool hasIdentDirective() const { return HasIdentDirective; }
bool hasNoDeadStrip() const { return HasNoDeadStrip; }
+ bool hasAltEntry() const { return HasAltEntry; }
const char *getWeakDirective() const { return WeakDirective; }
const char *getWeakRefDirective() const { return WeakRefDirective; }
bool hasWeakDefDirective() const { return HasWeakDefDirective; }
Modified: llvm/trunk/include/llvm/MC/MCDirectives.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCDirectives.h?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCDirectives.h (original)
+++ llvm/trunk/include/llvm/MC/MCDirectives.h Mon Mar 14 20:43:05 2016
@@ -35,6 +35,7 @@ enum MCSymbolAttr {
MCSA_Local, ///< .local (ELF)
MCSA_NoDeadStrip, ///< .no_dead_strip (MachO)
MCSA_SymbolResolver, ///< .symbol_resolver (MachO)
+ MCSA_AltEntry, ///< .alt_entry (MachO)
MCSA_PrivateExtern, ///< .private_extern (MachO)
MCSA_Protected, ///< .protected (ELF)
MCSA_Reference, ///< .reference (MachO)
Modified: llvm/trunk/include/llvm/MC/MCSymbolMachO.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSymbolMachO.h?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCSymbolMachO.h (original)
+++ llvm/trunk/include/llvm/MC/MCSymbolMachO.h Mon Mar 14 20:43:05 2016
@@ -33,6 +33,7 @@ class MCSymbolMachO : public MCSymbol {
SF_WeakReference = 0x0040,
SF_WeakDefinition = 0x0080,
SF_SymbolResolver = 0x0100,
+ SF_AltEntry = 0x0200,
// Common alignment
SF_CommonAlignmentMask = 0xF0FF,
@@ -88,6 +89,14 @@ public:
modifyFlags(SF_SymbolResolver, SF_SymbolResolver);
}
+ void setAltEntry() const {
+ modifyFlags(SF_AltEntry, SF_AltEntry);
+ }
+
+ bool isAltEntry() const {
+ return getFlags() & SF_AltEntry;
+ }
+
void setDesc(unsigned Value) const {
assert(Value == (Value & SF_DescFlagsMask) &&
"Invalid .desc value!");
@@ -96,7 +105,7 @@ public:
/// \brief Get the encoded value of the flags as they will be emitted in to
/// the MachO binary
- uint16_t getEncodedFlags() const {
+ uint16_t getEncodedFlags(bool EncodeAsAltEntry) const {
uint16_t Flags = getFlags();
// Common alignment is packed into the 'desc' bits.
@@ -113,6 +122,9 @@ public:
}
}
+ if (EncodeAsAltEntry)
+ Flags |= SF_AltEntry;
+
return Flags;
}
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Mon Mar 14 20:43:05 2016
@@ -1165,8 +1165,13 @@ bool AsmPrinter::doFinalization(Module &
EmitVisibility(Name, Alias.getVisibility());
+ const MCExpr *Expr = lowerConstant(Alias.getAliasee());
+
+ if (MAI->hasAltEntry() && isa<MCBinaryExpr>(Expr))
+ OutStreamer->EmitSymbolAttribute(Name, MCSA_AltEntry);
+
// Emit the directives as assignments aka .set:
- OutStreamer->EmitAssignment(Name, lowerConstant(Alias.getAliasee()));
+ OutStreamer->EmitAssignment(Name, Expr);
// If the aliasee does not correspond to a symbol in the output, i.e. the
// alias is not of an object or the aliased object is private, then set the
Modified: llvm/trunk/lib/MC/MCAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfo.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAsmInfo.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmInfo.cpp Mon Mar 14 20:43:05 2016
@@ -75,6 +75,7 @@ MCAsmInfo::MCAsmInfo() {
HasSingleParameterDotFile = true;
HasIdentDirective = false;
HasNoDeadStrip = false;
+ HasAltEntry = false;
WeakDirective = "\t.weak\t";
WeakRefDirective = nullptr;
HasWeakDefDirective = false;
Modified: llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp Mon Mar 14 20:43:05 2016
@@ -88,6 +88,7 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {
HasDotTypeDotSizeDirective = false;
HasNoDeadStrip = true;
+ HasAltEntry = true;
DwarfUsesRelocationsAcrossSections = false;
Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Mon Mar 14 20:43:05 2016
@@ -472,6 +472,7 @@ bool MCAsmStreamer::EmitSymbolAttribute(
OS << "\t.no_dead_strip\t";
break;
case MCSA_SymbolResolver: OS << "\t.symbol_resolver\t"; break;
+ case MCSA_AltEntry: OS << "\t.alt_entry\t"; break;
case MCSA_PrivateExtern:
OS << "\t.private_extern\t";
break;
Modified: llvm/trunk/lib/MC/MCELFStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCELFStreamer.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCELFStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCELFStreamer.cpp Mon Mar 14 20:43:05 2016
@@ -283,6 +283,9 @@ bool MCELFStreamer::EmitSymbolAttribute(
case MCSA_Internal:
Symbol->setVisibility(ELF::STV_INTERNAL);
break;
+
+ case MCSA_AltEntry:
+ llvm_unreachable("ELF doesn't support this attribute");
}
return true;
Modified: llvm/trunk/lib/MC/MCMachOStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCMachOStreamer.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCMachOStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCMachOStreamer.cpp Mon Mar 14 20:43:05 2016
@@ -23,6 +23,7 @@
#include "llvm/MC/MCSection.h"
#include "llvm/MC/MCSectionMachO.h"
#include "llvm/MC/MCSymbolMachO.h"
+#include "llvm/MC/MCValue.h"
#include "llvm/Support/Dwarf.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/TargetRegistry.h"
@@ -70,6 +71,7 @@ public:
void ChangeSection(MCSection *Sect, const MCExpr *Subsect) override;
void EmitLabel(MCSymbol *Symbol) override;
+ void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
void EmitEHSymAttributes(const MCSymbol *Symbol, MCSymbol *EHSymbol) override;
void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
void EmitLinkerOptions(ArrayRef<std::string> Options) override;
@@ -198,6 +200,16 @@ void MCMachOStreamer::EmitLabel(MCSymbol
cast<MCSymbolMachO>(Symbol)->clearReferenceType();
}
+void MCMachOStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
+ MCValue Res;
+
+ if (Value->evaluateAsRelocatable(Res, nullptr, nullptr))
+ if (Res.getSymA() && !Res.getSymB() && Res.getConstant() != 0)
+ cast<MCSymbolMachO>(Symbol)->setAltEntry();
+
+ MCObjectStreamer::EmitAssignment(Symbol, Value);
+}
+
void MCMachOStreamer::EmitDataRegion(DataRegionData::KindTy Kind) {
if (!getAssembler().getBackend().hasDataInCodeSupport())
return;
@@ -346,6 +358,10 @@ bool MCMachOStreamer::EmitSymbolAttribut
Symbol->setSymbolResolver();
break;
+ case MCSA_AltEntry:
+ Symbol->setAltEntry();
+ break;
+
case MCSA_PrivateExtern:
Symbol->setExternal(true);
Symbol->setPrivateExtern(true);
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Mon Mar 14 20:43:05 2016
@@ -350,8 +350,8 @@ private:
DK_BALIGNL, DK_P2ALIGN, DK_P2ALIGNW, DK_P2ALIGNL, DK_ORG, DK_FILL, DK_ENDR,
DK_BUNDLE_ALIGN_MODE, DK_BUNDLE_LOCK, DK_BUNDLE_UNLOCK,
DK_ZERO, DK_EXTERN, DK_GLOBL, DK_GLOBAL,
- DK_LAZY_REFERENCE, DK_NO_DEAD_STRIP, DK_SYMBOL_RESOLVER, DK_PRIVATE_EXTERN,
- DK_REFERENCE, DK_WEAK_DEFINITION, DK_WEAK_REFERENCE,
+ DK_LAZY_REFERENCE, DK_NO_DEAD_STRIP, DK_SYMBOL_RESOLVER, DK_ALT_ENTRY,
+ DK_PRIVATE_EXTERN, DK_REFERENCE, DK_WEAK_DEFINITION, DK_WEAK_REFERENCE,
DK_WEAK_DEF_CAN_BE_HIDDEN, DK_COMM, DK_COMMON, DK_LCOMM, DK_ABORT,
DK_INCLUDE, DK_INCBIN, DK_CODE16, DK_CODE16GCC, DK_REPT, DK_IRP, DK_IRPC,
DK_IF, DK_IFEQ, DK_IFGE, DK_IFGT, DK_IFLE, DK_IFLT, DK_IFNE, DK_IFB,
@@ -1598,6 +1598,8 @@ bool AsmParser::parseStatement(ParseStat
return parseDirectiveSymbolAttribute(MCSA_NoDeadStrip);
case DK_SYMBOL_RESOLVER:
return parseDirectiveSymbolAttribute(MCSA_SymbolResolver);
+ case DK_ALT_ENTRY:
+ return parseDirectiveSymbolAttribute(MCSA_AltEntry);
case DK_PRIVATE_EXTERN:
return parseDirectiveSymbolAttribute(MCSA_PrivateExtern);
case DK_REFERENCE:
@@ -4625,6 +4627,7 @@ void AsmParser::initializeDirectiveKindM
DirectiveKindMap[".lazy_reference"] = DK_LAZY_REFERENCE;
DirectiveKindMap[".no_dead_strip"] = DK_NO_DEAD_STRIP;
DirectiveKindMap[".symbol_resolver"] = DK_SYMBOL_RESOLVER;
+ DirectiveKindMap[".alt_entry"] = DK_ALT_ENTRY;
DirectiveKindMap[".private_extern"] = DK_PRIVATE_EXTERN;
DirectiveKindMap[".reference"] = DK_REFERENCE;
DirectiveKindMap[".weak_definition"] = DK_WEAK_DEFINITION;
Modified: llvm/trunk/lib/MC/MachObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MachObjectWriter.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MachObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/MachObjectWriter.cpp Mon Mar 14 20:43:05 2016
@@ -334,7 +334,7 @@ void MachObjectWriter::writeNlist(MachSy
if (AliaseeInfo)
SectionIndex = AliaseeInfo->SectionIndex;
Symbol = AliasedSymbol;
- // FIXME: Should this update Data as well? Do we need OrigSymbol at all?
+ // FIXME: Should this update Data as well?
}
// Set the N_TYPE bits. See <mach-o/nlist.h>.
@@ -377,7 +377,9 @@ void MachObjectWriter::writeNlist(MachSy
// The Mach-O streamer uses the lowest 16-bits of the flags for the 'desc'
// value.
- write16(cast<MCSymbolMachO>(Symbol)->getEncodedFlags());
+ bool EncodeAsAltEntry =
+ IsAlias && cast<MCSymbolMachO>(OrigSymbol).isAltEntry();
+ write16(cast<MCSymbolMachO>(Symbol)->getEncodedFlags(EncodeAsAltEntry));
if (is64Bit())
write64(Address);
else
Added: llvm/trunk/test/CodeGen/X86/alias-gep.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/alias-gep.ll?rev=263521&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/alias-gep.ll (added)
+++ llvm/trunk/test/CodeGen/X86/alias-gep.ll Mon Mar 14 20:43:05 2016
@@ -0,0 +1,22 @@
+; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck --check-prefix=MACHO %s
+; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck --check-prefix=ELF %s
+
+;MACHO: .globl _offsetSym0
+;MACHO-NOT: .alt_entry
+;MACHO: _offsetSym0 = _s
+;MACHO: .globl _offsetSym1
+;MACHO: .alt_entry _offsetSym1
+;MACHO: _offsetSym1 = _s+8
+
+;ELF: .globl offsetSym0
+;ELF-NOT: .alt_entry
+;ELF: offsetSym0 = s
+;ELF: .globl offsetSym1
+;ELF-NOT: .alt_entry
+;ELF: offsetSym1 = s+8
+
+%struct.S1 = type { i32, i32, i32 }
+
+ at s = global %struct.S1 { i32 31, i32 32, i32 33 }, align 4
+ at offsetSym0 = alias i32, i32* getelementptr inbounds (%struct.S1, %struct.S1* @s, i64 0, i32 0)
+ at offsetSym1 = alias i32, i32* getelementptr inbounds (%struct.S1, %struct.S1* @s, i64 0, i32 2)
Modified: llvm/trunk/test/MC/MachO/absolute.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/absolute.s?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/absolute.s (original)
+++ llvm/trunk/test/MC/MachO/absolute.s Mon Mar 14 20:43:05 2016
@@ -79,7 +79,8 @@ foo_equals2 = (_foo - _bar + 0xffff0000)
// CHECK: Type: Section (0xE)
// CHECK: Section: __text (0x1)
// CHECK: RefType: UndefinedNonLazy (0x0)
-// CHECK: Flags [ (0x20)
+// CHECK: Flags [ (0x220)
+// CHECK: AltEntry (0x200)
// CHECK: NoDeadStrip (0x20)
// CHECK: ]
// CHECK: Value: 0xFFFF0001
@@ -99,7 +100,8 @@ foo_equals2 = (_foo - _bar + 0xffff0000)
// CHECK: Type: Section (0xE)
// CHECK: Section: __text (0x1)
// CHECK: RefType: UndefinedNonLazy (0x0)
-// CHECK: Flags [ (0x0)
+// CHECK: Flags [ (0x200)
+// CHECK: AltEntry (0x200)
// CHECK: ]
// CHECK: Value: 0xFFFF0001
// CHECK: }
@@ -118,7 +120,8 @@ foo_equals2 = (_foo - _bar + 0xffff0000)
// CHECK: Type: Section (0xE)
// CHECK: Section: __text (0x1)
// CHECK: RefType: UndefinedNonLazy (0x0)
-// CHECK: Flags [ (0x20)
+// CHECK: Flags [ (0x220)
+// CHECK: AltEntry (0x200)
// CHECK: NoDeadStrip (0x20)
// CHECK: ]
// CHECK: Value: 0xFFFF0001
Added: llvm/trunk/test/MC/MachO/altentry.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/altentry.s?rev=263521&view=auto
==============================================================================
--- llvm/trunk/test/MC/MachO/altentry.s (added)
+++ llvm/trunk/test/MC/MachO/altentry.s Mon Mar 14 20:43:05 2016
@@ -0,0 +1,55 @@
+// RUN: llvm-mc -triple x86_64-apple-darwin -filetype=obj %s -o - | llvm-readobj -t | FileCheck %s
+
+ // CHECK: Symbol {
+ // CHECK: Name: _offsetsym0
+ // CHECK: Flags [ (0x0)
+ // CHECK: Value: 0x0
+
+ // CHECK: Symbol {
+ // CHECK: Name: _offsetsym1
+ // CHECK: Flags [ (0x200)
+ // CHECK: Value: 0x4
+
+ // CHECK: Symbol {
+ // CHECK: Name: _offsetsym2
+ // CHECK: Flags [ (0x200)
+ // CHECK: Value: 0x8
+
+ // CHECK: Symbol {
+ // CHECK: Name: _offsetsym3
+ // CHECK: Flags [ (0x200)
+ // CHECK: Value: 0x18
+
+ // CHECK: Symbol {
+ // CHECK: Symbol {
+ // CHECK: Symbol {
+
+ .section __TEXT,__text,regular,pure_instructions
+ .comm _g0,4,2
+ .section __DATA,__data
+ .globl _s0
+ .align 3
+_s0:
+ .long 31
+ .long 32
+ .quad _g0
+
+ .globl _s1
+ .align 3
+_s1:
+ .long 33
+ .long 34
+ .quad _g0
+
+ .globl _offsetsym0
+ _offsetsym0 = _s0
+ .globl _offsetsym1
+ .alt_entry _offsetsym1
+ _offsetsym1 = _s0+4
+ .globl _offsetsym2
+ .alt_entry _offsetsym2
+ _offsetsym2 = _s0+8
+ .globl _offsetsym3
+ .alt_entry _offsetsym3
+ _offsetsym3 = _s1+8
+ .subsections_via_symbols
Modified: llvm/trunk/test/MC/MachO/variable-exprs.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/variable-exprs.s?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/variable-exprs.s (original)
+++ llvm/trunk/test/MC/MachO/variable-exprs.s Mon Mar 14 20:43:05 2016
@@ -151,7 +151,7 @@ Lt0_x = Lt0_a - Lt0_b
// CHECK-I386: Type: Section (0xE)
// CHECK-I386: Section: __data (0x2)
// CHECK-I386: RefType: UndefinedNonLazy (0x0)
-// CHECK-I386: Flags [ (0x0)
+// CHECK-I386: Flags [ (0x200)
// CHECK-I386: ]
// CHECK-I386: Value: 0x9
// CHECK-I386: }
@@ -208,7 +208,7 @@ Lt0_x = Lt0_a - Lt0_b
// CHECK-I386: Type: Undef (0x0)
// CHECK-I386: Section: (0x0)
// CHECK-I386: RefType: UndefinedNonLazy (0x0)
-// CHECK-I386: Flags [ (0x0)
+// CHECK-I386: Flags [ (0x200)
// CHECK-I386: ]
// CHECK-I386: Value: 0x0
// CHECK-I386: }
@@ -360,7 +360,7 @@ Lt0_x = Lt0_a - Lt0_b
// CHECK-X86_64: Type: Section (0xE)
// CHECK-X86_64: Section: __data (0x2)
// CHECK-X86_64: RefType: UndefinedNonLazy (0x0)
-// CHECK-X86_64: Flags [ (0x0)
+// CHECK-X86_64: Flags [ (0x200)
// CHECK-X86_64: ]
// CHECK-X86_64: Value: 0x9
// CHECK-X86_64: }
@@ -417,7 +417,7 @@ Lt0_x = Lt0_a - Lt0_b
// CHECK-X86_64: Type: Undef (0x0)
// CHECK-X86_64: Section: (0x0)
// CHECK-X86_64: RefType: UndefinedNonLazy (0x0)
-// CHECK-X86_64: Flags [ (0x0)
+// CHECK-X86_64: Flags [ (0x200)
// CHECK-X86_64: ]
// CHECK-X86_64: Value: 0x0
// CHECK-X86_64: }
Modified: llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s (original)
+++ llvm/trunk/test/MC/MachO/x86_64-reloc-arithmetic.s Mon Mar 14 20:43:05 2016
@@ -31,7 +31,8 @@ _baz:
// CHECK-NEXT: Type: Section (0xE)
// CHECK-NEXT: Section: __text (0x1)
// CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
-// CHECK-NEXT: Flags [ (0x0)
+// CHECK-NEXT: Flags [ (0x200)
+// CHECK-NEXT: AltEntry (0x200)
// CHECK-NEXT: ]
// CHECK-NEXT: Value: 0x102
// CHECK-NEXT: }
Modified: llvm/trunk/tools/llvm-readobj/MachODumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/MachODumper.cpp?rev=263521&r1=263520&r2=263521&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/MachODumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/MachODumper.cpp Mon Mar 14 20:43:05 2016
@@ -239,7 +239,8 @@ static const EnumEntry<unsigned> MachOSy
{ "ReferencedDynamically", 0x10 },
{ "NoDeadStrip", 0x20 },
{ "WeakRef", 0x40 },
- { "WeakDef", 0x80 }
+ { "WeakDef", 0x80 },
+ { "AltEntry", 0x200 },
};
static const EnumEntry<unsigned> MachOSymbolTypes[] = {
More information about the llvm-commits
mailing list