Re: [PATCH] Translate asm version of ELFNOTE macro into preprocessor macro

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2006-08-23 at 10:47 -0700, Jeremy Fitzhardinge wrote:
> 
> I remember now why I decided to use the assembler macro rather than 
> cpp.  The macro names the section after the note name (".note.NAME"), 
> and it needs to be quoted so that the name can have spaces and other 
> characters which would otherwise upset the assembler.  I couldn't work
> out a clean way to do this with the C preprocessor, since "as" doesn't
> support string concatenation like C does. 

Surprisingly string concatenation doesn't appear to be required for the
majority of punctuation, at least so far as I can tell with this test
patch (this is a xen-unstable kernel I had lying around so don't pay too
much attention to head-xen.S bit). The only problem I found is comma,
which can't be escaped.

I've no idea how reliably this works across tool chain versions etc
though. It worked for me ;-)

--- ref-linux-2.6.16.13/include/linux/elfnote.h	2006-08-23 20:08:56.000000000 +0100
+++ linux-2.6.16.13-xen/include/linux/elfnote.h	2006-08-23 20:10:00.000000000 +0100
@@ -39,7 +39,7 @@
  *      ELFNOTE(XYZCo, 12, .long, 0xdeadbeef)
  */
 #define ELFNOTE(name, type, desctype, descdata)	\
-.pushsection .note.name			;	\
+.pushsection ".note.name"		;	\
   .align 4				;	\
   .long 2f - 1f		/* namesz */	;	\
   .long 4f - 3f		/* descsz */	;	\
diff -r 58b5141c8309 linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S
--- a/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Wed Aug 23 14:43:48 2006 +0100
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S	Wed Aug 23 20:27:05 2006 +0100
@@ -199,3 +199,11 @@ ENTRY(cpu_gdt_table)
 	ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz, "no")
 #endif
 	ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz, "generic")
+
+	ELFNOTE(XYZ Co., 42, .asciz, "forty-two")
+	ELFNOTE(XYZ Co., 12, .long, 0xdeadbeef)
+	ELFNOTE(!\"£$%^\\&, 12, .long, 0xdeadbeef)
+	ELFNOTE(*\(\)-+-=<, 12, .long, 0xdeadbeef)
+	ELFNOTE(>./?\;\'#:, 12, .long, 0xdeadbeef)
+	ELFNOTE(@~, 12, .long, 0xdeadbeef)
+

$ readelf -S --segments arch/i386/kernel/head-xen.o
...
  [ 7] .note.Xen         NOTE            00000000 002260 000144 00      0   0  4
  [ 8] .rel.note.Xen     REL             00000000 003018 000010 08     15   7  4
  [ 9] .note.XYZ Co.     NOTE            00000000 0023a4 000038 00      0   0  4
  [10] .note.!"£$%^\&   NOTE            00000000 0023dc 00001c 00      0   0  4
  [11] .note.*()-+-=<    NOTE            00000000 0023f8 00001c 00      0   0  4
  [12] .note.>./?;'#:    NOTE            00000000 002414 00001c 00      0   0  4
  [13] .note.@~          NOTE            00000000 002430 000014 00      0   0  4
...

$ objdump -j .notes -s vmlinux
...
 85a8 72696300 08000000 0a000000 2a000000  ric.........*...
 85b8 58595a20 436f2e00 666f7274 792d7477  XYZ Co..forty-tw
 85c8 6f000000 08000000 04000000 0c000000  o...............
 85d8 58595a20 436f2e00 efbeadde 0a000000  XYZ Co..........
 85e8 04000000 0c000000 2122c2a3 24255e5c  ........!"..$%^\
 85f8 26000000 efbeadde 09000000 04000000  &...............
 8608 0c000000 2a28292d 2b2d3d3c 00000000  ....*()-+-=<....
 8618 efbeadde 09000000 04000000 0c000000  ................
 8628 3e2e2f3f 3b27233a 00000000 efbeadde  >./?;'#:........
 8638 03000000 04000000 0c000000 407e0000  ............@~..
 8648 efbeadde                             ....
...

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux