1 //===- MCAsmInfoCOFF.cpp - COFF 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 COFF-based targets 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/MC/MCAsmInfoCOFF.h" 15 #include "llvm/MC/MCDirectives.h" 16 17 using namespace llvm; 18 19 void MCAsmInfoCOFF::anchor() {} 20 21 MCAsmInfoCOFF::MCAsmInfoCOFF() { 22 // MingW 4.5 and later support .comm with log2 alignment, but .lcomm uses byte 23 // alignment. 24 COMMDirectiveAlignmentIsInBytes = false; 25 LCOMMDirectiveAlignmentType = LCOMM::ByteAlignment; 26 HasDotTypeDotSizeDirective = false; 27 HasSingleParameterDotFile = true; 28 WeakRefDirective = "\t.weak\t"; 29 AvoidWeakIfComdat = true; 30 31 // Doesn't support visibility: 32 HiddenVisibilityAttr = HiddenDeclarationVisibilityAttr = MCSA_Invalid; 33 ProtectedVisibilityAttr = MCSA_Invalid; 34 35 // Set up DWARF directives 36 SupportsDebugInformation = true; 37 NeedsDwarfSectionOffsetDirective = true; 38 39 // At least MSVC inline-asm does AShr. 40 UseLogicalShr = false; 41 42 // If this is a COFF target, assume that it supports associative comdats. It's 43 // part of the spec. 44 HasCOFFAssociativeComdats = true; 45 46 // We can generate constants in comdat sections that can be shared, 47 // but in order not to create null typed symbols, we actually need to 48 // make them global symbols as well. 49 HasCOFFComdatConstants = true; 50 } 51 52 void MCAsmInfoMicrosoft::anchor() {} 53 54 MCAsmInfoMicrosoft::MCAsmInfoMicrosoft() = default; 55 56 void MCAsmInfoGNUCOFF::anchor() {} 57 58 MCAsmInfoGNUCOFF::MCAsmInfoGNUCOFF() { 59 // If this is a GNU environment (mingw or cygwin), don't use associative 60 // comdats for jump tables, unwind information, and other data associated with 61 // a function. 62 HasCOFFAssociativeComdats = false; 63 64 // We don't create constants in comdat sections for MinGW. 65 HasCOFFComdatConstants = false; 66 } 67