[PATCH] D97986: BPF: permit type modifiers for __builtin_btf_type_id() relocation
Yonghong Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 4 15:54:28 PST 2021
yonghong-song added inline comments.
================
Comment at: llvm/lib/Target/BPF/BPFPreserveDIType.cpp:91
+ if (Tag != dwarf::DW_TAG_const_type &&
+ Tag != dwarf::DW_TAG_volatile_type)
+ break;
----------------
anakryiko wrote:
> should we strip `restrict` as well?
I deliberately skipped the `restrict`. in C, `restrict` is used to restrict pointers and used in pointer declarations (include variables and parameters).
https://en.wikipedia.org/wiki/Restrict
In type casting, the `restrict` will be ignored. For example,
```
-bash-4.4$ cat tt.c
struct s {
int a;
};
int test() {
return __builtin_btf_type_id(*(struct s * restrict)0, 1);
}
-bash-4.4$ clang -target bpf -O2 -S -g tt.c -emit-llvm -Xclang -disable-llvm-passes
```
restrict does not show up in the debuginfo.
I tried to construct another example,
```
-bash-4.4$ cat tt.c
struct s {
int a;
};
int test() {
struct s * restrict v;
return __builtin_btf_type_id(*v, 1);
}
```
In this case, "restrict" shows up in variable declaration as restrict -> pointer -> struct s.
The meta data we attached is the pointee type "struct s", so we are fine.
typically `restrict` shows up before pointer like [restrict|const|volatile]+ pointer [const|volatile]+ non-pointer type.
What I did is trying to remove const/volatile in "[const|volatile]+ non-pointer-type". So we should be fine here.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D97986/new/
https://reviews.llvm.org/D97986
More information about the llvm-commits
mailing list