brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 0a0c11f Raw
100 lines · c
1//===----- CGPointerAuthInfo.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-exception6//7//===----------------------------------------------------------------------===//8//9// Pointer auth info class.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_CLANG_LIB_CODEGEN_CGPOINTERAUTHINFO_H14#define LLVM_CLANG_LIB_CODEGEN_CGPOINTERAUTHINFO_H15 16#include "clang/AST/Type.h"17#include "clang/Basic/LangOptions.h"18#include "llvm/IR/Type.h"19#include "llvm/IR/Value.h"20 21namespace clang {22namespace CodeGen {23 24class CGPointerAuthInfo {25private:26  PointerAuthenticationMode AuthenticationMode : 2;27  unsigned IsIsaPointer : 1;28  unsigned AuthenticatesNullValues : 1;29  unsigned Key : 2;30  llvm::Value *Discriminator;31 32public:33  CGPointerAuthInfo()34      : AuthenticationMode(PointerAuthenticationMode::None),35        IsIsaPointer(false), AuthenticatesNullValues(false), Key(0),36        Discriminator(nullptr) {}37  CGPointerAuthInfo(unsigned Key, PointerAuthenticationMode AuthenticationMode,38                    bool IsIsaPointer, bool AuthenticatesNullValues,39                    llvm::Value *Discriminator)40      : AuthenticationMode(AuthenticationMode), IsIsaPointer(IsIsaPointer),41        AuthenticatesNullValues(AuthenticatesNullValues), Key(Key),42        Discriminator(Discriminator) {43    assert(!Discriminator || Discriminator->getType()->isIntegerTy() ||44           Discriminator->getType()->isPointerTy());45  }46 47  explicit operator bool() const { return isSigned(); }48 49  bool isSigned() const {50    return AuthenticationMode != PointerAuthenticationMode::None;51  }52 53  unsigned getKey() const {54    assert(isSigned());55    return Key;56  }57  llvm::Value *getDiscriminator() const {58    assert(isSigned());59    return Discriminator;60  }61 62  PointerAuthenticationMode getAuthenticationMode() const {63    return AuthenticationMode;64  }65 66  bool isIsaPointer() const { return IsIsaPointer; }67 68  bool authenticatesNullValues() const { return AuthenticatesNullValues; }69 70  bool shouldStrip() const {71    return AuthenticationMode == PointerAuthenticationMode::Strip ||72           AuthenticationMode == PointerAuthenticationMode::SignAndStrip;73  }74 75  bool shouldSign() const {76    return AuthenticationMode == PointerAuthenticationMode::SignAndStrip ||77           AuthenticationMode == PointerAuthenticationMode::SignAndAuth;78  }79 80  bool shouldAuth() const {81    return AuthenticationMode == PointerAuthenticationMode::SignAndAuth;82  }83 84  friend bool operator!=(const CGPointerAuthInfo &LHS,85                         const CGPointerAuthInfo &RHS) {86    return LHS.Key != RHS.Key || LHS.Discriminator != RHS.Discriminator ||87           LHS.AuthenticationMode != RHS.AuthenticationMode;88  }89 90  friend bool operator==(const CGPointerAuthInfo &LHS,91                         const CGPointerAuthInfo &RHS) {92    return !(LHS != RHS);93  }94};95 96} // end namespace CodeGen97} // end namespace clang98 99#endif100