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 14 namespace llvm { 15 16 class BasicBlock; 17 class Instruction; 18 class Module; 19 20 class BPFCoreSharedInfo { 21 public: 22 enum PatchableRelocKind : uint32_t { 23 FIELD_BYTE_OFFSET = 0, 24 FIELD_BYTE_SIZE, 25 FIELD_EXISTENCE, 26 FIELD_SIGNEDNESS, 27 FIELD_LSHIFT_U64, 28 FIELD_RSHIFT_U64, 29 BTF_TYPE_ID_LOCAL, 30 BTF_TYPE_ID_REMOTE, 31 TYPE_EXISTENCE, 32 TYPE_SIZE, 33 ENUM_VALUE_EXISTENCE, 34 ENUM_VALUE, 35 36 MAX_FIELD_RELOC_KIND, 37 }; 38 39 enum BTFTypeIdFlag : uint32_t { 40 BTF_TYPE_ID_LOCAL_RELOC = 0, 41 BTF_TYPE_ID_REMOTE_RELOC, 42 43 MAX_BTF_TYPE_ID_FLAG, 44 }; 45 46 enum PreserveTypeInfo : uint32_t { 47 PRESERVE_TYPE_INFO_EXISTENCE = 0, 48 PRESERVE_TYPE_INFO_SIZE, 49 50 MAX_PRESERVE_TYPE_INFO_FLAG, 51 }; 52 53 enum PreserveEnumValue : uint32_t { 54 PRESERVE_ENUM_VALUE_EXISTENCE = 0, 55 PRESERVE_ENUM_VALUE, 56 57 MAX_PRESERVE_ENUM_VALUE_FLAG, 58 }; 59 60 /// The attribute attached to globals representing a field access 61 static constexpr StringRef AmaAttr = "btf_ama"; 62 /// The attribute attached to globals representing a type id 63 static constexpr StringRef TypeIdAttr = "btf_type_id"; 64 65 /// llvm.bpf.passthrough builtin seq number 66 static uint32_t SeqNum; 67 68 /// Insert a bpf passthrough builtin function. 69 static Instruction *insertPassThrough(Module *M, BasicBlock *BB, 70 Instruction *Input, 71 Instruction *Before); 72 }; 73 74 } // namespace llvm 75 76 #endif 77