X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fasm-x86%2Flinkage.h;h=64e444f8e85b2d9fccaf50cc78ceaa1da0654877;hb=13c48c490208d9e70d8d66d56f96c5054db69af7;hp=d605eeba0f700292f1373d36167c97e79a4ae006;hpb=54a015104136974262afa4b8ddd943ea70dec8a2;p=linux-2.6 diff --git a/include/asm-x86/linkage.h b/include/asm-x86/linkage.h index d605eeba0f..64e444f8e8 100644 --- a/include/asm-x86/linkage.h +++ b/include/asm-x86/linkage.h @@ -1,6 +1,9 @@ #ifndef __ASM_LINKAGE_H #define __ASM_LINKAGE_H +#undef notrace +#define notrace __attribute__((no_instrument_function)) + #ifdef CONFIG_X86_64 #define __ALIGN .p2align 4,,15 #define __ALIGN_STR ".p2align 4,,15" @@ -14,6 +17,17 @@ */ #define asmregparm __attribute__((regparm(3))) +/* + * Make sure the compiler doesn't do anything stupid with the + * arguments on the stack - they are owned by the *caller*, not + * the callee. This just fools gcc into not spilling into them, + * and keeps it from doing tailcall recursion and/or using the + * stack slots for temporaries, since they are live and "used" + * all the way to the end of the function. + * + * NOTE! On x86-64, all the arguments are in registers, so this + * only matters on a 32-bit kernel. + */ #define asmlinkage_protect(n, ret, args...) \ __asmlinkage_protect##n(ret, ##args) #define __asmlinkage_protect_n(ret, args...) \