public inbox for linux-kbuild@vger.kernel.org
 help / color / mirror / Atom feed
From: Sami Tolvanen <samitolvanen@google.com>
To: Masahiro Yamada <masahiroy@kernel.org>,
	Luis Chamberlain <mcgrof@kernel.org>,
	 Miguel Ojeda <ojeda@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Matthew Maurer <mmaurer@google.com>,
	Alex Gaynor <alex.gaynor@gmail.com>,
	 Wedson Almeida Filho <wedsonaf@gmail.com>,
	Gary Guo <gary@garyguo.net>, Petr Pavlu <petr.pavlu@suse.com>,
	 Neal Gompa <neal@gompa.dev>, Hector Martin <marcan@marcan.st>,
	Janne Grunau <j@jannau.net>,  Miroslav Benes <mbenes@suse.cz>,
	Asahi Linux <asahi@lists.linux.dev>,
	linux-kbuild@vger.kernel.org,  linux-kernel@vger.kernel.org,
	linux-modules@vger.kernel.org,  rust-for-linux@vger.kernel.org,
	Sami Tolvanen <samitolvanen@google.com>
Subject: [PATCH v3 18/20] export: Add __gendwarfksyms_ptr_ references to exported symbols
Date: Mon, 23 Sep 2024 18:19:04 +0000	[thread overview]
Message-ID: <20240923181846.549877-40-samitolvanen@google.com> (raw)
In-Reply-To: <20240923181846.549877-22-samitolvanen@google.com>

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>
---
 include/linux/export.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/include/linux/export.h b/include/linux/export.h
index 0bbd02fd351d..cf71d3202e5b 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -52,9 +52,24 @@
 
 #else
 
+#ifdef CONFIG_GENDWARFKSYMS
+/*
+ * With CONFIG_GENDWARFKSYMS, ensure the compiler emits debugging
+ * information for all exported symbols, including those defined in
+ * different TUs, by adding a __gendwarfksyms_ptr_<symbol> pointer
+ * that's discarded during the final link.
+ */
+#define __GENDWARFKSYMS_EXPORT(sym)				\
+	static typeof(sym) *__gendwarfksyms_ptr_##sym __used	\
+		__section(".discard.gendwarfksyms") = &sym;
+#else
+#define __GENDWARFKSYMS_EXPORT(sym)
+#endif
+
 #define __EXPORT_SYMBOL(sym, license, ns)			\
 	extern typeof(sym) sym;					\
 	__ADDRESSABLE(sym)					\
+	__GENDWARFKSYMS_EXPORT(sym)				\
 	asm(__stringify(___EXPORT_SYMBOL(sym, license, ns)))
 
 #endif
-- 
2.46.0.792.g87dc391469-goog


  parent reply	other threads:[~2024-09-23 18:19 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-23 18:18 [PATCH v3 00/20] Implement DWARF modversions Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 01/20] scripts: import more list macros Sami Tolvanen
2024-10-06 17:36   ` Masahiro Yamada
2024-09-23 18:18 ` [PATCH v3 02/20] scripts: move genksyms crc32 implementation to a common include Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 03/20] tools: Add gendwarfksyms Sami Tolvanen
2024-10-01 14:04   ` Petr Pavlu
2024-10-01 19:59     ` Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 04/20] gendwarfksyms: Add address matching Sami Tolvanen
2024-10-01 14:06   ` Petr Pavlu
2024-10-01 20:06     ` Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 05/20] gendwarfksyms: Expand base_type Sami Tolvanen
2024-10-01 14:08   ` Petr Pavlu
2024-09-23 18:18 ` [PATCH v3 06/20] gendwarfksyms: Add a cache for processed DIEs Sami Tolvanen
2024-10-01 14:10   ` Petr Pavlu
2024-10-01 20:18     ` Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 07/20] gendwarfksyms: Expand type modifiers and typedefs Sami Tolvanen
2024-10-01 14:11   ` Petr Pavlu
2024-09-23 18:18 ` [PATCH v3 08/20] gendwarfksyms: Expand subroutine_type Sami Tolvanen
2024-10-01 14:12   ` Petr Pavlu
2024-09-23 18:18 ` [PATCH v3 09/20] gendwarfksyms: Expand array_type Sami Tolvanen
2024-10-01 14:13   ` Petr Pavlu
2024-09-23 18:18 ` [PATCH v3 10/20] gendwarfksyms: Expand structure types Sami Tolvanen
2024-10-01 14:16   ` Petr Pavlu
2024-10-01 21:20     ` Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 11/20] gendwarfksyms: Limit structure expansion Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 12/20] gendwarfksyms: Add die_map debugging Sami Tolvanen
2024-09-23 18:18 ` [PATCH v3 13/20] gendwarfksyms: Add symtypes output Sami Tolvanen
2024-09-23 18:19 ` [PATCH v3 14/20] gendwarfksyms: Add symbol versioning Sami Tolvanen
2024-09-23 18:19 ` [PATCH v3 15/20] gendwarfksyms: Add support for kABI rules Sami Tolvanen
2024-09-23 18:19 ` [PATCH v3 16/20] gendwarfksyms: Add support for reserved and ignored fields Sami Tolvanen
2024-09-23 18:19 ` [PATCH v3 17/20] gendwarfksyms: Add support for symbol type pointers Sami Tolvanen
2024-09-23 18:19 ` Sami Tolvanen [this message]
2024-09-23 18:19 ` [PATCH v3 19/20] kbuild: Add gendwarfksyms as an alternative to genksyms Sami Tolvanen
2024-09-23 18:19 ` [PATCH v3 20/20] Documentation/kbuild: Add DWARF module versioning Sami Tolvanen
2024-09-28 21:46 ` [PATCH v3 00/20] Implement DWARF modversions Neal Gompa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240923181846.549877-40-samitolvanen@google.com \
    --to=samitolvanen@google.com \
    --cc=alex.gaynor@gmail.com \
    --cc=asahi@lists.linux.dev \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=j@jannau.net \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=marcan@marcan.st \
    --cc=masahiroy@kernel.org \
    --cc=mbenes@suse.cz \
    --cc=mcgrof@kernel.org \
    --cc=mmaurer@google.com \
    --cc=neal@gompa.dev \
    --cc=ojeda@kernel.org \
    --cc=petr.pavlu@suse.com \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=wedsonaf@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox