|  | //===- MCAsmInfoCOFF.cpp - COFF 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 COFF-based targets | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "llvm/MC/MCAsmInfoCOFF.h" | 
|  | #include "llvm/MC/MCDirectives.h" | 
|  |  | 
|  | using namespace llvm; | 
|  |  | 
|  | void MCAsmInfoCOFF::anchor() {} | 
|  |  | 
|  | MCAsmInfoCOFF::MCAsmInfoCOFF() { | 
|  | // MingW 4.5 and later support .comm with log2 alignment, but .lcomm uses byte | 
|  | // alignment. | 
|  | COMMDirectiveAlignmentIsInBytes = false; | 
|  | LCOMMDirectiveAlignmentType = LCOMM::ByteAlignment; | 
|  | HasDotTypeDotSizeDirective = false; | 
|  | HasSingleParameterDotFile = true; | 
|  | WeakRefDirective = "\t.weak\t"; | 
|  | AvoidWeakIfComdat = true; | 
|  |  | 
|  | // Doesn't support visibility: | 
|  | HiddenVisibilityAttr = HiddenDeclarationVisibilityAttr = MCSA_Invalid; | 
|  | ProtectedVisibilityAttr = MCSA_Invalid; | 
|  |  | 
|  | // Set up DWARF directives | 
|  | SupportsDebugInformation = true; | 
|  | NeedsDwarfSectionOffsetDirective = true; | 
|  |  | 
|  | // At least MSVC inline-asm does AShr. | 
|  | UseLogicalShr = false; | 
|  |  | 
|  | // If this is a COFF target, assume that it supports associative comdats. It's | 
|  | // part of the spec. | 
|  | HasCOFFAssociativeComdats = true; | 
|  |  | 
|  | // We can generate constants in comdat sections that can be shared, | 
|  | // but in order not to create null typed symbols, we actually need to | 
|  | // make them global symbols as well. | 
|  | HasCOFFComdatConstants = true; | 
|  | } | 
|  |  | 
|  | void MCAsmInfoMicrosoft::anchor() {} | 
|  |  | 
|  | MCAsmInfoMicrosoft::MCAsmInfoMicrosoft() = default; | 
|  |  | 
|  | void MCAsmInfoGNUCOFF::anchor() {} | 
|  |  | 
|  | MCAsmInfoGNUCOFF::MCAsmInfoGNUCOFF() { | 
|  | // If this is a GNU environment (mingw or cygwin), don't use associative | 
|  | // comdats for jump tables, unwind information, and other data associated with | 
|  | // a function. | 
|  | HasCOFFAssociativeComdats = false; | 
|  |  | 
|  | // We don't create constants in comdat sections for MinGW. | 
|  | HasCOFFComdatConstants = false; | 
|  | } |