Skip to contentSkip to conversation

DEFINE Macro

DISCUSSION Fredrick 3 participants 4 messages Jan 6, 2012

lore
Share & tools
lore

Fredrick

author
#0 lore raw

Hi,

I am not able to understand the DEFINE macro used in arch/powerpc/kernel/asm-offsets.c

I suppose the DEFINE is present in
include/linux/kbuild.h
where it says

#define DEFINE(sym, val) \
         asm volatile("\n->" #sym " %0 " #val : : "i" (val))

What does the above mean?

-Fredrick

#1 lore raw

? 2012?1?6? ??11:32?Fredrick <[email protected]>???

Quoted 14 lines

Hi,

I am not able to understand the DEFINE macro used in arch/powerpc/kernel/asm-offsets.c

I suppose the DEFINE is present in
include/linux/kbuild.h
where it says

#define DEFINE(sym, val) \
        asm volatile("\n->" #sym " %0 " #val : : "i" (val))

What does the above mean?

Quoted 8 lines

-Fredrick

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies at kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Oh, This is the inline ASM in gcc, pls refer to
http://ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

Signature · 10 lines
=======================================
Pixelworks
Room 301-303 No. 88,Lane 887 Zuchongzhi Road, Zhangjiang Hi-tech Park,
Shanghai 201203, China
Best Regards,
Jun zhao/??
+++++++++++++++++++++++++++++++++++++++
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120106/41389c9d/attachment.html 
#2 lore raw
In reply to Fredrick
Quoted 5 lines · Fredrick

Hi,

I am not able to understand the DEFINE macro used in arch/powerpc/kernel/asm-offsets.c

Quoted 7 lines

I suppose the DEFINE is present in
include/linux/kbuild.h
where it says

#define DEFINE(sym, val) \
         asm volatile("\n->" #sym " %0 " #val : : "i" (val))

What does the above mean?

This is just a trick to get the offsets of members into a generated header file asm-offsets.h. The inline assembly does NOT contain valid instructions, and in fact, asm-offsets.c is never actually assembled into a program. Instead, the build process generates the assembly language output asm-offsets.s, and processes it with a sed script to generate asm-offsets.h.

For example (assume offsetof(struct thread_struct, regs) is 30):

	DEFINE(PT_REGS, offsetof(struct thread_struct, regs));

will generate within the assembly language output:

	->PT_REGS $30 offsetof(struct thread_struct, regs)

A sed script, executed on the assembly language output will generate a line in include/generated/asm-offsets.h:

	#define PT_REGS 30 /* offsetof(struct thread_struct, regs) */

Thats about it. You can find the exact sed script used, and the make magic involved in Kbuild (see cmd_offsets).

Signature · 1 line
                                    joshc
author
#3 lore raw

Nice! Thanks for the explanation Josh.

-Fredrick

Quoted 37 lines · Josh Cartwright
Quoted 5 lines · Fredrick

Hi,

I am not able to understand the DEFINE macro used in arch/powerpc/kernel/asm-offsets.c

Quoted 7 lines

I suppose the DEFINE is present in
include/linux/kbuild.h
where it says

#define DEFINE(sym, val) \
          asm volatile("\n->" #sym " %0 " #val : : "i" (val))

What does the above mean?

This is just a trick to get the offsets of members into a generated header file asm-offsets.h. The inline assembly does NOT contain valid instructions, and in fact, asm-offsets.c is never actually assembled into a program. Instead, the build process generates the assembly language output asm-offsets.s, and processes it with a sed script to generate asm-offsets.h.

For example (assume offsetof(struct thread_struct, regs) is 30):

	DEFINE(PT_REGS, offsetof(struct thread_struct, regs));

will generate within the assembly language output:

	->PT_REGS $30 offsetof(struct thread_struct, regs)

A sed script, executed on the assembly language output will generate a line in include/generated/asm-offsets.h:

	#define PT_REGS 30 /* offsetof(struct thread_struct, regs) */

Thats about it. You can find the exact sed script used, and the make magic involved in Kbuild (see cmd_offsets).