blob: 937d057568a707008b06f45f121435e28b054722 [file] [log] [blame]
Anton Korobeynikov745e8642008-07-19 13:14:46 +00001//===-- DarwinTargetAsmInfo.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
Anton Korobeynikov745e8642008-07-19 13:14:46 +000015#include "llvm/Target/DarwinTargetAsmInfo.h"
Chris Lattnerb2d31692009-08-13 05:30:22 +000016#include "llvm/ADT/Triple.h"
Anton Korobeynikov745e8642008-07-19 13:14:46 +000017using namespace llvm;
18
Chris Lattnerb2d31692009-08-13 05:30:22 +000019DarwinTargetAsmInfo::DarwinTargetAsmInfo(const Triple &Triple) {
Chris Lattner4e0f25b2009-06-19 00:08:39 +000020 // Common settings for all Darwin targets.
21 // Syntax:
22 GlobalPrefix = "_";
23 PrivateGlobalPrefix = "L";
Chris Lattner90f8b702009-07-21 17:30:51 +000024 LinkerPrivateGlobalPrefix = "l"; // Marker for some ObjC metadata
Chris Lattner4e0f25b2009-06-19 00:08:39 +000025 NeedsSet = true;
26 NeedsIndirectEncoding = true;
27 AllowQuotesInName = true;
28 HasSingleParameterDotFile = false;
29
Chris Lattnere28a2e82009-08-11 22:31:42 +000030 AlignmentIsInBytes = false;
Chris Lattnere2b06012009-08-11 22:39:40 +000031 InlineAsmStart = " InlineAsm Start";
32 InlineAsmEnd = " InlineAsm End";
Chris Lattnere28a2e82009-08-11 22:31:42 +000033
Chris Lattner4e0f25b2009-06-19 00:08:39 +000034 // In non-PIC modes, emit a special label before jump tables so that the
35 // linker can perform more accurate dead code stripping. We do not check the
36 // relocation model here since it can be overridden later.
37 JumpTableSpecialLabelPrefix = "l";
38
39 // Directives:
40 WeakDefDirective = "\t.weak_definition ";
41 WeakRefDirective = "\t.weak_reference ";
42 HiddenDirective = "\t.private_extern ";
Chris Lattnerc89ecc52009-08-11 22:06:07 +000043 LCOMMDirective = "\t.lcomm\t";
Chris Lattnerb6ba9c32009-08-11 22:17:31 +000044 ZeroDirective = "\t.space\t"; // ".space N" emits N zeros.
45 ZeroFillDirective = "\t.zerofill\t"; // Uses .zerofill
Chris Lattnere2811a72009-08-11 22:22:44 +000046 SetDirective = "\t.set";
47 ProtectedDirective = "\t.globl\t";
Chris Lattnere28a2e82009-08-11 22:31:42 +000048 HasDotTypeDotSizeDirective = false;
49 UsedDirective = "\t.no_dead_strip\t";
Chris Lattnerc89ecc52009-08-11 22:06:07 +000050
Chris Lattnerbf04f722009-08-13 05:43:33 +000051 // On Leopard (10.5 aka darwin9) and earlier, _foo.eh symbols must be exported
Chris Lattnerb2d31692009-08-13 05:30:22 +000052 // so that the linker knows about them. This is not necessary on 10.6 and
53 // later, but it doesn't hurt anything.
Chris Lattnerbf04f722009-08-13 05:43:33 +000054 if (Triple.getDarwinMajorNumber() < 10)
Chris Lattnerb2d31692009-08-13 05:30:22 +000055 Is_EHSymbolPrivate = false;
56
57 // Leopard (10.5 aka darwin9) and later support aligned common symbols.
58 COMMDirectiveTakesAlignment = Triple.getDarwinMajorNumber() >= 9;
59
Chris Lattnere28a2e82009-08-11 22:31:42 +000060 GlobalEHDirective = "\t.globl\t";
61 SupportsWeakOmittedEHFrame = false;
Anton Korobeynikov745e8642008-07-19 13:14:46 +000062}
63