Skip to contentSkip to conversation

Stringify support commas

PATCH In review Mathieu Desnoyers 2 participants 4 messages Apr 20, 2008 – Apr 21, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Stringify support commas

#define MYDEF a, b, c

__stringify(MYDEF) should be replaced by "a, b, c", but compilation fails because the __stringify macro expects only one argument. Fix it by using variable macro arguments in __stringify and __stringify_1.

Needed in my current NMI safe iret paravirt support work so I can expand a macro containing assembly code into a string.

---
 include/linux/stringify.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
include/linux/stringify.h +2 -2
Index: linux-2.6-lttng/include/linux/stringify.h
===================================================================
@@ -6,7 +6,7 @@
  * converts to "bar".
  */
 
-#define __stringify_1(x)	#x
-#define __stringify(x)		__stringify_1(x)
+#define __stringify_1(x...)	#x
+#define __stringify(x...)	__stringify_1(x)
 
 #endif	/* !__LINUX_STRINGIFY_H */
Signature · 3 lines
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
#1 lore raw
Quoted 8 lines · Mathieu Desnoyers

#define MYDEF a, b, c

__stringify(MYDEF) should be replaced by "a, b, c", but compilation fails because the __stringify macro expects only one argument. Fix it by using variable macro arguments in __stringify and __stringify_1.

Needed in my current NMI safe iret paravirt support work so I can expand a macro containing assembly code into a string.

This is a no-no for those archs that still use -traditional. I dunno if this is a problem for you at the moment and the right fix is anyway to nuke -traditional.

Sam

#2 lore raw
Quoted 7 lines · * Sam Ravnborg ([email protected]) wrote:
Quoted 6 lines · Mathieu Desnoyers

#define MYDEF a, b, c

__stringify(MYDEF) should be replaced by "a, b, c", but compilation fails because the __stringify macro expects only one argument. Fix it by using variable macro arguments in __stringify and __stringify_1.

Quoted 8 lines
Quoted 2 lines

Needed in my current NMI safe iret paravirt support work so I can expand a macro containing assembly code into a string.

This is a no-no for those archs that still use -traditional. I dunno if this is a problem for you at the moment and the right fix is anyway to nuke -traditional.

Sam

A quick grep through arch/ gives me the following :

arch/cris/arch-v10/boot/compressed/Makefile

        @$(CC) -D__ASSEMBLY__ -traditional -c $< -o $@

arch/cris/arch-v10/boot/rescue/Makefile
asflags-y += -traditional
arch/cris/arch-v10/lib/Makefile
EXTRA_AFLAGS := -traditional
arch/h8300/boot/compressed/Makefile
EXTRA_AFLAGS := -traditional
arch/m32r/boot/compressed/Makefile
EXTRA_AFLAGS := -traditional
arch/m32r/kernel/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/fpsp040/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/ifpsp060/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/kernel/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/lib/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/math-emu/Makefile
EXTRA_AFLAGS := -traditional
arch/parisc/kernel/Makefile
AFLAGS_entry.o := -traditional
AFLAGS_pacache.o := -traditional
arch/powerpc/boot/Makefile
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
arch/s390/kernel/Makefile
EXTRA_AFLAGS := -traditional
arch/s390/lib/Makefile
EXTRA_AFLAGS := -traditional
arch/s390/math-emu/Makefile
EXTRA_AFLAGS := -traditional
arch/sh/boot/compressed/Makefile_32
EXTRA_AFLAGS := -traditional
arch/sh/boot/compressed/Makefile_64
EXTRA_AFLAGS := -traditional

Would their removal break something ?

Mathieu

Signature · 3 lines
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
#3 lore raw
Quoted 57 lines · Mathieu Desnoyers
Quoted 7 lines · * Sam Ravnborg ([email protected]) wrote:
Quoted 6 lines · Mathieu Desnoyers

#define MYDEF a, b, c

__stringify(MYDEF) should be replaced by "a, b, c", but compilation fails because the __stringify macro expects only one argument. Fix it by using variable macro arguments in __stringify and __stringify_1.

Quoted 8 lines
Quoted 2 lines

Needed in my current NMI safe iret paravirt support work so I can expand a macro containing assembly code into a string.

This is a no-no for those archs that still use -traditional. I dunno if this is a problem for you at the moment and the right fix is anyway to nuke -traditional.

Sam

A quick grep through arch/ gives me the following :

arch/cris/arch-v10/boot/compressed/Makefile

        @$(CC) -D__ASSEMBLY__ -traditional -c $< -o $@

arch/cris/arch-v10/boot/rescue/Makefile
asflags-y += -traditional
arch/cris/arch-v10/lib/Makefile
EXTRA_AFLAGS := -traditional
arch/h8300/boot/compressed/Makefile
EXTRA_AFLAGS := -traditional
arch/m32r/boot/compressed/Makefile
EXTRA_AFLAGS := -traditional
arch/m32r/kernel/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/fpsp040/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/ifpsp060/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/kernel/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/lib/Makefile
EXTRA_AFLAGS := -traditional
arch/m68k/math-emu/Makefile
EXTRA_AFLAGS := -traditional
arch/parisc/kernel/Makefile
AFLAGS_entry.o := -traditional
AFLAGS_pacache.o := -traditional
arch/powerpc/boot/Makefile
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
arch/s390/kernel/Makefile
EXTRA_AFLAGS := -traditional
arch/s390/lib/Makefile
EXTRA_AFLAGS := -traditional
arch/s390/math-emu/Makefile
EXTRA_AFLAGS := -traditional
arch/sh/boot/compressed/Makefile_32
EXTRA_AFLAGS := -traditional
arch/sh/boot/compressed/Makefile_64
EXTRA_AFLAGS := -traditional

Quoted 1 line

Would their removal break something ?

I do not recall why they were added but removing -traditional from x86 was painless.
So a simple approach would be to send a patch towards the arch maintainers. But even better to try it out with a cross toolchain first.
Any breakage should be obvious.

Sam