diff options
Diffstat (limited to 'arch/x86/include/asm/sections.h')
-rw-r--r-- | arch/x86/include/asm/sections.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/arch/x86/include/asm/sections.h b/arch/x86/include/asm/sections.h new file mode 100644 index 000000000..a6e8373a5 --- /dev/null +++ b/arch/x86/include/asm/sections.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _ASM_X86_SECTIONS_H +#define _ASM_X86_SECTIONS_H + +#define arch_is_kernel_initmem_freed arch_is_kernel_initmem_freed + +#include <asm-generic/sections.h> +#include <asm/extable.h> + +extern char __brk_base[], __brk_limit[]; +extern char __end_rodata_aligned[]; + +#if defined(CONFIG_X86_64) +extern char __end_rodata_hpage_align[]; +#endif + +extern char __end_of_kernel_reserve[]; + +extern unsigned long _brk_start, _brk_end; + +static inline bool arch_is_kernel_initmem_freed(unsigned long addr) +{ + /* + * If _brk_start has not been cleared, brk allocation is incomplete, + * and we can not make assumptions about its use. + */ + if (_brk_start) + return 0; + + /* + * After brk allocation is complete, space between _brk_end and _end + * is available for allocation. + */ + return addr >= _brk_end && addr < (unsigned long)&_end; +} + +#endif /* _ASM_X86_SECTIONS_H */ |