aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2022-04-20 15:07:08 -0700
committerYonghong Song <yhs@fb.com>2022-06-06 11:35:50 -0700
commitdc1c43d726c87e18fae33cb26f2cd05dbd1fdfa5 (patch)
tree7f5b96d5e19e547c32dfe1cebe58793b9e783414 /clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
parent51914d5a52eecb6d2aea17bd24501456278958d1 (diff)
downloadllvm-dc1c43d726c87e18fae33cb26f2cd05dbd1fdfa5.zip
llvm-dc1c43d726c87e18fae33cb26f2cd05dbd1fdfa5.tar.gz
llvm-dc1c43d726c87e18fae33cb26f2cd05dbd1fdfa5.tar.bz2
[BPF] Add BTF 64bit enum value support
Current BTF only supports 32-bit value. For example, enum T { VAL = 0xffffFFFF00000008 }; the generated BTF looks like .long 16 # BTF_KIND_ENUM(id = 4) .long 100663297 # 0x6000001 .long 8 .long 18 .long 8 The encoded value is 8 which equals to (uint32_t)0xffffFFFF00000008 and this is incorrect. This patch introduced BTF_KIND_ENUM64 which permits to encode 64-bit value. The format for each enumerator looks like: .long name_offset .long (uint32_t)value # lower-32 bit value .long value >> 32 # high-32 bit value We use two 32-bit values to represent a 64-bit value as current BTF type subsection has 4-byte alignment and gaps are not permitted in the subsection. This patch also added support for kflag (the bit 31 of CommonType.Info) such that kflag = 1 implies the value is signed and kflag = 0 implies the value is unsigned. The kernel UAPI enumerator definition is struct btf_enum { __u32 name_off; __s32 val; }; so kflag = 0 with unsigned value provides backward compatability. With this patch, for enum T { VAL = 0xffffFFFF00000008 }; the generated BTF looks like .long 16 # BTF_KIND_ENUM64(id = 4) .long 3187671053 # 0x13000001 .long 8 .long 18 .long 8 # 0x8 .long 4294967295 # 0xffffffff and the enumerator value and signedness are encoded correctly. Differential Revision: https://reviews.llvm.org/D124641
Diffstat (limited to 'clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp')
0 files changed, 0 insertions, 0 deletions