Skip to content

Commit 5f01694

Browse files
committed
export: Add __gendwarfksyms_ptr_ references to exported symbols
With gendwarfksyms, we need each TU where the EXPORT_SYMBOL() macro is used to also contain DWARF type information for the symbols it exports. However, as a TU can also export external symbols and compilers may choose not to emit debugging information for symbols not defined in the current TU, the missing types will result in missing symbol versions. Stand-alone assembly code also doesn't contain type information for exported symbols, so we need to compile a temporary object file with asm-prototypes.h instead, and similarly need to ensure the DWARF in the temporary object file contains the necessary types. To always emit type information for external exports, add explicit __gendwarfksyms_ptr_<symbol> references to them in EXPORT_SYMBOL(). gendwarfksyms will use the type information for __gendwarfksyms_ptr_* if needed. Discard the pointers from the final binary to avoid further bloat. Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
1 parent c3708cf commit 5f01694

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

include/linux/export.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,24 @@
5252

5353
#else
5454

55+
#ifdef CONFIG_GENDWARFKSYMS
56+
/*
57+
* With CONFIG_GENDWARFKSYMS, ensure the compiler emits debugging
58+
* information for all exported symbols, including those defined in
59+
* different TUs, by adding a __gendwarfksyms_ptr_<symbol> pointer
60+
* that's discarded during the final link.
61+
*/
62+
#define __GENDWARFKSYMS_EXPORT(sym) \
63+
static typeof(sym) *__gendwarfksyms_ptr_##sym __used \
64+
__section(".discard.gendwarfksyms") = &sym;
65+
#else
66+
#define __GENDWARFKSYMS_EXPORT(sym)
67+
#endif
68+
5569
#define __EXPORT_SYMBOL(sym, license, ns) \
5670
extern typeof(sym) sym; \
5771
__ADDRESSABLE(sym) \
72+
__GENDWARFKSYMS_EXPORT(sym) \
5873
asm(__stringify(___EXPORT_SYMBOL(sym, license, ns)))
5974

6075
#endif

0 commit comments

Comments
 (0)