From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752412AbdJFU0V (ORCPT ); Fri, 6 Oct 2017 16:26:21 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:37276 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751491AbdJFU0T (ORCPT ); Fri, 6 Oct 2017 16:26:19 -0400 Date: Fri, 6 Oct 2017 13:26:15 -0700 From: "Paul E. McKenney" To: Will Deacon Cc: kbuild test robot , kbuild-all@01.org, linux-kernel@vger.kernel.org Subject: Re: [rcu:dev.2017.10.05a 32/34] include/linux/compiler.h:343:2: error: implicit declaration of function 'smp_read_barrier_depends' Reply-To: paulmck@linux.vnet.ibm.com References: <201710060738.Yjubqqja%fengguang.wu@intel.com> <20171006132139.GA11387@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171006132139.GA11387@arm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-GCONF: 00 x-cbid: 17100620-0008-0000-0000-0000028C3893 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00007851; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000235; SDB=6.00927410; UDB=6.00466656; IPR=6.00707668; BA=6.00005623; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00017426; XFM=3.00000015; UTC=2017-10-06 20:26:17 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100620-0009-0000-0000-000036ED8B11 Message-Id: <20171006202615.GJ3521@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-10-06_05:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710060286 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Oct 06, 2017 at 02:21:39PM +0100, Will Deacon wrote: > Hi Paul, > > On Fri, Oct 06, 2017 at 07:18:41AM +0800, kbuild test robot wrote: > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev.2017.10.05a > > head: 39ae2675aa536e6ef9d334fe9097d1e2c6b25fbc > > commit: 7e3675cc18bbf4d84f60bfc02ff563ae3764ad35 [32/34] locking/barriers: Kill lockless_dereference > > config: h8300-h8300h-sim_defconfig (attached as .config) > > compiler: h8300-linux-gcc (GCC) 6.2.0 > > reproduce: > > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > > chmod +x ~/bin/make.cross > > git checkout 7e3675cc18bbf4d84f60bfc02ff563ae3764ad35 > > # save the attached .config to linux build tree > > make.cross ARCH=h8300 > > > > All error/warnings (new ones prefixed by >>): > > > > In file included from include/uapi/linux/stddef.h:1:0, > > from include/linux/stddef.h:4, > > from arch/h8300/kernel/asm-offsets.c:11: > > include/linux/list.h: In function 'list_empty': > > >> include/linux/compiler.h:343:2: error: implicit declaration of function 'smp_read_barrier_depends' [-Werror=implicit-function-declaration] > > smp_read_barrier_depends(); /* Enforce dependency ordering from x */ \ > > ^ > > include/linux/compiler.h:346:22: note: in expansion of macro '__READ_ONCE' > > #define READ_ONCE(x) __READ_ONCE(x, 1) > > ^~~~~~~~~~~ > > >> include/linux/list.h:202:9: note: in expansion of macro 'READ_ONCE' > > return READ_ONCE(head->next) == head; > > ^~~~~~~~~ > > cc1: some warnings being treated as errors > > make[2]: *** [arch/h8300/kernel/asm-offsets.s] Error 1 > > make[2]: Target '__build' not remade because of errors. > > make[1]: *** [prepare0] Error 2 > > make[1]: Target 'prepare' not remade because of errors. > > make: *** [sub-make] Error 2 > > Ok, I dug into this and the problem is as follows: > > arch/h8300/kernel/asm-offsets.c includes linux/stddef.h for offsetof > linux/stddef.h includes uapi/linux/stddef.h > uapi/linux/stddef.h includes linux/compiler.h > > arch/h8300/kernel/asm-offsets.c also includes linux/sched.h for task_struct > linux/sched.h includes linux/pid.h > linux/pid.h includes linux/rculist.h > linux/rculist.h includes linux/list.h > > linux/list.h then tries to instantiate some static inline functions > that use READ_ONCE (e.g. list_empty), but nobody has included asm/barrier.h > so the build fails. > > Ideally, we'd just include in linux/compiler.h (since > lockless_dereference uses smp_read_barrier_depends in mainline today), > but it's not quite that simple because compiler.h is also used by > linux/types.h, so we don't even have a definition for "bool" at this stage! > > The best fix I could come up with involves splitting compiler.h into two > headers: one for the type annotations and definitions, and the other for > macros such as READ_ONCE. Patch below. > > Note that even with this change I'm unable to build h8300. The assembler > chokes on a bunch of unrelated errors and the compiler eventually ICEs. Can't say that I know of something that would work better. I am not in a violent hurry on this one, so I will hold off until you get me an official patch. Have a great weekend! Thanx, Paul > Will > > --->8 > > >From c3af54475c5be8789aa54823e56afcfb1b5b83da Mon Sep 17 00:00:00 2001 > From: Will Deacon > Date: Fri, 6 Oct 2017 13:50:14 +0100 > Subject: [PATCH] linux/compiler.h: Split into compiler.h and compiler-types.h > > linux/compiler.h is included indirectly by linux/types.h via > uapi/linux/types.h -> uapi/linux/posix_types.h -> linux/stddef.h > -> uapi/linux/stddef.h and is needed to provide a proper definition of > offsetof. > > Unfortunately, compiler.h requires a definition of > smp_read_barrier_depends() for defining READ_ONCE, which means that all > users of READ_ONCE need to include asm/barrier.h to avoid splats such > as: > > In file included from include/uapi/linux/stddef.h:1:0, > from include/linux/stddef.h:4, > from arch/h8300/kernel/asm-offsets.c:11: > include/linux/list.h: In function 'list_empty': > >> include/linux/compiler.h:343:2: error: implicit declaration of function 'smp_read_barrier_depends' [-Werror=implicit-function-declaration] > smp_read_barrier_depends(); /* Enforce dependency ordering from x */ \ > ^ > > A better alternative is to include asm/barrier.h in linux/compiler.h, > but this requires a type definition for "bool" on some architectures > (e.g. x86), which is defined later by linux/types.h. Type "bool" is also > used directly in linux/compiler.h, so the whole thing is pretty fragile. > > This patch splits compiler.h in two: compiler-types.h contains type > annotations, definitions and the compiler-specific parts, whereas > compiler.h #includes compiler-types.h and additionally defines macros > such as {READ,WRITE.ACCESS}_ONCE. > > uapi/linux/stddef.h is then moved over to include linux/compiler-types.h, > which fixes the build. > > Reported-by: kbuild test robot > Signed-off-by: Will Deacon > --- > include/linux/compiler-clang.h | 2 +- > include/linux/compiler-gcc.h | 2 +- > include/linux/compiler-intel.h | 2 +- > include/linux/compiler-types.h | 274 +++++++++++++++++++++++++++++++++++++++++ > include/linux/compiler.h | 265 +-------------------------------------- > include/uapi/linux/stddef.h | 2 +- > scripts/headers_install.sh | 2 +- > 7 files changed, 282 insertions(+), 267 deletions(-) > create mode 100644 include/linux/compiler-types.h > > diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h > index de179993e039..5947a3e6c0e6 100644 > --- a/include/linux/compiler-clang.h > +++ b/include/linux/compiler-clang.h > @@ -1,4 +1,4 @@ > -#ifndef __LINUX_COMPILER_H > +#ifndef __LINUX_COMPILER_TYPES_H > #error "Please don't include directly, include instead." > #endif > > diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h > index 16d41de92ee3..ce8e965646ef 100644 > --- a/include/linux/compiler-gcc.h > +++ b/include/linux/compiler-gcc.h > @@ -1,4 +1,4 @@ > -#ifndef __LINUX_COMPILER_H > +#ifndef __LINUX_COMPILER_TYPES_H > #error "Please don't include directly, include instead." > #endif > > diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h > index d4c71132d07f..e438ac89c692 100644 > --- a/include/linux/compiler-intel.h > +++ b/include/linux/compiler-intel.h > @@ -1,4 +1,4 @@ > -#ifndef __LINUX_COMPILER_H > +#ifndef __LINUX_COMPILER_TYPES_H > #error "Please don't include directly, include instead." > #endif > > diff --git a/include/linux/compiler-types.h b/include/linux/compiler-types.h > new file mode 100644 > index 000000000000..6b79a9bba9a7 > --- /dev/null > +++ b/include/linux/compiler-types.h > @@ -0,0 +1,274 @@ > +#ifndef __LINUX_COMPILER_TYPES_H > +#define __LINUX_COMPILER_TYPES_H > + > +#ifndef __ASSEMBLY__ > + > +#ifdef __CHECKER__ > +# define __user __attribute__((noderef, address_space(1))) > +# define __kernel __attribute__((address_space(0))) > +# define __safe __attribute__((safe)) > +# define __force __attribute__((force)) > +# define __nocast __attribute__((nocast)) > +# define __iomem __attribute__((noderef, address_space(2))) > +# define __must_hold(x) __attribute__((context(x,1,1))) > +# define __acquires(x) __attribute__((context(x,0,1))) > +# define __releases(x) __attribute__((context(x,1,0))) > +# define __acquire(x) __context__(x,1) > +# define __release(x) __context__(x,-1) > +# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) > +# define __percpu __attribute__((noderef, address_space(3))) > +# define __rcu __attribute__((noderef, address_space(4))) > +# define __private __attribute__((noderef)) > +extern void __chk_user_ptr(const volatile void __user *); > +extern void __chk_io_ptr(const volatile void __iomem *); > +# define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member)) > +#else /* __CHECKER__ */ > +# ifdef STRUCTLEAK_PLUGIN > +# define __user __attribute__((user)) > +# else > +# define __user > +# endif > +# define __kernel > +# define __safe > +# define __force > +# define __nocast > +# define __iomem > +# define __chk_user_ptr(x) (void)0 > +# define __chk_io_ptr(x) (void)0 > +# define __builtin_warning(x, y...) (1) > +# define __must_hold(x) > +# define __acquires(x) > +# define __releases(x) > +# define __acquire(x) (void)0 > +# define __release(x) (void)0 > +# define __cond_lock(x,c) (c) > +# define __percpu > +# define __rcu > +# define __private > +# define ACCESS_PRIVATE(p, member) ((p)->member) > +#endif /* __CHECKER__ */ > + > +/* Indirect macros required for expanded argument pasting, eg. __LINE__. */ > +#define ___PASTE(a,b) a##b > +#define __PASTE(a,b) ___PASTE(a,b) > + > +#ifdef __KERNEL__ > + > +#ifdef __GNUC__ > +#include > +#endif > + > +#if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__) > +#define notrace __attribute__((hotpatch(0,0))) > +#else > +#define notrace __attribute__((no_instrument_function)) > +#endif > + > +/* Intel compiler defines __GNUC__. So we will overwrite implementations > + * coming from above header files here > + */ > +#ifdef __INTEL_COMPILER > +# include > +#endif > + > +/* Clang compiler defines __GNUC__. So we will overwrite implementations > + * coming from above header files here > + */ > +#ifdef __clang__ > +#include > +#endif > + > +/* > + * Generic compiler-dependent macros required for kernel > + * build go below this comment. Actual compiler/compiler version > + * specific implementations come from the above header files > + */ > + > +struct ftrace_branch_data { > + const char *func; > + const char *file; > + unsigned line; > + union { > + struct { > + unsigned long correct; > + unsigned long incorrect; > + }; > + struct { > + unsigned long miss; > + unsigned long hit; > + }; > + unsigned long miss_hit[2]; > + }; > +}; > + > +struct ftrace_likely_data { > + struct ftrace_branch_data data; > + unsigned long constant; > +}; > + > +#endif /* __KERNEL__ */ > + > +#endif /* __ASSEMBLY__ */ > + > +#ifdef __KERNEL__ > +/* > + * Allow us to mark functions as 'deprecated' and have gcc emit a nice > + * warning for each use, in hopes of speeding the functions removal. > + * Usage is: > + * int __deprecated foo(void) > + */ > +#ifndef __deprecated > +# define __deprecated /* unimplemented */ > +#endif > + > +#ifdef MODULE > +#define __deprecated_for_modules __deprecated > +#else > +#define __deprecated_for_modules > +#endif > + > +#ifndef __must_check > +#define __must_check > +#endif > + > +#ifndef CONFIG_ENABLE_MUST_CHECK > +#undef __must_check > +#define __must_check > +#endif > +#ifndef CONFIG_ENABLE_WARN_DEPRECATED > +#undef __deprecated > +#undef __deprecated_for_modules > +#define __deprecated > +#define __deprecated_for_modules > +#endif > + > +#ifndef __malloc > +#define __malloc > +#endif > + > +/* > + * Allow us to avoid 'defined but not used' warnings on functions and data, > + * as well as force them to be emitted to the assembly file. > + * > + * As of gcc 3.4, static functions that are not marked with attribute((used)) > + * may be elided from the assembly file. As of gcc 3.4, static data not so > + * marked will not be elided, but this may change in a future gcc version. > + * > + * NOTE: Because distributions shipped with a backported unit-at-a-time > + * compiler in gcc 3.3, we must define __used to be __attribute__((used)) > + * for gcc >=3.3 instead of 3.4. > + * > + * In prior versions of gcc, such functions and data would be emitted, but > + * would be warned about except with attribute((unused)). > + * > + * Mark functions that are referenced only in inline assembly as __used so > + * the code is emitted even though it appears to be unreferenced. > + */ > +#ifndef __used > +# define __used /* unimplemented */ > +#endif > + > +#ifndef __maybe_unused > +# define __maybe_unused /* unimplemented */ > +#endif > + > +#ifndef __always_unused > +# define __always_unused /* unimplemented */ > +#endif > + > +#ifndef noinline > +#define noinline > +#endif > + > +/* > + * Rather then using noinline to prevent stack consumption, use > + * noinline_for_stack instead. For documentation reasons. > + */ > +#define noinline_for_stack noinline > + > +#ifndef __always_inline > +#define __always_inline inline > +#endif > + > +#endif /* __KERNEL__ */ > + > +/* > + * From the GCC manual: > + * > + * Many functions do not examine any values except their arguments, > + * and have no effects except the return value. Basically this is > + * just slightly more strict class than the `pure' attribute above, > + * since function is not allowed to read global memory. > + * > + * Note that a function that has pointer arguments and examines the > + * data pointed to must _not_ be declared `const'. Likewise, a > + * function that calls a non-`const' function usually must not be > + * `const'. It does not make sense for a `const' function to return > + * `void'. > + */ > +#ifndef __attribute_const__ > +# define __attribute_const__ /* unimplemented */ > +#endif > + > +#ifndef __designated_init > +# define __designated_init > +#endif > + > +#ifndef __latent_entropy > +# define __latent_entropy > +#endif > + > +#ifndef __randomize_layout > +# define __randomize_layout __designated_init > +#endif > + > +#ifndef __no_randomize_layout > +# define __no_randomize_layout > +#endif > + > +#ifndef randomized_struct_fields_start > +# define randomized_struct_fields_start > +# define randomized_struct_fields_end > +#endif > + > +/* > + * Tell gcc if a function is cold. The compiler will assume any path > + * directly leading to the call is unlikely. > + */ > + > +#ifndef __cold > +#define __cold > +#endif > + > +/* Simple shorthand for a section definition */ > +#ifndef __section > +# define __section(S) __attribute__ ((__section__(#S))) > +#endif > + > +#ifndef __visible > +#define __visible > +#endif > + > +#ifndef __nostackprotector > +# define __nostackprotector > +#endif > + > +/* > + * Assume alignment of return value. > + */ > +#ifndef __assume_aligned > +#define __assume_aligned(a, ...) > +#endif > + > + > +/* Are two types/vars the same type (ignoring qualifiers)? */ > +#ifndef __same_type > +# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) > +#endif > + > +/* Is this type a native word size -- useful for atomic operations */ > +#ifndef __native_word > +# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) > +#endif > + > +#endif /* __LINUX_COMPILER_TYPES_H */ > diff --git a/include/linux/compiler.h b/include/linux/compiler.h > index f260ff39f90f..4517662f128c 100644 > --- a/include/linux/compiler.h > +++ b/include/linux/compiler.h > @@ -1,111 +1,12 @@ > #ifndef __LINUX_COMPILER_H > #define __LINUX_COMPILER_H > > -#ifndef __ASSEMBLY__ > +#include > > -#ifdef __CHECKER__ > -# define __user __attribute__((noderef, address_space(1))) > -# define __kernel __attribute__((address_space(0))) > -# define __safe __attribute__((safe)) > -# define __force __attribute__((force)) > -# define __nocast __attribute__((nocast)) > -# define __iomem __attribute__((noderef, address_space(2))) > -# define __must_hold(x) __attribute__((context(x,1,1))) > -# define __acquires(x) __attribute__((context(x,0,1))) > -# define __releases(x) __attribute__((context(x,1,0))) > -# define __acquire(x) __context__(x,1) > -# define __release(x) __context__(x,-1) > -# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) > -# define __percpu __attribute__((noderef, address_space(3))) > -# define __rcu __attribute__((noderef, address_space(4))) > -# define __private __attribute__((noderef)) > -extern void __chk_user_ptr(const volatile void __user *); > -extern void __chk_io_ptr(const volatile void __iomem *); > -# define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member)) > -#else /* __CHECKER__ */ > -# ifdef STRUCTLEAK_PLUGIN > -# define __user __attribute__((user)) > -# else > -# define __user > -# endif > -# define __kernel > -# define __safe > -# define __force > -# define __nocast > -# define __iomem > -# define __chk_user_ptr(x) (void)0 > -# define __chk_io_ptr(x) (void)0 > -# define __builtin_warning(x, y...) (1) > -# define __must_hold(x) > -# define __acquires(x) > -# define __releases(x) > -# define __acquire(x) (void)0 > -# define __release(x) (void)0 > -# define __cond_lock(x,c) (c) > -# define __percpu > -# define __rcu > -# define __private > -# define ACCESS_PRIVATE(p, member) ((p)->member) > -#endif /* __CHECKER__ */ > - > -/* Indirect macros required for expanded argument pasting, eg. __LINE__. */ > -#define ___PASTE(a,b) a##b > -#define __PASTE(a,b) ___PASTE(a,b) > +#ifndef __ASSEMBLY__ > > #ifdef __KERNEL__ > > -#ifdef __GNUC__ > -#include > -#endif > - > -#if defined(CC_USING_HOTPATCH) && !defined(__CHECKER__) > -#define notrace __attribute__((hotpatch(0,0))) > -#else > -#define notrace __attribute__((no_instrument_function)) > -#endif > - > -/* Intel compiler defines __GNUC__. So we will overwrite implementations > - * coming from above header files here > - */ > -#ifdef __INTEL_COMPILER > -# include > -#endif > - > -/* Clang compiler defines __GNUC__. So we will overwrite implementations > - * coming from above header files here > - */ > -#ifdef __clang__ > -#include > -#endif > - > -/* > - * Generic compiler-dependent macros required for kernel > - * build go below this comment. Actual compiler/compiler version > - * specific implementations come from the above header files > - */ > - > -struct ftrace_branch_data { > - const char *func; > - const char *file; > - unsigned line; > - union { > - struct { > - unsigned long correct; > - unsigned long incorrect; > - }; > - struct { > - unsigned long miss; > - unsigned long hit; > - }; > - unsigned long miss_hit[2]; > - }; > -}; > - > -struct ftrace_likely_data { > - struct ftrace_branch_data data; > - unsigned long constant; > -}; > - > /* > * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code > * to disable branch tracing on a per file basis. > @@ -332,6 +233,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s > * with an explicit memory barrier or atomic instruction that provides the > * required ordering. > */ > +#include > > #define __READ_ONCE(x, check) \ > ({ \ > @@ -363,167 +265,6 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s > > #endif /* __ASSEMBLY__ */ > > -#ifdef __KERNEL__ > -/* > - * Allow us to mark functions as 'deprecated' and have gcc emit a nice > - * warning for each use, in hopes of speeding the functions removal. > - * Usage is: > - * int __deprecated foo(void) > - */ > -#ifndef __deprecated > -# define __deprecated /* unimplemented */ > -#endif > - > -#ifdef MODULE > -#define __deprecated_for_modules __deprecated > -#else > -#define __deprecated_for_modules > -#endif > - > -#ifndef __must_check > -#define __must_check > -#endif > - > -#ifndef CONFIG_ENABLE_MUST_CHECK > -#undef __must_check > -#define __must_check > -#endif > -#ifndef CONFIG_ENABLE_WARN_DEPRECATED > -#undef __deprecated > -#undef __deprecated_for_modules > -#define __deprecated > -#define __deprecated_for_modules > -#endif > - > -#ifndef __malloc > -#define __malloc > -#endif > - > -/* > - * Allow us to avoid 'defined but not used' warnings on functions and data, > - * as well as force them to be emitted to the assembly file. > - * > - * As of gcc 3.4, static functions that are not marked with attribute((used)) > - * may be elided from the assembly file. As of gcc 3.4, static data not so > - * marked will not be elided, but this may change in a future gcc version. > - * > - * NOTE: Because distributions shipped with a backported unit-at-a-time > - * compiler in gcc 3.3, we must define __used to be __attribute__((used)) > - * for gcc >=3.3 instead of 3.4. > - * > - * In prior versions of gcc, such functions and data would be emitted, but > - * would be warned about except with attribute((unused)). > - * > - * Mark functions that are referenced only in inline assembly as __used so > - * the code is emitted even though it appears to be unreferenced. > - */ > -#ifndef __used > -# define __used /* unimplemented */ > -#endif > - > -#ifndef __maybe_unused > -# define __maybe_unused /* unimplemented */ > -#endif > - > -#ifndef __always_unused > -# define __always_unused /* unimplemented */ > -#endif > - > -#ifndef noinline > -#define noinline > -#endif > - > -/* > - * Rather then using noinline to prevent stack consumption, use > - * noinline_for_stack instead. For documentation reasons. > - */ > -#define noinline_for_stack noinline > - > -#ifndef __always_inline > -#define __always_inline inline > -#endif > - > -#endif /* __KERNEL__ */ > - > -/* > - * From the GCC manual: > - * > - * Many functions do not examine any values except their arguments, > - * and have no effects except the return value. Basically this is > - * just slightly more strict class than the `pure' attribute above, > - * since function is not allowed to read global memory. > - * > - * Note that a function that has pointer arguments and examines the > - * data pointed to must _not_ be declared `const'. Likewise, a > - * function that calls a non-`const' function usually must not be > - * `const'. It does not make sense for a `const' function to return > - * `void'. > - */ > -#ifndef __attribute_const__ > -# define __attribute_const__ /* unimplemented */ > -#endif > - > -#ifndef __designated_init > -# define __designated_init > -#endif > - > -#ifndef __latent_entropy > -# define __latent_entropy > -#endif > - > -#ifndef __randomize_layout > -# define __randomize_layout __designated_init > -#endif > - > -#ifndef __no_randomize_layout > -# define __no_randomize_layout > -#endif > - > -#ifndef randomized_struct_fields_start > -# define randomized_struct_fields_start > -# define randomized_struct_fields_end > -#endif > - > -/* > - * Tell gcc if a function is cold. The compiler will assume any path > - * directly leading to the call is unlikely. > - */ > - > -#ifndef __cold > -#define __cold > -#endif > - > -/* Simple shorthand for a section definition */ > -#ifndef __section > -# define __section(S) __attribute__ ((__section__(#S))) > -#endif > - > -#ifndef __visible > -#define __visible > -#endif > - > -#ifndef __nostackprotector > -# define __nostackprotector > -#endif > - > -/* > - * Assume alignment of return value. > - */ > -#ifndef __assume_aligned > -#define __assume_aligned(a, ...) > -#endif > - > - > -/* Are two types/vars the same type (ignoring qualifiers)? */ > -#ifndef __same_type > -# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) > -#endif > - > -/* Is this type a native word size -- useful for atomic operations */ > -#ifndef __native_word > -# define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) > -#endif > - > /* Compile time object size, -1 for unknown */ > #ifndef __compiletime_object_size > # define __compiletime_object_size(obj) -1 > diff --git a/include/uapi/linux/stddef.h b/include/uapi/linux/stddef.h > index 621fa8ac4425..1ec6a7867c46 100644 > --- a/include/uapi/linux/stddef.h > +++ b/include/uapi/linux/stddef.h > @@ -1,4 +1,4 @@ > -#include > +#include > > #ifndef __always_inline > #define __always_inline inline > diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh > index fdebd66f8fc1..bbb7f3d35289 100755 > --- a/scripts/headers_install.sh > +++ b/scripts/headers_install.sh > @@ -33,7 +33,7 @@ do > sed -r \ > -e 's/([ \t(])(__user|__force|__iomem)[ \t]/\1/g' \ > -e 's/__attribute_const__([ \t]|$)/\1/g' \ > - -e 's@^#include @@' \ > + -e 's@^#include @@' \ > -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ > -e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \ > -e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \ > -- > 2.1.4 >