LLVM  3.7.0
MCAsmInfoDarwin.cpp
Go to the documentation of this file.
1 //===-- MCAsmInfoDarwin.cpp - Darwin asm properties -------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines target asm properties related what form asm statements
11 // should take in general on Darwin-based targets
12 //
13 //===----------------------------------------------------------------------===//
14 
16 #include "llvm/MC/MCContext.h"
17 #include "llvm/MC/MCExpr.h"
18 #include "llvm/MC/MCSectionMachO.h"
19 using namespace llvm;
20 
22  const MCSection &Section) const {
23  const MCSectionMachO &SMO = static_cast<const MCSectionMachO &>(Section);
24 
25  // Sections holding 1 byte strings are atomized based on the data they
26  // contain.
27  // Sections holding 2 byte strings require symbols in order to be atomized.
28  // There is no dedicated section for 4 byte strings.
30  return false;
31 
32  if (SMO.getSegmentName() == "__DATA" && SMO.getSectionName() == "__cfstring")
33  return false;
34 
35  if (SMO.getSegmentName() == "__DATA" &&
36  SMO.getSectionName() == "__objc_classrefs")
37  return false;
38 
39  switch (SMO.getType()) {
40  default:
41  return true;
42 
43  // These sections are atomized at the element boundaries without using
44  // symbols.
54  return false;
55  }
56 }
57 
59  // Common settings for all Darwin targets.
60  // Syntax:
64 
65  AlignmentIsInBytes = false;
68  InlineAsmStart = " InlineAsm Start";
69  InlineAsmEnd = " InlineAsm End";
70 
71  // Directives:
72  HasWeakDefDirective = true;
74  WeakRefDirective = "\t.weak_reference ";
75  ZeroDirective = "\t.space\t"; // ".space N" emits N zeros.
76  HasMachoZeroFillDirective = true; // Uses .zerofill
77  HasMachoTBSSDirective = true; // Uses .tbss
79 
80  // FIXME: Change this once MC is the system assembler.
82 
85 
86  // Doesn't support protected visibility.
88 
90  HasNoDeadStrip = true;
91 
93 
96 
97  // FIXME: For now keep the previous behavior, AShr, matching the previous
98  // behavior of as(1) (both -q and -Q: resp. LLVM and gas v1.38).
99  // If/when this changes, the AArch64 Darwin special case can go away.
100  UseLogicalShr = false;
101 }
bool HasSingleParameterDotFile
True if the target has a single parameter .file directive, this is true for ELF targets.
Definition: MCAsmInfo.h:273
Instances of this class represent a uniqued identifier for a section in the current translation unit...
Definition: MCSection.h:48
LCOMM::LCOMMType LCOMMDirectiveAlignmentType
Describes if the .lcomm directive for the target supports an alignment argument and how it is interpr...
Definition: MCAsmInfo.h:261
S_NON_LAZY_SYMBOL_POINTERS - Section with non-lazy symbol pointers.
MCSectionMachO - This represents a section on a Mach-O system (used by Mac OS X). ...
bool HasSubsectionsViaSymbols
True if this target has the MachO .subsections_via_symbols directive.
Definition: MCAsmInfo.h:79
bool UseIntegratedAssembler
Should we use the integrated assembler? The integrated assembler should be enabled by default (by the...
Definition: MCAsmInfo.h:353
Not a valid directive.
Definition: MCDirectives.h:20
bool DwarfUsesRelocationsAcrossSections
True if Dwarf2 output generally uses relocations for references to other .debug_* sections...
Definition: MCAsmInfo.h:328
const char * ZeroDirective
This should be set to the directive used to get some number of zero bytes emitted to the current sect...
Definition: MCAsmInfo.h:173
bool HasWeakDefCanBeHiddenDirective
True if we have a directive to declare a global as being a weak defined symbol that can be hidden (un...
Definition: MCAsmInfo.h:296
bool HasDotTypeDotSizeDirective
True if the target has .type and .size directives, this is true for most ELF targets.
Definition: MCAsmInfo.h:269
bool AlignmentIsInBytes
If this is true (the default) then the asmprinter emits ".align N" directives, where N is the number ...
Definition: MCAsmInfo.h:221
bool HasNoDeadStrip
True if this target supports the MachO .no_dead_strip directive.
Definition: MCAsmInfo.h:281
S_4BYTE_LITERALS - Section with 4 byte literals.
bool UseLogicalShr
True if the integrated assembler should interpret 'a >> b' constant expressions as logical rather t...
Definition: MCAsmInfo.h:360
bool HasAggressiveSymbolFolding
False if the assembler requires that we use.
Definition: MCAsmInfo.h:253
S_8BYTE_LITERALS - Section with 8 byte literals.
S_MOD_TERM_FUNC_POINTERS - Section with only function pointers for termination.
MCSymbolAttr HiddenVisibilityAttr
This attribute, if not MCSA_Invalid, is used to declare a symbol as having hidden visibility...
Definition: MCAsmInfo.h:304
StringRef getSectionName() const
S_INTERPOSING - Section with only pairs of function pointers for interposing.
const char * InlineAsmStart
If these are nonempty, they contain a directive to emit before and after an inline assembly statement...
Definition: MCAsmInfo.h:141
S_LITERAL_POINTERS - Section with pointers to literals.
bool COMMDirectiveAlignmentIsInBytes
True is .comm's and .lcomms optional alignment is to be specified in bytes instead of log2(n)...
Definition: MCAsmInfo.h:257
const char * WeakRefDirective
This directive, if non-null, is used to declare a global as being a weak undefined symbol...
Definition: MCAsmInfo.h:288
S_CSTRING_LITERALS - Section with literal C strings.
bool HasWeakDefDirective
True if we have a directive to declare a global as being a weak defined symbol.
Definition: MCAsmInfo.h:292
S_LAZY_SYMBOL_POINTERS - Section with lazy symbol pointers.
bool HasMachoZeroFillDirective
True if this is a MachO target that supports the macho-specific .zerofill directive for emitting BSS ...
Definition: MCAsmInfo.h:83
bool isSectionAtomizableBySymbols(const MCSection &Section) const override
True if the section is atomized using the symbols in it.
MachO::SectionType getType() const
bool HasStaticCtorDtorReferenceInStaticMode
True if the compiler should emit a ".reference .constructors_used" or ".reference ...
Definition: MCAsmInfo.h:93
const char * InlineAsmEnd
Definition: MCAsmInfo.h:142
bool HasMachoTBSSDirective
True if this is a MachO target that supports the macho-specific .tbss directive for emitting thread l...
Definition: MCAsmInfo.h:87
S_16BYTE_LITERALS - Section with only 16 byte literals.
StringRef getSegmentName() const
MCSymbolAttr ProtectedVisibilityAttr
This attribute, if not MCSA_Invalid, is used to declare a symbol as having protected visibility...
Definition: MCAsmInfo.h:312
bool SetDirectiveSuppressesReloc
True if the expression .long f - g uses a relocation but it can be suppressed by writing a = f - g ...
Definition: MCAsmInfo.h:238
MCSymbolAttr HiddenDeclarationVisibilityAttr
This attribute, if not MCSA_Invalid, is used to declare an undefined symbol as having hidden visibili...
Definition: MCAsmInfo.h:308
.private_extern (MachO)
Definition: MCDirectives.h:38
S_MOD_INIT_FUNC_POINTERS - Section with only function pointers for initialization.
const char * LinkerPrivateGlobalPrefix
This prefix is used for symbols that should be passed through the assembler but be removed by the lin...
Definition: MCAsmInfo.h:137