1*fa624569SSami Tolvanen // SPDX-License-Identifier: GPL-2.0 2*fa624569SSami Tolvanen /* 3*fa624569SSami Tolvanen * Copyright (C) 2024 Google LLC 4*fa624569SSami Tolvanen * 5*fa624569SSami Tolvanen * Example for symbol pointers. When compiled with Clang, gendwarfkyms 6*fa624569SSami Tolvanen * uses a symbol pointer for `f`. 7*fa624569SSami Tolvanen * 8*fa624569SSami Tolvanen * $ clang -g -c examples/symbolptr.c -o examples/symbolptr.o 9*fa624569SSami Tolvanen * $ echo -e "f\ng\np" | ./gendwarfksyms -d examples/symbolptr.o 10*fa624569SSami Tolvanen */ 11*fa624569SSami Tolvanen 12*fa624569SSami Tolvanen /* Kernel macros for userspace testing. */ 13*fa624569SSami Tolvanen #ifndef __used 14*fa624569SSami Tolvanen #define __used __attribute__((__used__)) 15*fa624569SSami Tolvanen #endif 16*fa624569SSami Tolvanen #ifndef __section 17*fa624569SSami Tolvanen #define __section(section) __attribute__((__section__(section))) 18*fa624569SSami Tolvanen #endif 19*fa624569SSami Tolvanen 20*fa624569SSami Tolvanen #define __GENDWARFKSYMS_EXPORT(sym) \ 21*fa624569SSami Tolvanen static typeof(sym) *__gendwarfksyms_ptr_##sym __used \ 22*fa624569SSami Tolvanen __section(".discard.gendwarfksyms") = &sym; 23*fa624569SSami Tolvanen 24*fa624569SSami Tolvanen extern void f(unsigned int arg); 25*fa624569SSami Tolvanen void g(int *arg); g(int * arg)26*fa624569SSami Tolvanenvoid g(int *arg) {} 27*fa624569SSami Tolvanen 28*fa624569SSami Tolvanen struct s; 29*fa624569SSami Tolvanen extern struct s *p; 30*fa624569SSami Tolvanen 31*fa624569SSami Tolvanen __GENDWARFKSYMS_EXPORT(f); 32*fa624569SSami Tolvanen __GENDWARFKSYMS_EXPORT(g); 33*fa624569SSami Tolvanen __GENDWARFKSYMS_EXPORT(p); 34