linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h
@ 2019-08-28 22:55 Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 01/14] s390/boot: fix section name escaping Nick Desaulniers
                   ` (14 more replies)
  0 siblings, 15 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

This fixes an Oops observed in distro's that use systemd and not
net.core.bpf_jit_enable=1, when their kernels are compiled with Clang.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
https://bugs.llvm.org/show_bug.cgi?id=42950
https://marc.info/?l=linux-netdev&m=156412960619946&w=2
https://github.com/ClangBuiltLinux/linux/issues/619

Changes V2 -> V3:
* s/__attribute__((__section/__attribute__((__section__ in commit
  messages as per Joe.
Changes V1 -> V2:
* drop arm64, arc, and sh patches as they were picked up by their
  maintainers.
* Split the previous V1 hunk from include/linux that touched
  include/linux/compiler.h off into its own patch for inclusion in
  stable, as it fixes a user visible issue.
* Collect Acks and Tested by tags.

Nick Desaulniers (14):
  s390/boot: fix section name escaping
  include/linux/compiler.h: prefer __section from compiler_attributes.h
  parisc: prefer __section from compiler_attributes.h
  um: prefer __section from compiler_attributes.h
  ia64: prefer __section from compiler_attributes.h
  arm: prefer __section from compiler_attributes.h
  mips: prefer __section from compiler_attributes.h
  sparc: prefer __section from compiler_attributes.h
  powerpc: prefer __section and __printf from compiler_attributes.h
  x86: prefer __section from compiler_attributes.h
  include/asm-generic: prefer __section from compiler_attributes.h
  include/linux: prefer __section from compiler_attributes.h
  include/linux/compiler.h: remove unused KENTRY macro
  compiler_attributes.h: add note about __section

 arch/arm/include/asm/cache.h          |  2 +-
 arch/arm/include/asm/mach/arch.h      |  4 ++--
 arch/arm/include/asm/setup.h          |  2 +-
 arch/ia64/include/asm/cache.h         |  2 +-
 arch/mips/include/asm/cache.h         |  2 +-
 arch/parisc/include/asm/cache.h       |  2 +-
 arch/parisc/include/asm/ldcw.h        |  2 +-
 arch/powerpc/boot/main.c              |  3 +--
 arch/powerpc/boot/ps3.c               |  6 ++----
 arch/powerpc/include/asm/cache.h      |  2 +-
 arch/powerpc/kernel/btext.c           |  2 +-
 arch/s390/boot/startup.c              |  2 +-
 arch/sparc/include/asm/cache.h        |  2 +-
 arch/sparc/kernel/btext.c             |  2 +-
 arch/um/kernel/um_arch.c              |  6 +++---
 arch/x86/include/asm/cache.h          |  2 +-
 arch/x86/include/asm/intel-mid.h      |  2 +-
 arch/x86/include/asm/iommu_table.h    |  5 ++---
 arch/x86/include/asm/irqflags.h       |  2 +-
 arch/x86/include/asm/mem_encrypt.h    |  2 +-
 arch/x86/kernel/cpu/cpu.h             |  3 +--
 include/asm-generic/error-injection.h |  2 +-
 include/asm-generic/kprobes.h         |  5 ++---
 include/linux/cache.h                 |  6 +++---
 include/linux/compiler.h              | 31 ++++-----------------------
 include/linux/compiler_attributes.h   | 10 +++++++++
 include/linux/cpu.h                   |  2 +-
 include/linux/export.h                |  2 +-
 include/linux/init_task.h             |  4 ++--
 include/linux/interrupt.h             |  5 ++---
 include/linux/sched/debug.h           |  2 +-
 include/linux/srcutree.h              |  2 +-
 32 files changed, 54 insertions(+), 74 deletions(-)

-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 01/14] s390/boot: fix section name escaping
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 02/14] include/linux/compiler.h: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/s390/boot/startup.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/s390/boot/startup.c b/arch/s390/boot/startup.c
index 7b0d05414618..26493c4ff04b 100644
--- a/arch/s390/boot/startup.c
+++ b/arch/s390/boot/startup.c
@@ -46,7 +46,7 @@ struct diag_ops __bootdata_preserved(diag_dma_ops) = {
 	.diag0c = _diag0c_dma,
 	.diag308_reset = _diag308_reset_dma
 };
-static struct diag210 _diag210_tmp_dma __section(".dma.data");
+static struct diag210 _diag210_tmp_dma __section(.dma.data);
 struct diag210 *__bootdata_preserved(__diag210_tmp_dma) = &_diag210_tmp_dma;
 void _swsusp_reset_dma(void);
 unsigned long __bootdata_preserved(__swsusp_reset_dma) = __pa(_swsusp_reset_dma);
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 02/14] include/linux/compiler.h: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 01/14] s390/boot: fix section name escaping Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 03/14] parisc: " Nick Desaulniers
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

This fixes an Oops observed in distro's that use systemd and not
net.core.bpf_jit_enable=1, when their kernels are compiled with Clang.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Acked-by: Will Deacon <will@kernel.org>
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 include/linux/compiler.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index f0fd5636fddb..5e88e7e33abe 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -24,7 +24,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
 			long ______r;					\
 			static struct ftrace_likely_data		\
 				__aligned(4)				\
-				__section("_ftrace_annotated_branch")	\
+				__section(_ftrace_annotated_branch)	\
 				______f = {				\
 				.data.func = __func__,			\
 				.data.file = __FILE__,			\
@@ -60,7 +60,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
 #define __trace_if_value(cond) ({			\
 	static struct ftrace_branch_data		\
 		__aligned(4)				\
-		__section("_ftrace_branch")		\
+		__section(_ftrace_branch)		\
 		__if_trace = {				\
 			.func = __func__,		\
 			.file = __FILE__,		\
@@ -118,7 +118,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
 	".popsection\n\t"
 
 /* Annotate a C jump table to allow objtool to follow the code flow */
-#define __annotate_jump_table __section(".rodata..c_jump_table")
+#define __annotate_jump_table __section(.rodata..c_jump_table)
 
 #else
 #define annotate_reachable()
@@ -298,7 +298,7 @@ unsigned long read_word_at_a_time(const void *addr)
  * visible to the compiler.
  */
 #define __ADDRESSABLE(sym) \
-	static void * __section(".discard.addressable") __used \
+	static void * __section(.discard.addressable) __used \
 		__PASTE(__addressable_##sym, __LINE__) = (void *)&sym;
 
 /**
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 03/14] parisc: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 01/14] s390/boot: fix section name escaping Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 02/14] include/linux/compiler.h: prefer __section from compiler_attributes.h Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 04/14] um: " Nick Desaulniers
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/parisc/include/asm/cache.h | 2 +-
 arch/parisc/include/asm/ldcw.h  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/parisc/include/asm/cache.h b/arch/parisc/include/asm/cache.h
index 73ca89a47f49..e5de3f897633 100644
--- a/arch/parisc/include/asm/cache.h
+++ b/arch/parisc/include/asm/cache.h
@@ -22,7 +22,7 @@
 
 #define ARCH_DMA_MINALIGN	L1_CACHE_BYTES
 
-#define __read_mostly __attribute__((__section__(".data..read_mostly")))
+#define __read_mostly __section(.data..read_mostly)
 
 void parisc_cache_init(void);	/* initializes cache-flushing */
 void disable_sr_hashing_asm(int); /* low level support for above */
diff --git a/arch/parisc/include/asm/ldcw.h b/arch/parisc/include/asm/ldcw.h
index 3eb4bfc1fb36..e080143e79a3 100644
--- a/arch/parisc/include/asm/ldcw.h
+++ b/arch/parisc/include/asm/ldcw.h
@@ -52,7 +52,7 @@
 })
 
 #ifdef CONFIG_SMP
-# define __lock_aligned __attribute__((__section__(".data..lock_aligned")))
+# define __lock_aligned __section(.data..lock_aligned)
 #endif
 
 #endif /* __PARISC_LDCW_H */
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 04/14] um: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (2 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 03/14] parisc: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 05/14] ia64: " Nick Desaulniers
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/um/kernel/um_arch.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index a818ccef30ca..18e0287dd97e 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -52,9 +52,9 @@ struct cpuinfo_um boot_cpu_data = {
 	.ipi_pipe		= { -1, -1 }
 };
 
-union thread_union cpu0_irqstack
-	__attribute__((__section__(".data..init_irqstack"))) =
-		{ .thread_info = INIT_THREAD_INFO(init_task) };
+union thread_union cpu0_irqstack __section(.data..init_irqstack) = {
+	.thread_info = INIT_THREAD_INFO(init_task)
+};
 
 /* Changed in setup_arch, which is called in early boot */
 static char host_info[(__NEW_UTS_LEN + 1) * 5];
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 05/14] ia64: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (3 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 04/14] um: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 06/14] arm: " Nick Desaulniers
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/ia64/include/asm/cache.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/ia64/include/asm/cache.h b/arch/ia64/include/asm/cache.h
index 4eb6f742d14f..7decf91ca11a 100644
--- a/arch/ia64/include/asm/cache.h
+++ b/arch/ia64/include/asm/cache.h
@@ -25,6 +25,6 @@
 # define SMP_CACHE_BYTES	(1 << 3)
 #endif
 
-#define __read_mostly __attribute__((__section__(".data..read_mostly")))
+#define __read_mostly __section(.data..read_mostly)
 
 #endif /* _ASM_IA64_CACHE_H */
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 06/14] arm: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (4 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 05/14] ia64: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 07/14] mips: " Nick Desaulniers
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/arm/include/asm/cache.h     | 2 +-
 arch/arm/include/asm/mach/arch.h | 4 ++--
 arch/arm/include/asm/setup.h     | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/include/asm/cache.h b/arch/arm/include/asm/cache.h
index 1d65ed3a2755..cc06079600e0 100644
--- a/arch/arm/include/asm/cache.h
+++ b/arch/arm/include/asm/cache.h
@@ -24,6 +24,6 @@
 #define ARCH_SLAB_MINALIGN 8
 #endif
 
-#define __read_mostly __attribute__((__section__(".data..read_mostly")))
+#define __read_mostly __section(.data..read_mostly)
 
 #endif
diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h
index e7df5a822cab..2986f6b4862d 100644
--- a/arch/arm/include/asm/mach/arch.h
+++ b/arch/arm/include/asm/mach/arch.h
@@ -81,7 +81,7 @@ extern const struct machine_desc __arch_info_begin[], __arch_info_end[];
 #define MACHINE_START(_type,_name)			\
 static const struct machine_desc __mach_desc_##_type	\
  __used							\
- __attribute__((__section__(".arch.info.init"))) = {	\
+ __section(.arch.info.init) = {	\
 	.nr		= MACH_TYPE_##_type,		\
 	.name		= _name,
 
@@ -91,7 +91,7 @@ static const struct machine_desc __mach_desc_##_type	\
 #define DT_MACHINE_START(_name, _namestr)		\
 static const struct machine_desc __mach_desc_##_name	\
  __used							\
- __attribute__((__section__(".arch.info.init"))) = {	\
+ __section(.arch.info.init) = {	\
 	.nr		= ~0,				\
 	.name		= _namestr,
 
diff --git a/arch/arm/include/asm/setup.h b/arch/arm/include/asm/setup.h
index 67d20712cb48..00190f1f0574 100644
--- a/arch/arm/include/asm/setup.h
+++ b/arch/arm/include/asm/setup.h
@@ -14,7 +14,7 @@
 #include <uapi/asm/setup.h>
 
 
-#define __tag __used __attribute__((__section__(".taglist.init")))
+#define __tag __used __section(.taglist.init)
 #define __tagtable(tag, fn) \
 static const struct tagtable __tagtable_##fn __tag = { tag, fn }
 
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 07/14] mips: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (5 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 06/14] arm: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 08/14] sparc: " Nick Desaulniers
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Acked-by: Paul Burton <paul.burton@mips.com>
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/mips/include/asm/cache.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/include/asm/cache.h b/arch/mips/include/asm/cache.h
index 8b14c2706aa5..af2d943580ee 100644
--- a/arch/mips/include/asm/cache.h
+++ b/arch/mips/include/asm/cache.h
@@ -14,6 +14,6 @@
 #define L1_CACHE_SHIFT		CONFIG_MIPS_L1_CACHE_SHIFT
 #define L1_CACHE_BYTES		(1 << L1_CACHE_SHIFT)
 
-#define __read_mostly __attribute__((__section__(".data..read_mostly")))
+#define __read_mostly __section(.data..read_mostly)
 
 #endif /* _ASM_CACHE_H */
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 08/14] sparc: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (6 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 07/14] mips: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 09/14] powerpc: prefer __section and __printf " Nick Desaulniers
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Acked-by: David S. Miller <davem@davemloft.net>
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/sparc/include/asm/cache.h | 2 +-
 arch/sparc/kernel/btext.c      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/sparc/include/asm/cache.h b/arch/sparc/include/asm/cache.h
index dcfd58118c11..9a9effdd01e2 100644
--- a/arch/sparc/include/asm/cache.h
+++ b/arch/sparc/include/asm/cache.h
@@ -21,6 +21,6 @@
 
 #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
 
-#define __read_mostly __attribute__((__section__(".data..read_mostly")))
+#define __read_mostly __section(.data..read_mostly)
 
 #endif /* !(_SPARC_CACHE_H) */
diff --git a/arch/sparc/kernel/btext.c b/arch/sparc/kernel/btext.c
index 5869773f3dc4..b2eff8f8f27b 100644
--- a/arch/sparc/kernel/btext.c
+++ b/arch/sparc/kernel/btext.c
@@ -24,7 +24,7 @@ static void draw_byte_32(unsigned char *bits, unsigned int *base, int rb);
 static void draw_byte_16(unsigned char *bits, unsigned int *base, int rb);
 static void draw_byte_8(unsigned char *bits, unsigned int *base, int rb);
 
-#define __force_data __attribute__((__section__(".data")))
+#define __force_data __section(.data)
 
 static int g_loc_X __force_data;
 static int g_loc_Y __force_data;
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 09/14] powerpc: prefer __section and __printf from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (7 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 08/14] sparc: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 10/14] x86: prefer __section " Nick Desaulniers
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/powerpc/boot/main.c         | 3 +--
 arch/powerpc/boot/ps3.c          | 6 ++----
 arch/powerpc/include/asm/cache.h | 2 +-
 arch/powerpc/kernel/btext.c      | 2 +-
 4 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/boot/main.c b/arch/powerpc/boot/main.c
index 102cc546444d..3ccc84e06fc4 100644
--- a/arch/powerpc/boot/main.c
+++ b/arch/powerpc/boot/main.c
@@ -150,8 +150,7 @@ static struct addr_range prep_initrd(struct addr_range vmlinux, void *chosen,
  * edit the command line passed to vmlinux (by setting /chosen/bootargs).
  * The buffer is put in it's own section so that tools may locate it easier.
  */
-static char cmdline[BOOT_COMMAND_LINE_SIZE]
-	__attribute__((__section__("__builtin_cmdline")));
+static char cmdline[BOOT_COMMAND_LINE_SIZE] __section(__builtin_cmdline);
 
 static void prep_cmdline(void *chosen)
 {
diff --git a/arch/powerpc/boot/ps3.c b/arch/powerpc/boot/ps3.c
index c52552a681c5..70b2ed82d2de 100644
--- a/arch/powerpc/boot/ps3.c
+++ b/arch/powerpc/boot/ps3.c
@@ -24,8 +24,7 @@ extern int lv1_get_repository_node_value(u64 in_1, u64 in_2, u64 in_3,
 #ifdef DEBUG
 #define DBG(fmt...) printf(fmt)
 #else
-static inline int __attribute__ ((format (printf, 1, 2))) DBG(
-	const char *fmt, ...) {return 0;}
+static inline int __printf(1, 2) DBG(const char *fmt, ...) { return 0; }
 #endif
 
 BSS_STACK(4096);
@@ -35,8 +34,7 @@ BSS_STACK(4096);
  * The buffer is put in it's own section so that tools may locate it easier.
  */
 
-static char cmdline[BOOT_COMMAND_LINE_SIZE]
-	__attribute__((__section__("__builtin_cmdline")));
+static char cmdline[BOOT_COMMAND_LINE_SIZE] __section(__builtin_cmdline);
 
 static void prep_cmdline(void *chosen)
 {
diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h
index 45e3137ccd71..9114495855eb 100644
--- a/arch/powerpc/include/asm/cache.h
+++ b/arch/powerpc/include/asm/cache.h
@@ -91,7 +91,7 @@ static inline u32 l1_cache_bytes(void)
 	isync
 
 #else
-#define __read_mostly __attribute__((__section__(".data..read_mostly")))
+#define __read_mostly __section(.data..read_mostly)
 
 #ifdef CONFIG_PPC_BOOK3S_32
 extern long _get_L2CR(void);
diff --git a/arch/powerpc/kernel/btext.c b/arch/powerpc/kernel/btext.c
index 6dfceaa820e4..f57712a55815 100644
--- a/arch/powerpc/kernel/btext.c
+++ b/arch/powerpc/kernel/btext.c
@@ -26,7 +26,7 @@
 static void scrollscreen(void);
 #endif
 
-#define __force_data __attribute__((__section__(".data")))
+#define __force_data __section(.data)
 
 static int g_loc_X __force_data;
 static int g_loc_Y __force_data;
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 10/14] x86: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (8 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 09/14] powerpc: prefer __section and __printf " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-29 14:14   ` Miguel Ojeda
  2019-08-28 22:55 ` [PATCH v3 11/14] include/asm-generic: " Nick Desaulniers
                   ` (4 subsequent siblings)
  14 siblings, 1 reply; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 arch/x86/include/asm/cache.h       | 2 +-
 arch/x86/include/asm/intel-mid.h   | 2 +-
 arch/x86/include/asm/iommu_table.h | 5 ++---
 arch/x86/include/asm/irqflags.h    | 2 +-
 arch/x86/include/asm/mem_encrypt.h | 2 +-
 arch/x86/kernel/cpu/cpu.h          | 3 +--
 6 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/arch/x86/include/asm/cache.h b/arch/x86/include/asm/cache.h
index abe08690a887..bb9f4bf4ec02 100644
--- a/arch/x86/include/asm/cache.h
+++ b/arch/x86/include/asm/cache.h
@@ -8,7 +8,7 @@
 #define L1_CACHE_SHIFT	(CONFIG_X86_L1_CACHE_SHIFT)
 #define L1_CACHE_BYTES	(1 << L1_CACHE_SHIFT)
 
-#define __read_mostly __attribute__((__section__(".data..read_mostly")))
+#define __read_mostly __section(.data..read_mostly)
 
 #define INTERNODE_CACHE_SHIFT CONFIG_X86_INTERNODE_CACHE_SHIFT
 #define INTERNODE_CACHE_BYTES (1 << INTERNODE_CACHE_SHIFT)
diff --git a/arch/x86/include/asm/intel-mid.h b/arch/x86/include/asm/intel-mid.h
index 8e5af119dc2d..f51f04aefe1b 100644
--- a/arch/x86/include/asm/intel-mid.h
+++ b/arch/x86/include/asm/intel-mid.h
@@ -43,7 +43,7 @@ struct devs_id {
 
 #define sfi_device(i)								\
 	static const struct devs_id *const __intel_mid_sfi_##i##_dev __used	\
-	__attribute__((__section__(".x86_intel_mid_dev.init"))) = &i
+	__section(.x86_intel_mid_dev.init) = &i
 
 /**
 * struct mid_sd_board_info - template for SD device creation
diff --git a/arch/x86/include/asm/iommu_table.h b/arch/x86/include/asm/iommu_table.h
index 1fb3fd1a83c2..7d190710eb92 100644
--- a/arch/x86/include/asm/iommu_table.h
+++ b/arch/x86/include/asm/iommu_table.h
@@ -50,9 +50,8 @@ struct iommu_table_entry {
 
 #define __IOMMU_INIT(_detect, _depend, _early_init, _late_init, _finish)\
 	static const struct iommu_table_entry				\
-		__iommu_entry_##_detect __used				\
-	__attribute__ ((unused, __section__(".iommu_table"),		\
-			aligned((sizeof(void *)))))	\
+		__iommu_entry_##_detect __used __section(.iommu_table)	\
+		__aligned((sizeof(void *)))				\
 	= {_detect, _depend, _early_init, _late_init,			\
 	   _finish ? IOMMU_FINISH_IF_DETECTED : 0}
 /*
diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h
index 8a0e56e1dcc9..68db90bca813 100644
--- a/arch/x86/include/asm/irqflags.h
+++ b/arch/x86/include/asm/irqflags.h
@@ -9,7 +9,7 @@
 #include <asm/nospec-branch.h>
 
 /* Provide __cpuidle; we can't safely include <linux/cpu.h> */
-#define __cpuidle __attribute__((__section__(".cpuidle.text")))
+#define __cpuidle __section(.cpuidle.text)
 
 /*
  * Interrupt control:
diff --git a/arch/x86/include/asm/mem_encrypt.h b/arch/x86/include/asm/mem_encrypt.h
index 0c196c47d621..db2cd3709148 100644
--- a/arch/x86/include/asm/mem_encrypt.h
+++ b/arch/x86/include/asm/mem_encrypt.h
@@ -50,7 +50,7 @@ void __init mem_encrypt_free_decrypted_mem(void);
 bool sme_active(void);
 bool sev_active(void);
 
-#define __bss_decrypted __attribute__((__section__(".bss..decrypted")))
+#define __bss_decrypted __section(.bss..decrypted)
 
 #else	/* !CONFIG_AMD_MEM_ENCRYPT */
 
diff --git a/arch/x86/kernel/cpu/cpu.h b/arch/x86/kernel/cpu/cpu.h
index c0e2407abdd6..7ff9dc41a603 100644
--- a/arch/x86/kernel/cpu/cpu.h
+++ b/arch/x86/kernel/cpu/cpu.h
@@ -38,8 +38,7 @@ struct _tlb_table {
 
 #define cpu_dev_register(cpu_devX) \
 	static const struct cpu_dev *const __cpu_dev_##cpu_devX __used \
-	__attribute__((__section__(".x86_cpu_dev.init"))) = \
-	&cpu_devX;
+	__section(.x86_cpu_dev.init) = &cpu_devX;
 
 extern const struct cpu_dev *const __x86_cpu_dev_start[],
 			    *const __x86_cpu_dev_end[];
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 11/14] include/asm-generic: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (9 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 10/14] x86: prefer __section " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 12/14] include/linux: " Nick Desaulniers
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 include/asm-generic/error-injection.h | 2 +-
 include/asm-generic/kprobes.h         | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/include/asm-generic/error-injection.h b/include/asm-generic/error-injection.h
index 95a159a4137f..a593a50b33e3 100644
--- a/include/asm-generic/error-injection.h
+++ b/include/asm-generic/error-injection.h
@@ -23,7 +23,7 @@ struct error_injection_entry {
  */
 #define ALLOW_ERROR_INJECTION(fname, _etype)				\
 static struct error_injection_entry __used				\
-	__attribute__((__section__("_error_injection_whitelist")))	\
+	__section(_error_injection_whitelist)				\
 	_eil_addr_##fname = {						\
 		.addr = (unsigned long)fname,				\
 		.etype = EI_ETYPE_##_etype,				\
diff --git a/include/asm-generic/kprobes.h b/include/asm-generic/kprobes.h
index 4a982089c95c..20d69719270f 100644
--- a/include/asm-generic/kprobes.h
+++ b/include/asm-generic/kprobes.h
@@ -9,12 +9,11 @@
  * by using this macro.
  */
 # define __NOKPROBE_SYMBOL(fname)				\
-static unsigned long __used					\
-	__attribute__((__section__("_kprobe_blacklist")))	\
+static unsigned long __used __section(_kprobe_blacklist)	\
 	_kbl_addr_##fname = (unsigned long)fname;
 # define NOKPROBE_SYMBOL(fname)	__NOKPROBE_SYMBOL(fname)
 /* Use this to forbid a kprobes attach on very low level functions */
-# define __kprobes	__attribute__((__section__(".kprobes.text")))
+# define __kprobes	__section(.kprobes.text)
 # define nokprobe_inline	__always_inline
 #else
 # define NOKPROBE_SYMBOL(fname)
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 12/14] include/linux: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (10 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 11/14] include/asm-generic: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 13/14] include/linux/compiler.h: remove unused KENTRY macro Nick Desaulniers
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Acked-by: Will Deacon <will@kernel.org>
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Josh Poimboeuf <jpoimboe@redhat.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 include/linux/cache.h       | 6 +++---
 include/linux/cpu.h         | 2 +-
 include/linux/export.h      | 2 +-
 include/linux/init_task.h   | 4 ++--
 include/linux/interrupt.h   | 5 ++---
 include/linux/sched/debug.h | 2 +-
 include/linux/srcutree.h    | 2 +-
 7 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/include/linux/cache.h b/include/linux/cache.h
index 750621e41d1c..3f4df9eef1e1 100644
--- a/include/linux/cache.h
+++ b/include/linux/cache.h
@@ -28,7 +28,7 @@
  * but may get written to during init, so can't live in .rodata (via "const").
  */
 #ifndef __ro_after_init
-#define __ro_after_init __attribute__((__section__(".data..ro_after_init")))
+#define __ro_after_init __section(.data..ro_after_init)
 #endif
 
 #ifndef ____cacheline_aligned
@@ -45,8 +45,8 @@
 
 #ifndef __cacheline_aligned
 #define __cacheline_aligned					\
-  __attribute__((__aligned__(SMP_CACHE_BYTES),			\
-		 __section__(".data..cacheline_aligned")))
+	__aligned(SMP_CACHE_BYTES)				\
+	__section(.data..cacheline_aligned)
 #endif /* __cacheline_aligned */
 
 #ifndef __cacheline_aligned_in_smp
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index fcb1386bb0d4..186bbd79d6ce 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -166,7 +166,7 @@ void cpu_startup_entry(enum cpuhp_state state);
 void cpu_idle_poll_ctrl(bool enable);
 
 /* Attach to any functions which should be considered cpuidle. */
-#define __cpuidle	__attribute__((__section__(".cpuidle.text")))
+#define __cpuidle	__section(.cpuidle.text)
 
 bool cpu_in_idle(unsigned long pc);
 
diff --git a/include/linux/export.h b/include/linux/export.h
index fd8711ed9ac4..808c1a0c2ef9 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -104,7 +104,7 @@ struct kernel_symbol {
  * discarded in the final link stage.
  */
 #define __ksym_marker(sym)	\
-	static int __ksym_marker_##sym[0] __section(".discard.ksym") __used
+	static int __ksym_marker_##sym[0] __section(.discard.ksym) __used
 
 #define __EXPORT_SYMBOL(sym, sec)				\
 	__ksym_marker(sym);					\
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index 6049baa5b8bc..50139505da34 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -51,12 +51,12 @@ extern struct cred init_cred;
 
 /* Attach to the init_task data structure for proper alignment */
 #ifdef CONFIG_ARCH_TASK_STRUCT_ON_STACK
-#define __init_task_data __attribute__((__section__(".data..init_task")))
+#define __init_task_data __section(.data..init_task)
 #else
 #define __init_task_data /**/
 #endif
 
 /* Attach to the thread_info data structure for proper alignment */
-#define __init_thread_info __attribute__((__section__(".data..init_thread_info")))
+#define __init_thread_info __section(.data..init_thread_info)
 
 #endif
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 5b8328a99b2a..29debfe4dd0f 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -741,8 +741,7 @@ extern int arch_early_irq_init(void);
 /*
  * We want to know which function is an entrypoint of a hardirq or a softirq.
  */
-#define __irq_entry		 __attribute__((__section__(".irqentry.text")))
-#define __softirq_entry  \
-	__attribute__((__section__(".softirqentry.text")))
+#define __irq_entry	__section(.irqentry.text)
+#define __softirq_entry	__section(.softirqentry.text)
 
 #endif
diff --git a/include/linux/sched/debug.h b/include/linux/sched/debug.h
index 95fb9e025247..e17b66221fdd 100644
--- a/include/linux/sched/debug.h
+++ b/include/linux/sched/debug.h
@@ -42,7 +42,7 @@ extern void proc_sched_set_task(struct task_struct *p);
 #endif
 
 /* Attach to any functions which should be ignored in wchan output. */
-#define __sched		__attribute__((__section__(".sched.text")))
+#define __sched		__section(.sched.text)
 
 /* Linker adds these: start and end of __sched functions */
 extern char __sched_text_start[], __sched_text_end[];
diff --git a/include/linux/srcutree.h b/include/linux/srcutree.h
index 9cfcc8a756ae..9de652f4e1bd 100644
--- a/include/linux/srcutree.h
+++ b/include/linux/srcutree.h
@@ -124,7 +124,7 @@ struct srcu_struct {
 # define __DEFINE_SRCU(name, is_static)					\
 	is_static struct srcu_struct name;				\
 	struct srcu_struct * const __srcu_struct_##name			\
-		__section("___srcu_struct_ptrs") = &name
+		__section(___srcu_struct_ptrs) = &name
 #else
 # define __DEFINE_SRCU(name, is_static)					\
 	static DEFINE_PER_CPU(struct srcu_data, name##_srcu_data);	\
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 13/14] include/linux/compiler.h: remove unused KENTRY macro
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (11 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 12/14] include/linux: " Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-28 22:55 ` [PATCH v3 14/14] compiler_attributes.h: add note about __section Nick Desaulniers
  2019-08-29 20:24 ` [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Miguel Ojeda
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

This macro is not used throughout the kernel. Delete it rather than
update the __section to be a fully spelled out
__attribute__((__section__())) to avoid
https://bugs.llvm.org/show_bug.cgi?id=42950.

Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 include/linux/compiler.h | 23 -----------------------
 1 file changed, 23 deletions(-)

diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 5e88e7e33abe..f01c1e527f85 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -136,29 +136,6 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
 } while (0)
 #endif
 
-/*
- * KENTRY - kernel entry point
- * This can be used to annotate symbols (functions or data) that are used
- * without their linker symbol being referenced explicitly. For example,
- * interrupt vector handlers, or functions in the kernel image that are found
- * programatically.
- *
- * Not required for symbols exported with EXPORT_SYMBOL, or initcalls. Those
- * are handled in their own way (with KEEP() in linker scripts).
- *
- * KENTRY can be avoided if the symbols in question are marked as KEEP() in the
- * linker script. For example an architecture could KEEP() its entire
- * boot/exception vector code rather than annotate each function and data.
- */
-#ifndef KENTRY
-# define KENTRY(sym)						\
-	extern typeof(sym) sym;					\
-	static const unsigned long __kentry_##sym		\
-	__used							\
-	__section("___kentry" "+" #sym )			\
-	= (unsigned long)&sym;
-#endif
-
 #ifndef RELOC_HIDE
 # define RELOC_HIDE(ptr, off)					\
   ({ unsigned long __ptr;					\
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v3 14/14] compiler_attributes.h: add note about __section
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (12 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 13/14] include/linux/compiler.h: remove unused KENTRY macro Nick Desaulniers
@ 2019-08-28 22:55 ` Nick Desaulniers
  2019-08-29 20:24 ` [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Miguel Ojeda
  14 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-28 22:55 UTC (permalink / raw)
  To: miguel.ojeda.sandonis
  Cc: sedat.dilek, will, jpoimboe, naveen.n.rao, davem, paul.burton,
	clang-built-linux, linux-kernel, Nick Desaulniers

GCC unescapes escaped string section names while Clang does not. Because
__section uses the `#` stringification operator for the section name, it
doesn't need to be escaped.

Instead, we should:
1. Prefer __section(.section_name_no_quotes).
2. Only use __attribute__((__section__(".section"))) when creating the
section name via C preprocessor (see the definition of __define_initcall
in arch/um/include/shared/init.h).

This antipattern was found with:
$ grep -e __section\(\" -e __section__\(\" -r

See the discussions in:
Link: https://bugs.llvm.org/show_bug.cgi?id=42950
Link: https://marc.info/?l=linux-netdev&m=156412960619946&w=2
Link: https://github.com/ClangBuiltLinux/linux/issues/619
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 include/linux/compiler_attributes.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h
index 6b318efd8a74..f8c008d7f616 100644
--- a/include/linux/compiler_attributes.h
+++ b/include/linux/compiler_attributes.h
@@ -225,6 +225,16 @@
 #define __pure                          __attribute__((__pure__))
 
 /*
+ *  Note: Since this macro makes use of the "stringification operator" `#`, a
+ *        quoted string literal should not be passed to it. eg.
+ *        prefer:
+ *        __section(.foo)
+ *        to:
+ *        __section(".foo")
+ *        unless the section name is dynamically built up, in which case the
+ *        verbose __attribute__((__section__(".foo" x))) should be preferred.
+ *        See also: https://bugs.llvm.org/show_bug.cgi?id=42950
+ *
  *   gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-section-function-attribute
  *   gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
  * clang: https://clang.llvm.org/docs/AttributeReference.html#section-declspec-allocate
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 10/14] x86: prefer __section from compiler_attributes.h
  2019-08-28 22:55 ` [PATCH v3 10/14] x86: prefer __section " Nick Desaulniers
@ 2019-08-29 14:14   ` Miguel Ojeda
  2019-08-29 14:22     ` Miguel Ojeda
  0 siblings, 1 reply; 20+ messages in thread
From: Miguel Ojeda @ 2019-08-29 14:14 UTC (permalink / raw)
  To: Nick Desaulniers
  Cc: Sedat Dilek, Will Deacon, Josh Poimboeuf, naveen.n.rao,
	David Miller, Paul Burton, clang-built-linux, linux-kernel

On Thu, Aug 29, 2019 at 12:56 AM Nick Desaulniers
<ndesaulniers@google.com> wrote:
>
> diff --git a/arch/x86/include/asm/iommu_table.h b/arch/x86/include/asm/iommu_table.h
> index 1fb3fd1a83c2..7d190710eb92 100644
> --- a/arch/x86/include/asm/iommu_table.h
> +++ b/arch/x86/include/asm/iommu_table.h
> @@ -50,9 +50,8 @@ struct iommu_table_entry {
>
>  #define __IOMMU_INIT(_detect, _depend, _early_init, _late_init, _finish)\
>         static const struct iommu_table_entry                           \
> -               __iommu_entry_##_detect __used                          \
> -       __attribute__ ((unused, __section__(".iommu_table"),            \
> -                       aligned((sizeof(void *)))))     \
> +               __iommu_entry_##_detect __used __section(.iommu_table)  \
> +               __aligned((sizeof(void *)))                             \
>         = {_detect, _depend, _early_init, _late_init,                   \
>            _finish ? IOMMU_FINISH_IF_DETECTED : 0}
>  /*

I see other patches that reduce unused -> to __unused, but is this
unused -> __used intended?

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 10/14] x86: prefer __section from compiler_attributes.h
  2019-08-29 14:14   ` Miguel Ojeda
@ 2019-08-29 14:22     ` Miguel Ojeda
  0 siblings, 0 replies; 20+ messages in thread
From: Miguel Ojeda @ 2019-08-29 14:22 UTC (permalink / raw)
  To: Nick Desaulniers
  Cc: Sedat Dilek, Will Deacon, Josh Poimboeuf, naveen.n.rao,
	David Miller, Paul Burton, clang-built-linux, linux-kernel

On Thu, Aug 29, 2019 at 4:14 PM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Thu, Aug 29, 2019 at 12:56 AM Nick Desaulniers
> <ndesaulniers@google.com> wrote:
> >
> > diff --git a/arch/x86/include/asm/iommu_table.h b/arch/x86/include/asm/iommu_table.h
> > index 1fb3fd1a83c2..7d190710eb92 100644
> > --- a/arch/x86/include/asm/iommu_table.h
> > +++ b/arch/x86/include/asm/iommu_table.h
> > @@ -50,9 +50,8 @@ struct iommu_table_entry {
> >
> >  #define __IOMMU_INIT(_detect, _depend, _early_init, _late_init, _finish)\
> >         static const struct iommu_table_entry                           \
> > -               __iommu_entry_##_detect __used                          \
> > -       __attribute__ ((unused, __section__(".iommu_table"),            \
> > -                       aligned((sizeof(void *)))))     \
> > +               __iommu_entry_##_detect __used __section(.iommu_table)  \
> > +               __aligned((sizeof(void *)))                             \
> >         = {_detect, _depend, _early_init, _late_init,                   \
> >            _finish ? IOMMU_FINISH_IF_DETECTED : 0}
> >  /*
>
> I see other patches that reduce unused -> to __unused, but is this

s/unused/other attrs like aligned and print/

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h
  2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
                   ` (13 preceding siblings ...)
  2019-08-28 22:55 ` [PATCH v3 14/14] compiler_attributes.h: add note about __section Nick Desaulniers
@ 2019-08-29 20:24 ` Miguel Ojeda
  2019-08-29 20:37   ` Sedat Dilek
  14 siblings, 1 reply; 20+ messages in thread
From: Miguel Ojeda @ 2019-08-29 20:24 UTC (permalink / raw)
  To: Nick Desaulniers
  Cc: Sedat Dilek, Will Deacon, Josh Poimboeuf, naveen.n.rao,
	David Miller, Paul Burton, clang-built-linux, linux-kernel

On Thu, Aug 29, 2019 at 12:55 AM Nick Desaulniers
<ndesaulniers@google.com> wrote:
>
> Changes V2 -> V3:
> * s/__attribute__((__section/__attribute__((__section__ in commit
>   messages as per Joe.

I have uploaded to -next v3 so that we get some feedback tomorrow
rather than waiting for Monday.

I added a few changes, please take a look at the commits:

  https://github.com/ojeda/linux/commits/compiler-attributes

and let me know if you agree (look for the [...] text before my
signature). Specially this one since it is the one I re-added the
unused attribute as __maybe_unused:

  https://github.com/ojeda/linux/commit/a103a32ac6a2c8bbb8fb217af92c9f6bd08e138c

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h
  2019-08-29 20:24 ` [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Miguel Ojeda
@ 2019-08-29 20:37   ` Sedat Dilek
  2019-08-29 20:47     ` Nick Desaulniers
  0 siblings, 1 reply; 20+ messages in thread
From: Sedat Dilek @ 2019-08-29 20:37 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: Nick Desaulniers, Will Deacon, Josh Poimboeuf, naveen.n.rao,
	David Miller, Paul Burton, clang-built-linux, linux-kernel

On Thu, Aug 29, 2019 at 10:24 PM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Thu, Aug 29, 2019 at 12:55 AM Nick Desaulniers
> <ndesaulniers@google.com> wrote:
> >
> > Changes V2 -> V3:
> > * s/__attribute__((__section/__attribute__((__section__ in commit
> >   messages as per Joe.
>
> I have uploaded to -next v3 so that we get some feedback tomorrow
> rather than waiting for Monday.
>
> I added a few changes, please take a look at the commits:
>
>   https://github.com/ojeda/linux/commits/compiler-attributes
>

Thanks for taking care and bringing this to linux-next asap.

- Sedat -

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h
  2019-08-29 20:37   ` Sedat Dilek
@ 2019-08-29 20:47     ` Nick Desaulniers
  0 siblings, 0 replies; 20+ messages in thread
From: Nick Desaulniers @ 2019-08-29 20:47 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: Will Deacon, Josh Poimboeuf, naveen.n.rao, David Miller,
	Paul Burton, clang-built-linux, linux-kernel, Sedat Dilek

On Thu, Aug 29, 2019 at 1:37 PM Sedat Dilek <sedat.dilek@gmail.com> wrote:
>
> On Thu, Aug 29, 2019 at 10:24 PM Miguel Ojeda
> <miguel.ojeda.sandonis@gmail.com> wrote:
> >
> > On Thu, Aug 29, 2019 at 12:55 AM Nick Desaulniers
> > <ndesaulniers@google.com> wrote:
> > >
> > > Changes V2 -> V3:
> > > * s/__attribute__((__section/__attribute__((__section__ in commit
> > >   messages as per Joe.
> >
> > I have uploaded to -next v3 so that we get some feedback tomorrow
> > rather than waiting for Monday.
> >
> > I added a few changes, please take a look at the commits:
> >
> >   https://github.com/ojeda/linux/commits/compiler-attributes
> >
>
> Thanks for taking care and bringing this to linux-next asap.

LGTM, thanks Miguel, ship it!

-- 
Thanks,
~Nick Desaulniers

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2019-08-29 20:47 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-28 22:55 [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 01/14] s390/boot: fix section name escaping Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 02/14] include/linux/compiler.h: prefer __section from compiler_attributes.h Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 03/14] parisc: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 04/14] um: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 05/14] ia64: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 06/14] arm: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 07/14] mips: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 08/14] sparc: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 09/14] powerpc: prefer __section and __printf " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 10/14] x86: prefer __section " Nick Desaulniers
2019-08-29 14:14   ` Miguel Ojeda
2019-08-29 14:22     ` Miguel Ojeda
2019-08-28 22:55 ` [PATCH v3 11/14] include/asm-generic: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 12/14] include/linux: " Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 13/14] include/linux/compiler.h: remove unused KENTRY macro Nick Desaulniers
2019-08-28 22:55 ` [PATCH v3 14/14] compiler_attributes.h: add note about __section Nick Desaulniers
2019-08-29 20:24 ` [PATCH v3 00/14] treewide: prefer __section from compiler_attributes.h Miguel Ojeda
2019-08-29 20:37   ` Sedat Dilek
2019-08-29 20:47     ` Nick Desaulniers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).