Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- MCSymbolCOFF.h -  ----------------------------------------*- C++ -*-===//
  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. #ifndef LLVM_MC_MCSYMBOLCOFF_H
  10. #define LLVM_MC_MCSYMBOLCOFF_H
  11.  
  12. #include "llvm/MC/MCSymbol.h"
  13. #include <cstdint>
  14.  
  15. namespace llvm {
  16.  
  17. class MCSymbolCOFF : public MCSymbol {
  18.   /// This corresponds to the e_type field of the COFF symbol.
  19.   mutable uint16_t Type = 0;
  20.  
  21.   enum SymbolFlags : uint16_t {
  22.     SF_ClassMask = 0x00FF,
  23.     SF_ClassShift = 0,
  24.  
  25.     SF_WeakExternal = 0x0100,
  26.     SF_SafeSEH = 0x0200,
  27.   };
  28.  
  29. public:
  30.   MCSymbolCOFF(const StringMapEntry<bool> *Name, bool isTemporary)
  31.       : MCSymbol(SymbolKindCOFF, Name, isTemporary) {}
  32.  
  33.   uint16_t getType() const {
  34.     return Type;
  35.   }
  36.   void setType(uint16_t Ty) const {
  37.     Type = Ty;
  38.   }
  39.  
  40.   uint16_t getClass() const {
  41.     return (getFlags() & SF_ClassMask) >> SF_ClassShift;
  42.   }
  43.   void setClass(uint16_t StorageClass) const {
  44.     modifyFlags(StorageClass << SF_ClassShift, SF_ClassMask);
  45.   }
  46.  
  47.   bool isWeakExternal() const {
  48.     return getFlags() & SF_WeakExternal;
  49.   }
  50.   void setIsWeakExternal() const {
  51.     modifyFlags(SF_WeakExternal, SF_WeakExternal);
  52.   }
  53.  
  54.   bool isSafeSEH() const {
  55.     return getFlags() & SF_SafeSEH;
  56.   }
  57.   void setIsSafeSEH() const {
  58.     modifyFlags(SF_SafeSEH, SF_SafeSEH);
  59.   }
  60.  
  61.   static bool classof(const MCSymbol *S) { return S->isCOFF(); }
  62. };
  63.  
  64. } // end namespace llvm
  65.  
  66. #endif // LLVM_MC_MCSYMBOLCOFF_H
  67.