mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH 2/2] treewide: mark linker list elements with  __ll_elem
Date: Wed,  3 Jan 2024 11:17:48 +0100	[thread overview]
Message-ID: <20240103101748.2629927-3-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20240103101748.2629927-1-a.fatoum@pengutronix.de>

To fix build with clang while using ASAN, define all linker list
elements with __ll_elem.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 drivers/clk/clk.c        |  3 +-
 include/command.h        |  4 +--
 include/deep-probe.h     |  3 +-
 include/image-metadata.h |  4 +--
 include/init.h           | 60 ++++++++++++++++++++--------------------
 include/linux/clk.h      |  2 +-
 include/linux/export.h   | 11 ++++----
 include/linux/pci.h      |  4 +--
 include/magicvar.h       |  7 +++--
 include/ratp_bb.h        |  3 +-
 10 files changed, 51 insertions(+), 50 deletions(-)

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 4130f413a36d..d3f5d5e83880 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -641,8 +641,7 @@ struct of_clk_provider {
 };
 
 extern struct of_device_id __clk_of_table_start[];
-const struct of_device_id __clk_of_table_sentinel
-	__attribute__ ((unused,section (".__clk_of_table_end")));
+const struct of_device_id __clk_of_table_sentinel __ll_elem(.__clk_of_table_end);
 
 static LIST_HEAD(of_clk_providers);
 
diff --git a/include/command.h b/include/command.h
index ccae568f87b6..9226756cc00b 100644
--- a/include/command.h
+++ b/include/command.h
@@ -12,6 +12,7 @@
 
 #include <linux/list.h>
 #include <linux/stringify.h>
+#include <linux/compiler_types.h>
 #include <linux/stddef.h>
 #include <string.h>
 
@@ -75,8 +76,7 @@ int run_command(const char *cmd);
 #define BAREBOX_CMD_START(_name)						\
 static struct command __barebox_cmd_##_name;					\
 const struct command *barebox_cmd_##_name 					\
-	__attribute__ ((unused,section (".barebox_cmd_" __stringify(_name))))	\
-			= &__barebox_cmd_##_name;				\
+	__ll_elem(.barebox_cmd_##_name)	= &__barebox_cmd_##_name;		\
 static struct command __barebox_cmd_##_name = {					\
 	.name		= #_name,
 
diff --git a/include/deep-probe.h b/include/deep-probe.h
index 927dd8d6cf50..e3770fcf0d89 100644
--- a/include/deep-probe.h
+++ b/include/deep-probe.h
@@ -3,6 +3,7 @@
 #define __DEEP_PROBE_H
 
 #include <linux/stringify.h>
+#include <linux/compiler_types.h>
 #include <linux/types.h>
 
 struct deep_probe_entry {
@@ -23,7 +24,7 @@ extern struct deep_probe_entry __barebox_deep_probe_end;
 
 #define __BAREBOX_DEEP_PROBE_ENABLE(_entry,_device_id)			\
 	static const struct deep_probe_entry _entry			\
-	__attribute__ ((used,section (".barebox_deep_probe_" __stringify(_entry)))) = { \
+	__ll_elem(.barebox_deep_probe_##_entry) = {			\
 		.device_id = _device_id,				\
 	}
 
diff --git a/include/image-metadata.h b/include/image-metadata.h
index 615632f9ce81..e00c209aedc9 100644
--- a/include/image-metadata.h
+++ b/include/image-metadata.h
@@ -125,10 +125,10 @@ int imd_verify_crc32(void *buf, size_t size);
 #ifdef __BAREBOX__
 
 #include <linux/stringify.h>
+#include <linux/compiler_types.h>
 
 #define __BAREBOX_IMD_SECTION(_section) \
-	__attribute__ ((unused,section (__stringify(_section)))) \
-	__attribute__((aligned(4)))
+	__ll_elem(_section) __attribute__((aligned(4)))
 
 #define BAREBOX_IMD_TAG_STRING(_name, _type, _string, _keep_if_unused)			\
 	const struct imd_entry_string __barebox_imd_##_name				\
diff --git a/include/init.h b/include/init.h
index d0343fdf05cc..33a76974f23d 100644
--- a/include/init.h
+++ b/include/init.h
@@ -2,6 +2,8 @@
 #ifndef _INIT_H
 #define _INIT_H
 
+#include <linux/compiler_types.h>
+
 /*
  * fake define to simplify the linux sync
  */
@@ -33,13 +35,11 @@ typedef void (*exitcall_t)(void);
 
 #ifndef __ASSEMBLY__
 
-#define __define_initcall(level,fn,id) \
-	static initcall_t __initcall_##fn##id __attribute__((__used__)) \
-	__attribute__((__section__(".initcall." level))) = fn
+#define __define_initcall(fn,id) \
+	static initcall_t __initcall_##fn##id __ll_elem(.initcall.##id) = fn
 
-#define __define_exitcall(level,fn,id) \
-	static exitcall_t __exitcall_##fn##id __attribute__((__used__)) \
-	__attribute__((__section__(".exitcall." level))) = fn
+#define __define_exitcall(fn,id) \
+	static exitcall_t __exitcall_##fn##id __ll_elem(.exitcall.##id) = fn
 
 
 /*
@@ -51,32 +51,32 @@ typedef void (*exitcall_t)(void);
  * The only purpose for "of_populate" is to call of_probe() other functions are
  * not allowed.
  */
-#define pure_initcall(fn)		__define_initcall("0",fn,0)
+#define pure_initcall(fn)		__define_initcall(fn, 0)
 
-#define core_initcall(fn)		__define_initcall("1",fn,1)
-#define postcore_initcall(fn)		__define_initcall("2",fn,2)
-#define console_initcall(fn)		__define_initcall("3",fn,3)
-#define postconsole_initcall(fn)	__define_initcall("4",fn,4)
-#define mem_initcall(fn)		__define_initcall("5",fn,5)
-#define postmem_initcall(fn)		__define_initcall("6",fn,6)
-#define mmu_initcall(fn)		__define_initcall("7",fn,7)
-#define postmmu_initcall(fn)		__define_initcall("8",fn,8)
-#define coredevice_initcall(fn)		__define_initcall("9",fn,9)
-#define fs_initcall(fn)			__define_initcall("10",fn,10)
-#define device_initcall(fn)		__define_initcall("11",fn,11)
-#define crypto_initcall(fn)		__define_initcall("12",fn,12)
-#define of_populate_initcall(fn)	__define_initcall("13",fn,13)
-#define late_initcall(fn)		__define_initcall("14",fn,14)
-#define environment_initcall(fn)	__define_initcall("15",fn,15)
-#define postenvironment_initcall(fn)	__define_initcall("16",fn,16)
+#define core_initcall(fn)		__define_initcall(fn, 1)
+#define postcore_initcall(fn)		__define_initcall(fn, 2)
+#define console_initcall(fn)		__define_initcall(fn, 3)
+#define postconsole_initcall(fn)	__define_initcall(fn, 4)
+#define mem_initcall(fn)		__define_initcall(fn, 5)
+#define postmem_initcall(fn)		__define_initcall(fn, 6)
+#define mmu_initcall(fn)		__define_initcall(fn, 7)
+#define postmmu_initcall(fn)		__define_initcall(fn, 8)
+#define coredevice_initcall(fn)		__define_initcall(fn, 9)
+#define fs_initcall(fn)			__define_initcall(fn, 10)
+#define device_initcall(fn)		__define_initcall(fn, 11)
+#define crypto_initcall(fn)		__define_initcall(fn, 12)
+#define of_populate_initcall(fn)	__define_initcall(fn, 13)
+#define late_initcall(fn)		__define_initcall(fn, 14)
+#define environment_initcall(fn)	__define_initcall(fn, 15)
+#define postenvironment_initcall(fn)	__define_initcall(fn, 16)
 
-#define early_exitcall(fn)		__define_exitcall("0",fn,0)
-#define predevshutdown_exitcall(fn)	__define_exitcall("1",fn,1)
-#define devshutdown_exitcall(fn)	__define_exitcall("2",fn,2)
-#define postdevshutdown_exitcall(fn)	__define_exitcall("3",fn,3)
-#define prearchshutdown_exitcall(fn)	__define_exitcall("4",fn,4)
-#define archshutdown_exitcall(fn)	__define_exitcall("5",fn,5)
-#define postarchshutdown_exitcall(fn)	__define_exitcall("6",fn,6)
+#define early_exitcall(fn)		__define_exitcall(fn, 0)
+#define predevshutdown_exitcall(fn)	__define_exitcall(fn, 1)
+#define devshutdown_exitcall(fn)	__define_exitcall(fn, 2)
+#define postdevshutdown_exitcall(fn)	__define_exitcall(fn, 3)
+#define prearchshutdown_exitcall(fn)	__define_exitcall(fn, 4)
+#define archshutdown_exitcall(fn)	__define_exitcall(fn, 5)
+#define postarchshutdown_exitcall(fn)	__define_exitcall(fn, 6)
 
 #endif /* __ASSEMBLY__ */
 
diff --git a/include/linux/clk.h b/include/linux/clk.h
index 7657ab6fc245..333dc1b8b6c6 100644
--- a/include/linux/clk.h
+++ b/include/linux/clk.h
@@ -762,7 +762,7 @@ struct clk_hw_onecell_data {
 
 #define CLK_OF_DECLARE(name, compat, fn)				\
 const struct of_device_id __clk_of_table_##name				\
-__attribute__ ((unused,section (".__clk_of_table"))) \
+	__ll_elem(.__clk_of_table) \
 	= { .compatible = compat, .data = fn }
 
 void of_clk_del_provider(struct device_node *np);
diff --git a/include/linux/export.h b/include/linux/export.h
index 90f6ada2d522..8f47742bea99 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -15,21 +15,20 @@ struct kernel_symbol
 };
 
 /* For every exported symbol, place a struct in the __ksymtab section */
-#define __EXPORT_SYMBOL(sym, sec)				\
+#define __EXPORT_SYMBOL(sym)					\
 	extern typeof(sym) sym;					\
 	static const char __ustrtab_##sym[]			\
-	__attribute__((section("__usymtab_strings")))		\
+	__ll_elem(__usymtab_strings)				\
 	= MODULE_SYMBOL_PREFIX #sym;                    	\
 	static const struct kernel_symbol __usymtab_##sym	\
-	__used \
-	__attribute__((section("__usymtab" sec), unused))	\
+	__ll_elem(__usymtab)					\
 	= { (unsigned long)&sym, __ustrtab_##sym }
 
 #define EXPORT_SYMBOL(sym)					\
-	__EXPORT_SYMBOL(sym, "")
+	__EXPORT_SYMBOL(sym)
 
 #define EXPORT_SYMBOL_GPL(sym)					\
-	__EXPORT_SYMBOL(sym, "")
+	__EXPORT_SYMBOL(sym)
 
 #else
 
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 98d056624fd4..b3bbae36e2f4 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -357,8 +357,8 @@ enum pci_fixup_pass {
 /* Anonymous variables would be nice... */
 #define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, class,	\
 				  class_shift, hook)			\
-	static const struct pci_fixup __PASTE(__pci_fixup_##name,__LINE__) __used	\
-	__attribute__((__section__(#section), aligned((sizeof(void *)))))    \
+	static const struct pci_fixup __PASTE(__pci_fixup_##name,__LINE__) \
+	__ll_elem(section) __aligned(sizeof(void *))			\
 		= { vendor, device, class, class_shift, hook };
 
 #define DECLARE_PCI_FIXUP_CLASS_EARLY(vendor, device, class,		\
diff --git a/include/magicvar.h b/include/magicvar.h
index 31292611bb7d..ef8eff798cc8 100644
--- a/include/magicvar.h
+++ b/include/magicvar.h
@@ -3,6 +3,7 @@
 #define __MAGIC_VARS_H
 
 #include <linux/stringify.h>
+#include <linux/compiler_types.h>
 
 struct magicvar {
 	const char *name;
@@ -19,9 +20,9 @@ extern struct magicvar __barebox_magicvar_end;
 #endif
 
 #ifdef CONFIG_CMD_MAGICVAR
-#define __BAREBOX_MAGICVAR_NAMED(_name, _varname, _description)			\
-static const struct magicvar _name							\
-        __attribute__ ((used,section (".barebox_magicvar_" __stringify(_name)))) = {	\
+#define __BAREBOX_MAGICVAR_NAMED(_name, _varname, _description)	\
+static const struct magicvar _name				\
+        __ll_elem(.barebox_magicvar_##_name) = {		\
         .name	= #_varname,					\
 	.description = MAGICVAR_DESCRIPTION(_description),	\
 };
diff --git a/include/ratp_bb.h b/include/ratp_bb.h
index b710f99bf9d0..418be6fe7b53 100644
--- a/include/ratp_bb.h
+++ b/include/ratp_bb.h
@@ -3,6 +3,7 @@
 #define __RATP_BB_H
 
 #include <linux/stringify.h>
+#include <linux/compiler_types.h>
 
 #define BB_RATP_TYPE_COMMAND		1
 #define BB_RATP_TYPE_COMMAND_RETURN	2
@@ -66,7 +67,7 @@ __attribute__((aligned(64)))
 #define BAREBOX_RATP_CMD_START(_name)							\
 extern const struct ratp_command __barebox_ratp_cmd_##_name;				\
 const struct ratp_command __barebox_ratp_cmd_##_name					\
-	__attribute__ ((unused,section (".barebox_ratp_cmd_" __stringify(_name)))) = {
+	__ll_elem(.barebox_ratp_cmd_##_name) = {
 
 #define BAREBOX_RATP_CMD_END								\
 };
-- 
2.39.2




  parent reply	other threads:[~2024-01-03 10:19 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-03 10:17 [PATCH 0/2] compiler: fix clang and address sanitizer coexistance Ahmad Fatoum
2024-01-03 10:17 ` [PATCH 1/2] compiler: define __ll_elem for linker list elements Ahmad Fatoum
2024-01-03 10:17 ` Ahmad Fatoum [this message]
2024-01-04  9:10 ` [PATCH 0/2] compiler: fix clang and address sanitizer coexistance Sascha Hauer

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=20240103101748.2629927-3-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /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