aaron.ballman added a comment. > First, to build linux kernel with btf_tag annotated user pointer, we have > > #define __user __attribute__((btf_tag("user"))) > and the linux kernel contains code like below ([2]) > > typedef __signalfn_t __user *__sighandler_t; > and the user attribute applies to typedef type sighandler_t. > So clang needs to support btf_tag attribute with typedef type > to avoid compilation error.
I want to make sure we're clear on the semantics here. That defines `__sighandler_t` to be the type `__signalfn_t __user *`, so you expect this to annotate the type, not the declaration of the typedef. So this is about allowing `btf_tag` on types in addition to declarations? > typedef struct { ... } target_type __btf_tag Similar here -- this applies the __btf_tag to the type, not to the declaration of the typedef, right? I'm asking because this raises other questions. For example: void func(int i); void func(int __attribute__((btf_tag("__user"))) i); Is the second a valid redeclaration of the first? Additionally: __attribute__((overloadable)) void func(int i) { puts("one"); } __attribute__((overloadable)) void func(int __attribute__((btf_tag("__user"))) i) { puts("two"); } Is this a valid overload set because of the type attribute? Along the same lines, does adding this attribute to the type cause any ABI differences in how the type is passed? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D110127/new/ https://reviews.llvm.org/D110127 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits