DEFINE Macro
Hi,
I am not able to understand the DEFINE macro used in arch/powerpc/kernel/asm-offsets.c
I suppose the DEFINE is present ininclude/linux/kbuild.h
where it says
#define DEFINE(sym, val) \
asm volatile("\n->" #sym " %0 " #val : : "i" (val))What does the above mean?
-Fredrick
? 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.cI 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
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
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.cQuoted 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.cis 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 generateasm-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(seecmd_offsets).