commit 4dd1837d7589f468ed109556513f476e7a7f9121 breaks build

Message ID alpine.LFD.2.20.1611201131300.1814@knanqh.ubzr
State New
Headers show

Commit Message

Nicolas Pitre Nov. 20, 2016, 5:03 p.m.
On Sun, 20 Nov 2016, Russell King - ARM Linux wrote:

> On Sun, Nov 20, 2016 at 01:56:16PM +0100, Tobias Jakobi wrote:

> > Hey Russell,

> > 

> > thanks for the quick reply and looking into this!

> > 

> > Added Nicolas Pitre to Cc since the ksym trim stuff came from him.

> 

> Arnd's patch "kbuild: provide include/asm/asm-prototypes.h for ARM" fixes

> it, but I think it's a mixture of fixes, and partially dependent on some

> other patches.  I don't know what the status of his patch is, but my

> feeling is that it consists of more than a single fix, and needs

> splitting.  Certainly the asm-prototypes.h is not relevant to this

> problem, but the rest of it seems to be.


Well... the problem for the current breakage was identified a while ago:

https://lkml.org/lkml/2016/2/10/686

I'm surprised that Al didn't fold my patch into his.  Now that this has 
hit mainline, CONFIG_TRIM_UNUSED_KSYMS is now broken on ARM.

And I don't see how the asm-prototypes.h is going to fix it either (if 
anything, at the moment it looks like it might be another source of 
breakage).

So I think the folowing patch should go into mainline:

----- >8
From 3225f625c116a350c54f361df491bf3e1c6d32b3 Mon Sep 17 00:00:00 2001
From: Nicolas Pitre <nicolas.pitre@linaro.org>

Date: Wed, 10 Feb 2016 17:40:04 -0500
Subject: [PATCH] ARM: don't use assembler macro arguments with EXPORT_SYMBOL()

Committ 4dd1837d75 ("arm: move exports to definitions") added
EXPORT_SYMBOL(\name) to bitops.h. Here \name is an assembler macro
argument which is not subject to preprocessor substitutions. And the
assembler doesn't handle preprocessor macros either. That has the effect
of breaking CONFIG_TRIM_UNUSED_KSYMS=y.

Signed-off-by: Nicolas Pitre <nico@linaro.org>


--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Russell King - ARM Linux Nov. 20, 2016, 5:22 p.m. | #1
On Sun, Nov 20, 2016 at 12:03:50PM -0500, Nicolas Pitre wrote:
> On Sun, 20 Nov 2016, Russell King - ARM Linux wrote:

> 

> > On Sun, Nov 20, 2016 at 01:56:16PM +0100, Tobias Jakobi wrote:

> > > Hey Russell,

> > > 

> > > thanks for the quick reply and looking into this!

> > > 

> > > Added Nicolas Pitre to Cc since the ksym trim stuff came from him.

> > 

> > Arnd's patch "kbuild: provide include/asm/asm-prototypes.h for ARM" fixes

> > it, but I think it's a mixture of fixes, and partially dependent on some

> > other patches.  I don't know what the status of his patch is, but my

> > feeling is that it consists of more than a single fix, and needs

> > splitting.  Certainly the asm-prototypes.h is not relevant to this

> > problem, but the rest of it seems to be.

> 

> Well... the problem for the current breakage was identified a while ago:

> 

> https://lkml.org/lkml/2016/2/10/686

> 

> I'm surprised that Al didn't fold my patch into his.  Now that this has 

> hit mainline, CONFIG_TRIM_UNUSED_KSYMS is now broken on ARM.

> 

> And I don't see how the asm-prototypes.h is going to fix it either (if 

> anything, at the moment it looks like it might be another source of 

> breakage).

> 

> So I think the folowing patch should go into mainline:


... which looks the same as Arnd's patch with the following changes:

- no asm-prototypes.h
- adding asm/export.h to each file using EXPORT_SYMBOL() instead of
   bitops.h
- not touching:
	arch/arm/lib/csumpartialcopy.S
	arch/arm/lib/csumpartialcopygeneric.S
	arch/arm/lib/csumpartialcopyuser.S

other than that, it's doing the same thing.

I think Arnd's changes to the csumpartial code are unnecessary, and
yours is, although larger, puts the asm/export.h include in the right
place.  So please drop yours into the patch system so we can move
forward fixing some of the problems created during the last merge
window.

> ----- >8

> >From 3225f625c116a350c54f361df491bf3e1c6d32b3 Mon Sep 17 00:00:00 2001

> From: Nicolas Pitre <nicolas.pitre@linaro.org>

> Date: Wed, 10 Feb 2016 17:40:04 -0500

> Subject: [PATCH] ARM: don't use assembler macro arguments with EXPORT_SYMBOL()

> 

> Committ 4dd1837d75 ("arm: move exports to definitions") added

> EXPORT_SYMBOL(\name) to bitops.h. Here \name is an assembler macro

> argument which is not subject to preprocessor substitutions. And the

> assembler doesn't handle preprocessor macros either. That has the effect

> of breaking CONFIG_TRIM_UNUSED_KSYMS=y.

> 

> Signed-off-by: Nicolas Pitre <nico@linaro.org>

> 

> diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h

> index df06638b32..7d807cfd8e 100644

> --- a/arch/arm/lib/bitops.h

> +++ b/arch/arm/lib/bitops.h

> @@ -1,6 +1,5 @@

>  #include <asm/assembler.h>

>  #include <asm/unwind.h>

> -#include <asm/export.h>

>  

>  #if __LINUX_ARM_ARCH__ >= 6

>  	.macro	bitop, name, instr

> @@ -26,7 +25,6 @@ UNWIND(	.fnstart	)

>  	bx	lr

>  UNWIND(	.fnend		)

>  ENDPROC(\name		)

> -EXPORT_SYMBOL(\name	)

>  	.endm

>  

>  	.macro	testop, name, instr, store

> @@ -57,7 +55,6 @@ UNWIND(	.fnstart	)

>  2:	bx	lr

>  UNWIND(	.fnend		)

>  ENDPROC(\name		)

> -EXPORT_SYMBOL(\name	)

>  	.endm

>  #else

>  	.macro	bitop, name, instr

> @@ -77,7 +74,6 @@ UNWIND(	.fnstart	)

>  	ret	lr

>  UNWIND(	.fnend		)

>  ENDPROC(\name		)

> -EXPORT_SYMBOL(\name	)

>  	.endm

>  

>  /**

> @@ -106,6 +102,5 @@ UNWIND(	.fnstart	)

>  	ret	lr

>  UNWIND(	.fnend		)

>  ENDPROC(\name		)

> -EXPORT_SYMBOL(\name	)

>  	.endm

>  #endif

> diff --git a/arch/arm/lib/changebit.S b/arch/arm/lib/changebit.S

> index f402786217..1cfdb138d2 100644

> --- a/arch/arm/lib/changebit.S

> +++ b/arch/arm/lib/changebit.S

> @@ -9,7 +9,10 @@

>   */

>  #include <linux/linkage.h>

>  #include <asm/assembler.h>

> +#include <asm/export.h>

>  #include "bitops.h"

>                  .text

>  

>  bitop	_change_bit, eor

> +

> +EXPORT_SYMBOL(_change_bit)

> diff --git a/arch/arm/lib/clearbit.S b/arch/arm/lib/clearbit.S

> index f6b75fb64d..e901ca5af0 100644

> --- a/arch/arm/lib/clearbit.S

> +++ b/arch/arm/lib/clearbit.S

> @@ -9,7 +9,10 @@

>   */

>  #include <linux/linkage.h>

>  #include <asm/assembler.h>

> +#include <asm/export.h>

>  #include "bitops.h"

>                  .text

>  

>  bitop	_clear_bit, bic

> +

> +EXPORT_SYMBOL(_clear_bit)

> diff --git a/arch/arm/lib/setbit.S b/arch/arm/lib/setbit.S

> index 618fedae4b..3c8b11240f 100644

> --- a/arch/arm/lib/setbit.S

> +++ b/arch/arm/lib/setbit.S

> @@ -9,7 +9,10 @@

>   */

>  #include <linux/linkage.h>

>  #include <asm/assembler.h>

> +#include <asm/export.h>

>  #include "bitops.h"

>  		.text

>  

>  bitop	_set_bit, orr

> +

> +EXPORT_SYMBOL(_set_bit)

> diff --git a/arch/arm/lib/testchangebit.S b/arch/arm/lib/testchangebit.S

> index 4becdc3a59..e3d19b87fb 100644

> --- a/arch/arm/lib/testchangebit.S

> +++ b/arch/arm/lib/testchangebit.S

> @@ -9,7 +9,10 @@

>   */

>  #include <linux/linkage.h>

>  #include <asm/assembler.h>

> +#include <asm/export.h>

>  #include "bitops.h"

>                  .text

>  

>  testop	_test_and_change_bit, eor, str

> +

> +EXPORT_SYMBOL(_test_and_change_bit)

> diff --git a/arch/arm/lib/testclearbit.S b/arch/arm/lib/testclearbit.S

> index 918841dcce..d247e6f70f 100644

> --- a/arch/arm/lib/testclearbit.S

> +++ b/arch/arm/lib/testclearbit.S

> @@ -9,7 +9,10 @@

>   */

>  #include <linux/linkage.h>

>  #include <asm/assembler.h>

> +#include <asm/export.h>

>  #include "bitops.h"

>                  .text

>  

>  testop	_test_and_clear_bit, bicne, strne

> +

> +EXPORT_SYMBOL(_test_and_clear_bit)

> diff --git a/arch/arm/lib/testsetbit.S b/arch/arm/lib/testsetbit.S

> index 8d1b2fe9e4..76800ff601 100644

> --- a/arch/arm/lib/testsetbit.S

> +++ b/arch/arm/lib/testsetbit.S

> @@ -9,7 +9,10 @@

>   */

>  #include <linux/linkage.h>

>  #include <asm/assembler.h>

> +#include <asm/export.h>

>  #include "bitops.h"

>                  .text

>  

>  testop	_test_and_set_bit, orreq, streq

> +

> +EXPORT_SYMBOL(_test_and_set_bit)


-- 
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnd Bergmann Nov. 22, 2016, 11:11 a.m. | #2
On Sunday, November 20, 2016 5:22:48 PM CET Russell King - ARM Linux wrote:
> - not touching:

>         arch/arm/lib/csumpartialcopy.S

>         arch/arm/lib/csumpartialcopygeneric.S

>         arch/arm/lib/csumpartialcopyuser.S

> 

> other than that, it's doing the same thing.

> 

> I think Arnd's changes to the csumpartial code are unnecessary, and

> yours is, although larger, puts the asm/export.h include in the right

> place.  So please drop yours into the patch system so we can move

> forward fixing some of the problems created during the last merge

> window.


Right, the csumpartialcopy*.S changes are no longer needed after
commit cc6acc11cad1 ("kbuild: be more careful about matching
preprocessed asm ___EXPORT_SYMBOL") solves the problem more
generally.

I've submitted a new version of my patch, now just adding the
one header file that is needed to get MODVERSIONS back working,
plus the second patch for mmiocpy/mmioset to partially revert
Al's original change.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch hide | download patch | download mbox

diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h
index df06638b32..7d807cfd8e 100644
--- a/arch/arm/lib/bitops.h
+++ b/arch/arm/lib/bitops.h
@@ -1,6 +1,5 @@ 
 #include <asm/assembler.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 #if __LINUX_ARM_ARCH__ >= 6
 	.macro	bitop, name, instr
@@ -26,7 +25,6 @@  UNWIND(	.fnstart	)
 	bx	lr
 UNWIND(	.fnend		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 
 	.macro	testop, name, instr, store
@@ -57,7 +55,6 @@  UNWIND(	.fnstart	)
 2:	bx	lr
 UNWIND(	.fnend		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 #else
 	.macro	bitop, name, instr
@@ -77,7 +74,6 @@  UNWIND(	.fnstart	)
 	ret	lr
 UNWIND(	.fnend		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 
 /**
@@ -106,6 +102,5 @@  UNWIND(	.fnstart	)
 	ret	lr
 UNWIND(	.fnend		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 #endif
diff --git a/arch/arm/lib/changebit.S b/arch/arm/lib/changebit.S
index f402786217..1cfdb138d2 100644
--- a/arch/arm/lib/changebit.S
+++ b/arch/arm/lib/changebit.S
@@ -9,7 +9,10 @@ 
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/export.h>
 #include "bitops.h"
                 .text
 
 bitop	_change_bit, eor
+
+EXPORT_SYMBOL(_change_bit)
diff --git a/arch/arm/lib/clearbit.S b/arch/arm/lib/clearbit.S
index f6b75fb64d..e901ca5af0 100644
--- a/arch/arm/lib/clearbit.S
+++ b/arch/arm/lib/clearbit.S
@@ -9,7 +9,10 @@ 
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/export.h>
 #include "bitops.h"
                 .text
 
 bitop	_clear_bit, bic
+
+EXPORT_SYMBOL(_clear_bit)
diff --git a/arch/arm/lib/setbit.S b/arch/arm/lib/setbit.S
index 618fedae4b..3c8b11240f 100644
--- a/arch/arm/lib/setbit.S
+++ b/arch/arm/lib/setbit.S
@@ -9,7 +9,10 @@ 
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/export.h>
 #include "bitops.h"
 		.text
 
 bitop	_set_bit, orr
+
+EXPORT_SYMBOL(_set_bit)
diff --git a/arch/arm/lib/testchangebit.S b/arch/arm/lib/testchangebit.S
index 4becdc3a59..e3d19b87fb 100644
--- a/arch/arm/lib/testchangebit.S
+++ b/arch/arm/lib/testchangebit.S
@@ -9,7 +9,10 @@ 
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/export.h>
 #include "bitops.h"
                 .text
 
 testop	_test_and_change_bit, eor, str
+
+EXPORT_SYMBOL(_test_and_change_bit)
diff --git a/arch/arm/lib/testclearbit.S b/arch/arm/lib/testclearbit.S
index 918841dcce..d247e6f70f 100644
--- a/arch/arm/lib/testclearbit.S
+++ b/arch/arm/lib/testclearbit.S
@@ -9,7 +9,10 @@ 
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/export.h>
 #include "bitops.h"
                 .text
 
 testop	_test_and_clear_bit, bicne, strne
+
+EXPORT_SYMBOL(_test_and_clear_bit)
diff --git a/arch/arm/lib/testsetbit.S b/arch/arm/lib/testsetbit.S
index 8d1b2fe9e4..76800ff601 100644
--- a/arch/arm/lib/testsetbit.S
+++ b/arch/arm/lib/testsetbit.S
@@ -9,7 +9,10 @@ 
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/export.h>
 #include "bitops.h"
                 .text
 
 testop	_test_and_set_bit, orreq, streq
+
+EXPORT_SYMBOL(_test_and_set_bit)