1 //===- BPFCORE.h - Common info for Compile-Once Run-EveryWhere -*- 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_LIB_TARGET_BPF_BPFCORE_H 10 #define LLVM_LIB_TARGET_BPF_BPFCORE_H 11 12 #include "llvm/ADT/StringRef.h" 13 #include "llvm/IR/Instructions.h" 14 15 namespace llvm { 16 17 class BasicBlock; 18 class Instruction; 19 class Module; 20 21 class BPFCoreSharedInfo { 22 public: 23 enum BTFTypeIdFlag : uint32_t { 24 BTF_TYPE_ID_LOCAL_RELOC = 0, 25 BTF_TYPE_ID_REMOTE_RELOC, 26 27 MAX_BTF_TYPE_ID_FLAG, 28 }; 29 30 enum PreserveTypeInfo : uint32_t { 31 PRESERVE_TYPE_INFO_EXISTENCE = 0, 32 PRESERVE_TYPE_INFO_SIZE, 33 PRESERVE_TYPE_INFO_MATCH, 34 35 MAX_PRESERVE_TYPE_INFO_FLAG, 36 }; 37 38 enum PreserveEnumValue : uint32_t { 39 PRESERVE_ENUM_VALUE_EXISTENCE = 0, 40 PRESERVE_ENUM_VALUE, 41 42 MAX_PRESERVE_ENUM_VALUE_FLAG, 43 }; 44 45 /// The attribute attached to globals representing a field access 46 static constexpr StringRef AmaAttr = "btf_ama"; 47 /// The attribute attached to globals representing a type id 48 static constexpr StringRef TypeIdAttr = "btf_type_id"; 49 50 /// llvm.bpf.passthrough builtin seq number 51 static uint32_t SeqNum; 52 53 /// Insert a bpf passthrough builtin function. 54 static Instruction *insertPassThrough(Module *M, BasicBlock *BB, 55 Instruction *Input, 56 Instruction *Before); 57 static void removeArrayAccessCall(CallInst *Call); 58 static void removeStructAccessCall(CallInst *Call); 59 static void removeUnionAccessCall(CallInst *Call); 60 }; 61 62 } // namespace llvm 63 64 #endif 65