Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/MC/MCAsmInfoDarwin.cpp
35233 views
1
//===- MCAsmInfoDarwin.cpp - Darwin asm properties ------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file defines target asm properties related what form asm statements
10
// should take in general on Darwin-based targets
11
//
12
//===----------------------------------------------------------------------===//
13
14
#include "llvm/MC/MCAsmInfoDarwin.h"
15
#include "llvm/BinaryFormat/MachO.h"
16
#include "llvm/MC/MCDirectives.h"
17
#include "llvm/MC/MCSectionMachO.h"
18
19
using namespace llvm;
20
21
bool MCAsmInfoDarwin::isSectionAtomizableBySymbols(
22
const MCSection &Section) {
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.
29
if (SMO.getType() == MachO::S_CSTRING_LITERALS)
30
return false;
31
32
if (SMO.getSegmentName() == "__DATA" && SMO.getName() == "__cfstring")
33
return false;
34
35
if (SMO.getSegmentName() == "__DATA" && SMO.getName() == "__objc_classrefs")
36
return false;
37
38
switch (SMO.getType()) {
39
default:
40
return true;
41
42
// These sections are atomized at the element boundaries without using
43
// symbols.
44
case MachO::S_4BYTE_LITERALS:
45
case MachO::S_8BYTE_LITERALS:
46
case MachO::S_16BYTE_LITERALS:
47
case MachO::S_LITERAL_POINTERS:
48
case MachO::S_NON_LAZY_SYMBOL_POINTERS:
49
case MachO::S_LAZY_SYMBOL_POINTERS:
50
case MachO::S_THREAD_LOCAL_VARIABLE_POINTERS:
51
case MachO::S_MOD_INIT_FUNC_POINTERS:
52
case MachO::S_MOD_TERM_FUNC_POINTERS:
53
case MachO::S_INTERPOSING:
54
return false;
55
}
56
}
57
58
MCAsmInfoDarwin::MCAsmInfoDarwin() {
59
// Common settings for all Darwin targets.
60
// Syntax:
61
LinkerPrivateGlobalPrefix = "l";
62
HasSingleParameterDotFile = false;
63
HasSubsectionsViaSymbols = true;
64
65
AlignmentIsInBytes = false;
66
COMMDirectiveAlignmentIsInBytes = false;
67
LCOMMDirectiveAlignmentType = LCOMM::Log2Alignment;
68
InlineAsmStart = " InlineAsm Start";
69
InlineAsmEnd = " InlineAsm End";
70
71
// Directives:
72
HasWeakDefDirective = true;
73
HasWeakDefCanBeHiddenDirective = 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
78
79
// FIXME: Change this once MC is the system assembler.
80
HasAggressiveSymbolFolding = false;
81
82
HiddenVisibilityAttr = MCSA_PrivateExtern;
83
HiddenDeclarationVisibilityAttr = MCSA_Invalid;
84
85
// Doesn't support protected visibility.
86
ProtectedVisibilityAttr = MCSA_Invalid;
87
88
HasDotTypeDotSizeDirective = false;
89
HasNoDeadStrip = true;
90
HasAltEntry = true;
91
92
DwarfUsesRelocationsAcrossSections = false;
93
SetDirectiveSuppressesReloc = true;
94
}
95
96