[all-commits] [llvm/llvm-project] 6d0780: [BPF] handle typedef of struct/union for CO-RE rel...
yonghong-song via All-commits
all-commits at lists.llvm.org
Tue Feb 4 08:53:23 PST 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 6d07802d63a8589447de0a697696447a583de9d8
https://github.com/llvm/llvm-project/commit/6d07802d63a8589447de0a697696447a583de9d8
Author: Yonghong Song <yhs at fb.com>
Date: 2020-02-04 (Tue, 04 Feb 2020)
Changed paths:
M llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp
A llvm/test/CodeGen/BPF/CORE/offset-reloc-typedef-struct-2.ll
A llvm/test/CodeGen/BPF/CORE/offset-reloc-typedef-union-2.ll
Log Message:
-----------
[BPF] handle typedef of struct/union for CO-RE relocations
Linux commit
https://github.com/torvalds/linux/commit/1cf5b23988ea0086a252a5c8b005b075f1e9b030#diff-289313b9fec99c6f0acfea19d9cfd949
uses "#pragma clang attribute push (__attribute__((preserve_access_index)),
apply_to = record)"
to apply CO-RE relocations to all records including the following pattern:
#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)
typedef struct {
int a;
} __t;
#pragma clang attribute pop
int test(__t *arg) { return arg->a; }
The current approach to use struct/union type in the relocation record will
result in an anonymous struct, which make later type matching difficult
in bpf loader. In fact, current BPF backend will fail the above program
with assertion:
clang: ../lib/Target/BPF/BPFAbstractMemberAccess.cpp:796: ...
Assertion `TypeName.size()' failed.
clang will change to use the type of the base of the member access
which will preserve the typedef modifier for the
preserve_{struct,union}_access_index intrinsics in the above example.
Here we adjust BPF backend to accept that the debuginfo
type metadata may be 'typedef' and handle them properly.
Differential Revision: https://reviews.llvm.org/D73902
More information about the All-commits
mailing list