| //===- MCSymbolCOFF.h - ----------------------------------------*- C++ -*-===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_MC_MCSYMBOLCOFF_H |
| #define LLVM_MC_MCSYMBOLCOFF_H |
| |
| #include "llvm/MC/MCSymbol.h" |
| #include <cstdint> |
| |
| namespace llvm { |
| |
| class MCSymbolCOFF : public MCSymbol { |
| /// This corresponds to the e_type field of the COFF symbol. |
| mutable uint16_t Type = 0; |
| |
| enum SymbolFlags : uint16_t { |
| SF_ClassMask = 0x00FF, |
| SF_ClassShift = 0, |
| |
| SF_WeakExternal = 0x0100, |
| SF_SafeSEH = 0x0200, |
| }; |
| |
| public: |
| MCSymbolCOFF(const StringMapEntry<bool> *Name, bool isTemporary) |
| : MCSymbol(SymbolKindCOFF, Name, isTemporary) {} |
| |
| uint16_t getType() const { |
| return Type; |
| } |
| void setType(uint16_t Ty) const { |
| Type = Ty; |
| } |
| |
| uint16_t getClass() const { |
| return (getFlags() & SF_ClassMask) >> SF_ClassShift; |
| } |
| void setClass(uint16_t StorageClass) const { |
| modifyFlags(StorageClass << SF_ClassShift, SF_ClassMask); |
| } |
| |
| bool isWeakExternal() const { |
| return getFlags() & SF_WeakExternal; |
| } |
| void setIsWeakExternal() const { |
| modifyFlags(SF_WeakExternal, SF_WeakExternal); |
| } |
| |
| bool isSafeSEH() const { |
| return getFlags() & SF_SafeSEH; |
| } |
| void setIsSafeSEH() const { |
| modifyFlags(SF_SafeSEH, SF_SafeSEH); |
| } |
| |
| static bool classof(const MCSymbol *S) { return S->isCOFF(); } |
| }; |
| |
| } // end namespace llvm |
| |
| #endif // LLVM_MC_MCSYMBOLCOFF_H |