reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | //===- MCAsmInfoDarwin.cpp - Darwin asm properties ------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines target asm properties related what form asm statements // should take in general on Darwin-based targets // //===----------------------------------------------------------------------===// #include "llvm/MC/MCAsmInfoDarwin.h" #include "llvm/BinaryFormat/MachO.h" #include "llvm/MC/MCDirectives.h" #include "llvm/MC/MCSectionMachO.h" using namespace llvm; bool MCAsmInfoDarwin::isSectionAtomizableBySymbols( const MCSection &Section) const { const MCSectionMachO &SMO = static_cast<const MCSectionMachO &>(Section); // Sections holding 1 byte strings are atomized based on the data they // contain. // Sections holding 2 byte strings require symbols in order to be atomized. // There is no dedicated section for 4 byte strings. if (SMO.getType() == MachO::S_CSTRING_LITERALS) return false; if (SMO.getSegmentName() == "__DATA" && SMO.getSectionName() == "__cfstring") return false; if (SMO.getSegmentName() == "__DATA" && SMO.getSectionName() == "__objc_classrefs") return false; switch (SMO.getType()) { default: return true; // These sections are atomized at the element boundaries without using // symbols. case MachO::S_4BYTE_LITERALS: case MachO::S_8BYTE_LITERALS: case MachO::S_16BYTE_LITERALS: case MachO::S_LITERAL_POINTERS: case MachO::S_NON_LAZY_SYMBOL_POINTERS: case MachO::S_LAZY_SYMBOL_POINTERS: case MachO::S_THREAD_LOCAL_VARIABLE_POINTERS: case MachO::S_MOD_INIT_FUNC_POINTERS: case MachO::S_MOD_TERM_FUNC_POINTERS: case MachO::S_INTERPOSING: return false; } } MCAsmInfoDarwin::MCAsmInfoDarwin() { // Common settings for all Darwin targets. // Syntax: LinkerPrivateGlobalPrefix = "l"; HasSingleParameterDotFile = false; HasSubsectionsViaSymbols = true; AlignmentIsInBytes = false; COMMDirectiveAlignmentIsInBytes = false; LCOMMDirectiveAlignmentType = LCOMM::Log2Alignment; InlineAsmStart = " InlineAsm Start"; InlineAsmEnd = " InlineAsm End"; // Directives: HasWeakDefDirective = true; HasWeakDefCanBeHiddenDirective = true; WeakRefDirective = "\t.weak_reference "; ZeroDirective = "\t.space\t"; // ".space N" emits N zeros. HasMachoZeroFillDirective = true; // Uses .zerofill HasMachoTBSSDirective = true; // Uses .tbss // FIXME: Change this once MC is the system assembler. HasAggressiveSymbolFolding = false; HiddenVisibilityAttr = MCSA_PrivateExtern; HiddenDeclarationVisibilityAttr = MCSA_Invalid; // Doesn't support protected visibility. ProtectedVisibilityAttr = MCSA_Invalid; HasDotTypeDotSizeDirective = false; HasNoDeadStrip = true; HasAltEntry = true; DwarfUsesRelocationsAcrossSections = false; UseIntegratedAssembler = true; SetDirectiveSuppressesReloc = true; } |