GNU Linux-libre 5.4.241-gnu1
[releases.git] / arch / Kconfig
1 # SPDX-License-Identifier: GPL-2.0
2 #
3 # General architecture dependent options
4 #
5
6 #
7 # Note: arch/$(SRCARCH)/Kconfig needs to be included first so that it can
8 # override the default values in this file.
9 #
10 source "arch/$(SRCARCH)/Kconfig"
11
12 menu "General architecture-dependent options"
13
14 config CRASH_CORE
15         bool
16
17 config KEXEC_CORE
18         select CRASH_CORE
19         bool
20
21 config KEXEC_ELF
22         bool
23
24 config HAVE_IMA_KEXEC
25         bool
26
27 config HOTPLUG_SMT
28         bool
29
30 config OPROFILE
31         tristate "OProfile system profiling"
32         depends on PROFILING
33         depends on HAVE_OPROFILE
34         select RING_BUFFER
35         select RING_BUFFER_ALLOW_SWAP
36         help
37           OProfile is a profiling system capable of profiling the
38           whole system, include the kernel, kernel modules, libraries,
39           and applications.
40
41           If unsure, say N.
42
43 config OPROFILE_EVENT_MULTIPLEX
44         bool "OProfile multiplexing support (EXPERIMENTAL)"
45         default n
46         depends on OPROFILE && X86
47         help
48           The number of hardware counters is limited. The multiplexing
49           feature enables OProfile to gather more events than counters
50           are provided by the hardware. This is realized by switching
51           between events at a user specified time interval.
52
53           If unsure, say N.
54
55 config HAVE_OPROFILE
56         bool
57
58 config OPROFILE_NMI_TIMER
59         def_bool y
60         depends on PERF_EVENTS && HAVE_PERF_EVENTS_NMI && !PPC64
61
62 config KPROBES
63         bool "Kprobes"
64         depends on MODULES
65         depends on HAVE_KPROBES
66         select KALLSYMS
67         help
68           Kprobes allows you to trap at almost any kernel address and
69           execute a callback function.  register_kprobe() establishes
70           a probepoint and specifies the callback.  Kprobes is useful
71           for kernel debugging, non-intrusive instrumentation and testing.
72           If in doubt, say "N".
73
74 config JUMP_LABEL
75        bool "Optimize very unlikely/likely branches"
76        depends on HAVE_ARCH_JUMP_LABEL
77        depends on CC_HAS_ASM_GOTO
78        help
79          This option enables a transparent branch optimization that
80          makes certain almost-always-true or almost-always-false branch
81          conditions even cheaper to execute within the kernel.
82
83          Certain performance-sensitive kernel code, such as trace points,
84          scheduler functionality, networking code and KVM have such
85          branches and include support for this optimization technique.
86
87          If it is detected that the compiler has support for "asm goto",
88          the kernel will compile such branches with just a nop
89          instruction. When the condition flag is toggled to true, the
90          nop will be converted to a jump instruction to execute the
91          conditional block of instructions.
92
93          This technique lowers overhead and stress on the branch prediction
94          of the processor and generally makes the kernel faster. The update
95          of the condition is slower, but those are always very rare.
96
97          ( On 32-bit x86, the necessary options added to the compiler
98            flags may increase the size of the kernel slightly. )
99
100 config STATIC_KEYS_SELFTEST
101         bool "Static key selftest"
102         depends on JUMP_LABEL
103         help
104           Boot time self-test of the branch patching code.
105
106 config OPTPROBES
107         def_bool y
108         depends on KPROBES && HAVE_OPTPROBES
109         select TASKS_RCU if PREEMPTION
110
111 config KPROBES_ON_FTRACE
112         def_bool y
113         depends on KPROBES && HAVE_KPROBES_ON_FTRACE
114         depends on DYNAMIC_FTRACE_WITH_REGS
115         help
116          If function tracer is enabled and the arch supports full
117          passing of pt_regs to function tracing, then kprobes can
118          optimize on top of function tracing.
119
120 config UPROBES
121         def_bool n
122         depends on ARCH_SUPPORTS_UPROBES
123         help
124           Uprobes is the user-space counterpart to kprobes: they
125           enable instrumentation applications (such as 'perf probe')
126           to establish unintrusive probes in user-space binaries and
127           libraries, by executing handler functions when the probes
128           are hit by user-space applications.
129
130           ( These probes come in the form of single-byte breakpoints,
131             managed by the kernel and kept transparent to the probed
132             application. )
133
134 config HAVE_64BIT_ALIGNED_ACCESS
135         def_bool 64BIT && !HAVE_EFFICIENT_UNALIGNED_ACCESS
136         help
137           Some architectures require 64 bit accesses to be 64 bit
138           aligned, which also requires structs containing 64 bit values
139           to be 64 bit aligned too. This includes some 32 bit
140           architectures which can do 64 bit accesses, as well as 64 bit
141           architectures without unaligned access.
142
143           This symbol should be selected by an architecture if 64 bit
144           accesses are required to be 64 bit aligned in this way even
145           though it is not a 64 bit architecture.
146
147           See Documentation/unaligned-memory-access.txt for more
148           information on the topic of unaligned memory accesses.
149
150 config HAVE_EFFICIENT_UNALIGNED_ACCESS
151         bool
152         help
153           Some architectures are unable to perform unaligned accesses
154           without the use of get_unaligned/put_unaligned. Others are
155           unable to perform such accesses efficiently (e.g. trap on
156           unaligned access and require fixing it up in the exception
157           handler.)
158
159           This symbol should be selected by an architecture if it can
160           perform unaligned accesses efficiently to allow different
161           code paths to be selected for these cases. Some network
162           drivers, for example, could opt to not fix up alignment
163           problems with received packets if doing so would not help
164           much.
165
166           See Documentation/unaligned-memory-access.txt for more
167           information on the topic of unaligned memory accesses.
168
169 config ARCH_USE_BUILTIN_BSWAP
170        bool
171        help
172          Modern versions of GCC (since 4.4) have builtin functions
173          for handling byte-swapping. Using these, instead of the old
174          inline assembler that the architecture code provides in the
175          __arch_bswapXX() macros, allows the compiler to see what's
176          happening and offers more opportunity for optimisation. In
177          particular, the compiler will be able to combine the byteswap
178          with a nearby load or store and use load-and-swap or
179          store-and-swap instructions if the architecture has them. It
180          should almost *never* result in code which is worse than the
181          hand-coded assembler in <asm/swab.h>.  But just in case it
182          does, the use of the builtins is optional.
183
184          Any architecture with load-and-swap or store-and-swap
185          instructions should set this. And it shouldn't hurt to set it
186          on architectures that don't have such instructions.
187
188 config KRETPROBES
189         def_bool y
190         depends on KPROBES && HAVE_KRETPROBES
191
192 config USER_RETURN_NOTIFIER
193         bool
194         depends on HAVE_USER_RETURN_NOTIFIER
195         help
196           Provide a kernel-internal notification when a cpu is about to
197           switch to user mode.
198
199 config HAVE_IOREMAP_PROT
200         bool
201
202 config HAVE_KPROBES
203         bool
204
205 config HAVE_KRETPROBES
206         bool
207
208 config HAVE_OPTPROBES
209         bool
210
211 config HAVE_KPROBES_ON_FTRACE
212         bool
213
214 config HAVE_FUNCTION_ERROR_INJECTION
215         bool
216
217 config HAVE_NMI
218         bool
219
220 #
221 # An arch should select this if it provides all these things:
222 #
223 #       task_pt_regs()          in asm/processor.h or asm/ptrace.h
224 #       arch_has_single_step()  if there is hardware single-step support
225 #       arch_has_block_step()   if there is hardware block-step support
226 #       asm/syscall.h           supplying asm-generic/syscall.h interface
227 #       linux/regset.h          user_regset interfaces
228 #       CORE_DUMP_USE_REGSET    #define'd in linux/elf.h
229 #       TIF_SYSCALL_TRACE       calls tracehook_report_syscall_{entry,exit}
230 #       TIF_NOTIFY_RESUME       calls tracehook_notify_resume()
231 #       signal delivery         calls tracehook_signal_handler()
232 #
233 config HAVE_ARCH_TRACEHOOK
234         bool
235
236 config HAVE_DMA_CONTIGUOUS
237         bool
238
239 config GENERIC_SMP_IDLE_THREAD
240        bool
241
242 config GENERIC_IDLE_POLL_SETUP
243        bool
244
245 config ARCH_HAS_FORTIFY_SOURCE
246         bool
247         help
248           An architecture should select this when it can successfully
249           build and run with CONFIG_FORTIFY_SOURCE.
250
251 #
252 # Select if the arch provides a historic keepinit alias for the retain_initrd
253 # command line option
254 #
255 config ARCH_HAS_KEEPINITRD
256         bool
257
258 # Select if arch has all set_memory_ro/rw/x/nx() functions in asm/cacheflush.h
259 config ARCH_HAS_SET_MEMORY
260         bool
261
262 # Select if arch has all set_direct_map_invalid/default() functions
263 config ARCH_HAS_SET_DIRECT_MAP
264         bool
265
266 #
267 # Select if arch has an uncached kernel segment and provides the
268 # uncached_kernel_address / cached_kernel_address symbols to use it
269 #
270 config ARCH_HAS_UNCACHED_SEGMENT
271         select ARCH_HAS_DMA_PREP_COHERENT
272         bool
273
274 # Select if arch init_task must go in the __init_task_data section
275 config ARCH_TASK_STRUCT_ON_STACK
276        bool
277
278 # Select if arch has its private alloc_task_struct() function
279 config ARCH_TASK_STRUCT_ALLOCATOR
280         bool
281
282 config HAVE_ARCH_THREAD_STRUCT_WHITELIST
283         bool
284         depends on !ARCH_TASK_STRUCT_ALLOCATOR
285         help
286           An architecture should select this to provide hardened usercopy
287           knowledge about what region of the thread_struct should be
288           whitelisted for copying to userspace. Normally this is only the
289           FPU registers. Specifically, arch_thread_struct_whitelist()
290           should be implemented. Without this, the entire thread_struct
291           field in task_struct will be left whitelisted.
292
293 # Select if arch has its private alloc_thread_stack() function
294 config ARCH_THREAD_STACK_ALLOCATOR
295         bool
296
297 # Select if arch wants to size task_struct dynamically via arch_task_struct_size:
298 config ARCH_WANTS_DYNAMIC_TASK_STRUCT
299         bool
300
301 config ARCH_32BIT_OFF_T
302         bool
303         depends on !64BIT
304         help
305           All new 32-bit architectures should have 64-bit off_t type on
306           userspace side which corresponds to the loff_t kernel type. This
307           is the requirement for modern ABIs. Some existing architectures
308           still support 32-bit off_t. This option is enabled for all such
309           architectures explicitly.
310
311 config HAVE_ASM_MODVERSIONS
312         bool
313         help
314           This symbol should be selected by an architecure if it provides
315           <asm/asm-prototypes.h> to support the module versioning for symbols
316           exported from assembly code.
317
318 config HAVE_REGS_AND_STACK_ACCESS_API
319         bool
320         help
321           This symbol should be selected by an architecure if it supports
322           the API needed to access registers and stack entries from pt_regs,
323           declared in asm/ptrace.h
324           For example the kprobes-based event tracer needs this API.
325
326 config HAVE_RSEQ
327         bool
328         depends on HAVE_REGS_AND_STACK_ACCESS_API
329         help
330           This symbol should be selected by an architecture if it
331           supports an implementation of restartable sequences.
332
333 config HAVE_FUNCTION_ARG_ACCESS_API
334         bool
335         help
336           This symbol should be selected by an architecure if it supports
337           the API needed to access function arguments from pt_regs,
338           declared in asm/ptrace.h
339
340 config HAVE_CLK
341         bool
342         help
343           The <linux/clk.h> calls support software clock gating and
344           thus are a key power management tool on many systems.
345
346 config HAVE_HW_BREAKPOINT
347         bool
348         depends on PERF_EVENTS
349
350 config HAVE_MIXED_BREAKPOINTS_REGS
351         bool
352         depends on HAVE_HW_BREAKPOINT
353         help
354           Depending on the arch implementation of hardware breakpoints,
355           some of them have separate registers for data and instruction
356           breakpoints addresses, others have mixed registers to store
357           them but define the access type in a control register.
358           Select this option if your arch implements breakpoints under the
359           latter fashion.
360
361 config HAVE_USER_RETURN_NOTIFIER
362         bool
363
364 config HAVE_PERF_EVENTS_NMI
365         bool
366         help
367           System hardware can generate an NMI using the perf event
368           subsystem.  Also has support for calculating CPU cycle events
369           to determine how many clock cycles in a given period.
370
371 config HAVE_HARDLOCKUP_DETECTOR_PERF
372         bool
373         depends on HAVE_PERF_EVENTS_NMI
374         help
375           The arch chooses to use the generic perf-NMI-based hardlockup
376           detector. Must define HAVE_PERF_EVENTS_NMI.
377
378 config HAVE_NMI_WATCHDOG
379         depends on HAVE_NMI
380         bool
381         help
382           The arch provides a low level NMI watchdog. It provides
383           asm/nmi.h, and defines its own arch_touch_nmi_watchdog().
384
385 config HAVE_HARDLOCKUP_DETECTOR_ARCH
386         bool
387         select HAVE_NMI_WATCHDOG
388         help
389           The arch chooses to provide its own hardlockup detector, which is
390           a superset of the HAVE_NMI_WATCHDOG. It also conforms to config
391           interfaces and parameters provided by hardlockup detector subsystem.
392
393 config HAVE_PERF_REGS
394         bool
395         help
396           Support selective register dumps for perf events. This includes
397           bit-mapping of each registers and a unique architecture id.
398
399 config HAVE_PERF_USER_STACK_DUMP
400         bool
401         help
402           Support user stack dumps for perf event samples. This needs
403           access to the user stack pointer which is not unified across
404           architectures.
405
406 config HAVE_ARCH_JUMP_LABEL
407         bool
408
409 config HAVE_ARCH_JUMP_LABEL_RELATIVE
410         bool
411
412 config HAVE_RCU_TABLE_FREE
413         bool
414
415 config HAVE_MMU_GATHER_PAGE_SIZE
416         bool
417
418 config MMU_GATHER_NO_RANGE
419         bool
420
421 config HAVE_MMU_GATHER_NO_GATHER
422         bool
423
424 config ARCH_WANT_IRQS_OFF_ACTIVATE_MM
425         bool
426         help
427           Temporary select until all architectures can be converted to have
428           irqs disabled over activate_mm. Architectures that do IPI based TLB
429           shootdowns should enable this.
430
431 config ARCH_HAVE_NMI_SAFE_CMPXCHG
432         bool
433
434 config HAVE_ALIGNED_STRUCT_PAGE
435         bool
436         help
437           This makes sure that struct pages are double word aligned and that
438           e.g. the SLUB allocator can perform double word atomic operations
439           on a struct page for better performance. However selecting this
440           might increase the size of a struct page by a word.
441
442 config HAVE_CMPXCHG_LOCAL
443         bool
444
445 config HAVE_CMPXCHG_DOUBLE
446         bool
447
448 config ARCH_WEAK_RELEASE_ACQUIRE
449         bool
450
451 config ARCH_WANT_IPC_PARSE_VERSION
452         bool
453
454 config ARCH_WANT_COMPAT_IPC_PARSE_VERSION
455         bool
456
457 config ARCH_WANT_OLD_COMPAT_IPC
458         select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
459         bool
460
461 config HAVE_ARCH_SECCOMP_FILTER
462         bool
463         help
464           An arch should select this symbol if it provides all of these things:
465           - syscall_get_arch()
466           - syscall_get_arguments()
467           - syscall_rollback()
468           - syscall_set_return_value()
469           - SIGSYS siginfo_t support
470           - secure_computing is called from a ptrace_event()-safe context
471           - secure_computing return value is checked and a return value of -1
472             results in the system call being skipped immediately.
473           - seccomp syscall wired up
474
475 config SECCOMP_FILTER
476         def_bool y
477         depends on HAVE_ARCH_SECCOMP_FILTER && SECCOMP && NET
478         help
479           Enable tasks to build secure computing environments defined
480           in terms of Berkeley Packet Filter programs which implement
481           task-defined system call filtering polices.
482
483           See Documentation/userspace-api/seccomp_filter.rst for details.
484
485 config HAVE_ARCH_STACKLEAK
486         bool
487         help
488           An architecture should select this if it has the code which
489           fills the used part of the kernel stack with the STACKLEAK_POISON
490           value before returning from system calls.
491
492 config HAVE_STACKPROTECTOR
493         bool
494         help
495           An arch should select this symbol if:
496           - it has implemented a stack canary (e.g. __stack_chk_guard)
497
498 config CC_HAS_STACKPROTECTOR_NONE
499         def_bool $(cc-option,-fno-stack-protector)
500
501 config STACKPROTECTOR
502         bool "Stack Protector buffer overflow detection"
503         depends on HAVE_STACKPROTECTOR
504         depends on $(cc-option,-fstack-protector)
505         default y
506         help
507           This option turns on the "stack-protector" GCC feature. This
508           feature puts, at the beginning of functions, a canary value on
509           the stack just before the return address, and validates
510           the value just before actually returning.  Stack based buffer
511           overflows (that need to overwrite this return address) now also
512           overwrite the canary, which gets detected and the attack is then
513           neutralized via a kernel panic.
514
515           Functions will have the stack-protector canary logic added if they
516           have an 8-byte or larger character array on the stack.
517
518           This feature requires gcc version 4.2 or above, or a distribution
519           gcc with the feature backported ("-fstack-protector").
520
521           On an x86 "defconfig" build, this feature adds canary checks to
522           about 3% of all kernel functions, which increases kernel code size
523           by about 0.3%.
524
525 config STACKPROTECTOR_STRONG
526         bool "Strong Stack Protector"
527         depends on STACKPROTECTOR
528         depends on $(cc-option,-fstack-protector-strong)
529         default y
530         help
531           Functions will have the stack-protector canary logic added in any
532           of the following conditions:
533
534           - local variable's address used as part of the right hand side of an
535             assignment or function argument
536           - local variable is an array (or union containing an array),
537             regardless of array type or length
538           - uses register local variables
539
540           This feature requires gcc version 4.9 or above, or a distribution
541           gcc with the feature backported ("-fstack-protector-strong").
542
543           On an x86 "defconfig" build, this feature adds canary checks to
544           about 20% of all kernel functions, which increases the kernel code
545           size by about 2%.
546
547 config HAVE_ARCH_WITHIN_STACK_FRAMES
548         bool
549         help
550           An architecture should select this if it can walk the kernel stack
551           frames to determine if an object is part of either the arguments
552           or local variables (i.e. that it excludes saved return addresses,
553           and similar) by implementing an inline arch_within_stack_frames(),
554           which is used by CONFIG_HARDENED_USERCOPY.
555
556 config HAVE_CONTEXT_TRACKING
557         bool
558         help
559           Provide kernel/user boundaries probes necessary for subsystems
560           that need it, such as userspace RCU extended quiescent state.
561           Syscalls need to be wrapped inside user_exit()-user_enter() through
562           the slow path using TIF_NOHZ flag. Exceptions handlers must be
563           wrapped as well. Irqs are already protected inside
564           rcu_irq_enter/rcu_irq_exit() but preemption or signal handling on
565           irq exit still need to be protected.
566
567 config HAVE_VIRT_CPU_ACCOUNTING
568         bool
569
570 config ARCH_HAS_SCALED_CPUTIME
571         bool
572
573 config HAVE_VIRT_CPU_ACCOUNTING_GEN
574         bool
575         default y if 64BIT
576         help
577           With VIRT_CPU_ACCOUNTING_GEN, cputime_t becomes 64-bit.
578           Before enabling this option, arch code must be audited
579           to ensure there are no races in concurrent read/write of
580           cputime_t. For example, reading/writing 64-bit cputime_t on
581           some 32-bit arches may require multiple accesses, so proper
582           locking is needed to protect against concurrent accesses.
583
584
585 config HAVE_IRQ_TIME_ACCOUNTING
586         bool
587         help
588           Archs need to ensure they use a high enough resolution clock to
589           support irq time accounting and then call enable_sched_clock_irqtime().
590
591 config HAVE_MOVE_PMD
592         bool
593         help
594           Archs that select this are able to move page tables at the PMD level.
595
596 config HAVE_ARCH_TRANSPARENT_HUGEPAGE
597         bool
598
599 config HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
600         bool
601
602 config HAVE_ARCH_HUGE_VMAP
603         bool
604
605 config ARCH_WANT_HUGE_PMD_SHARE
606         bool
607
608 config HAVE_ARCH_SOFT_DIRTY
609         bool
610
611 config HAVE_MOD_ARCH_SPECIFIC
612         bool
613         help
614           The arch uses struct mod_arch_specific to store data.  Many arches
615           just need a simple module loader without arch specific data - those
616           should not enable this.
617
618 config MODULES_USE_ELF_RELA
619         bool
620         help
621           Modules only use ELF RELA relocations.  Modules with ELF REL
622           relocations will give an error.
623
624 config MODULES_USE_ELF_REL
625         bool
626         help
627           Modules only use ELF REL relocations.  Modules with ELF RELA
628           relocations will give an error.
629
630 config HAVE_IRQ_EXIT_ON_IRQ_STACK
631         bool
632         help
633           Architecture doesn't only execute the irq handler on the irq stack
634           but also irq_exit(). This way we can process softirqs on this irq
635           stack instead of switching to a new one when we call __do_softirq()
636           in the end of an hardirq.
637           This spares a stack switch and improves cache usage on softirq
638           processing.
639
640 config PGTABLE_LEVELS
641         int
642         default 2
643
644 config ARCH_HAS_ELF_RANDOMIZE
645         bool
646         help
647           An architecture supports choosing randomized locations for
648           stack, mmap, brk, and ET_DYN. Defined functions:
649           - arch_mmap_rnd()
650           - arch_randomize_brk()
651
652 config HAVE_ARCH_MMAP_RND_BITS
653         bool
654         help
655           An arch should select this symbol if it supports setting a variable
656           number of bits for use in establishing the base address for mmap
657           allocations, has MMU enabled and provides values for both:
658           - ARCH_MMAP_RND_BITS_MIN
659           - ARCH_MMAP_RND_BITS_MAX
660
661 config HAVE_EXIT_THREAD
662         bool
663         help
664           An architecture implements exit_thread.
665
666 config ARCH_MMAP_RND_BITS_MIN
667         int
668
669 config ARCH_MMAP_RND_BITS_MAX
670         int
671
672 config ARCH_MMAP_RND_BITS_DEFAULT
673         int
674
675 config ARCH_MMAP_RND_BITS
676         int "Number of bits to use for ASLR of mmap base address" if EXPERT
677         range ARCH_MMAP_RND_BITS_MIN ARCH_MMAP_RND_BITS_MAX
678         default ARCH_MMAP_RND_BITS_DEFAULT if ARCH_MMAP_RND_BITS_DEFAULT
679         default ARCH_MMAP_RND_BITS_MIN
680         depends on HAVE_ARCH_MMAP_RND_BITS
681         help
682           This value can be used to select the number of bits to use to
683           determine the random offset to the base address of vma regions
684           resulting from mmap allocations. This value will be bounded
685           by the architecture's minimum and maximum supported values.
686
687           This value can be changed after boot using the
688           /proc/sys/vm/mmap_rnd_bits tunable
689
690 config HAVE_ARCH_MMAP_RND_COMPAT_BITS
691         bool
692         help
693           An arch should select this symbol if it supports running applications
694           in compatibility mode, supports setting a variable number of bits for
695           use in establishing the base address for mmap allocations, has MMU
696           enabled and provides values for both:
697           - ARCH_MMAP_RND_COMPAT_BITS_MIN
698           - ARCH_MMAP_RND_COMPAT_BITS_MAX
699
700 config ARCH_MMAP_RND_COMPAT_BITS_MIN
701         int
702
703 config ARCH_MMAP_RND_COMPAT_BITS_MAX
704         int
705
706 config ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
707         int
708
709 config ARCH_MMAP_RND_COMPAT_BITS
710         int "Number of bits to use for ASLR of mmap base address for compatible applications" if EXPERT
711         range ARCH_MMAP_RND_COMPAT_BITS_MIN ARCH_MMAP_RND_COMPAT_BITS_MAX
712         default ARCH_MMAP_RND_COMPAT_BITS_DEFAULT if ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
713         default ARCH_MMAP_RND_COMPAT_BITS_MIN
714         depends on HAVE_ARCH_MMAP_RND_COMPAT_BITS
715         help
716           This value can be used to select the number of bits to use to
717           determine the random offset to the base address of vma regions
718           resulting from mmap allocations for compatible applications This
719           value will be bounded by the architecture's minimum and maximum
720           supported values.
721
722           This value can be changed after boot using the
723           /proc/sys/vm/mmap_rnd_compat_bits tunable
724
725 config HAVE_ARCH_COMPAT_MMAP_BASES
726         bool
727         help
728           This allows 64bit applications to invoke 32-bit mmap() syscall
729           and vice-versa 32-bit applications to call 64-bit mmap().
730           Required for applications doing different bitness syscalls.
731
732 # This allows to use a set of generic functions to determine mmap base
733 # address by giving priority to top-down scheme only if the process
734 # is not in legacy mode (compat task, unlimited stack size or
735 # sysctl_legacy_va_layout).
736 # Architecture that selects this option can provide its own version of:
737 # - STACK_RND_MASK
738 config ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
739         bool
740         depends on MMU
741         select ARCH_HAS_ELF_RANDOMIZE
742
743 config HAVE_COPY_THREAD_TLS
744         bool
745         help
746           Architecture provides copy_thread_tls to accept tls argument via
747           normal C parameter passing, rather than extracting the syscall
748           argument from pt_regs.
749
750 config HAVE_STACK_VALIDATION
751         bool
752         help
753           Architecture supports the 'objtool check' host tool command, which
754           performs compile-time stack metadata validation.
755
756 config HAVE_RELIABLE_STACKTRACE
757         bool
758         help
759           Architecture has a save_stack_trace_tsk_reliable() function which
760           only returns a stack trace if it can guarantee the trace is reliable.
761
762 config HAVE_ARCH_HASH
763         bool
764         default n
765         help
766           If this is set, the architecture provides an <asm/hash.h>
767           file which provides platform-specific implementations of some
768           functions in <linux/hash.h> or fs/namei.c.
769
770 config HAVE_ARCH_NVRAM_OPS
771         bool
772
773 config ISA_BUS_API
774         def_bool ISA
775
776 #
777 # ABI hall of shame
778 #
779 config CLONE_BACKWARDS
780         bool
781         help
782           Architecture has tls passed as the 4th argument of clone(2),
783           not the 5th one.
784
785 config CLONE_BACKWARDS2
786         bool
787         help
788           Architecture has the first two arguments of clone(2) swapped.
789
790 config CLONE_BACKWARDS3
791         bool
792         help
793           Architecture has tls passed as the 3rd argument of clone(2),
794           not the 5th one.
795
796 config ODD_RT_SIGACTION
797         bool
798         help
799           Architecture has unusual rt_sigaction(2) arguments
800
801 config OLD_SIGSUSPEND
802         bool
803         help
804           Architecture has old sigsuspend(2) syscall, of one-argument variety
805
806 config OLD_SIGSUSPEND3
807         bool
808         help
809           Even weirder antique ABI - three-argument sigsuspend(2)
810
811 config OLD_SIGACTION
812         bool
813         help
814           Architecture has old sigaction(2) syscall.  Nope, not the same
815           as OLD_SIGSUSPEND | OLD_SIGSUSPEND3 - alpha has sigsuspend(2),
816           but fairly different variant of sigaction(2), thanks to OSF/1
817           compatibility...
818
819 config COMPAT_OLD_SIGACTION
820         bool
821
822 config 64BIT_TIME
823         def_bool y
824         help
825           This should be selected by all architectures that need to support
826           new system calls with a 64-bit time_t. This is relevant on all 32-bit
827           architectures, and 64-bit architectures as part of compat syscall
828           handling.
829
830 config COMPAT_32BIT_TIME
831         def_bool !64BIT || COMPAT
832         help
833           This enables 32 bit time_t support in addition to 64 bit time_t support.
834           This is relevant on all 32-bit architectures, and 64-bit architectures
835           as part of compat syscall handling.
836
837 config ARCH_NO_PREEMPT
838         bool
839
840 config ARCH_SUPPORTS_RT
841         bool
842
843 config CPU_NO_EFFICIENT_FFS
844         def_bool n
845
846 config HAVE_ARCH_VMAP_STACK
847         def_bool n
848         help
849           An arch should select this symbol if it can support kernel stacks
850           in vmalloc space.  This means:
851
852           - vmalloc space must be large enough to hold many kernel stacks.
853             This may rule out many 32-bit architectures.
854
855           - Stacks in vmalloc space need to work reliably.  For example, if
856             vmap page tables are created on demand, either this mechanism
857             needs to work while the stack points to a virtual address with
858             unpopulated page tables or arch code (switch_to() and switch_mm(),
859             most likely) needs to ensure that the stack's page table entries
860             are populated before running on a possibly unpopulated stack.
861
862           - If the stack overflows into a guard page, something reasonable
863             should happen.  The definition of "reasonable" is flexible, but
864             instantly rebooting without logging anything would be unfriendly.
865
866 config VMAP_STACK
867         default y
868         bool "Use a virtually-mapped stack"
869         depends on HAVE_ARCH_VMAP_STACK && !KASAN
870         ---help---
871           Enable this if you want the use virtually-mapped kernel stacks
872           with guard pages.  This causes kernel stack overflows to be
873           caught immediately rather than causing difficult-to-diagnose
874           corruption.
875
876           This is presently incompatible with KASAN because KASAN expects
877           the stack to map directly to the KASAN shadow map using a formula
878           that is incorrect if the stack is in vmalloc space.
879
880 config ARCH_OPTIONAL_KERNEL_RWX
881         def_bool n
882
883 config ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
884         def_bool n
885
886 config ARCH_HAS_STRICT_KERNEL_RWX
887         def_bool n
888
889 config STRICT_KERNEL_RWX
890         bool "Make kernel text and rodata read-only" if ARCH_OPTIONAL_KERNEL_RWX
891         depends on ARCH_HAS_STRICT_KERNEL_RWX
892         default !ARCH_OPTIONAL_KERNEL_RWX || ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
893         help
894           If this is set, kernel text and rodata memory will be made read-only,
895           and non-text memory will be made non-executable. This provides
896           protection against certain security exploits (e.g. executing the heap
897           or modifying text)
898
899           These features are considered standard security practice these days.
900           You should say Y here in almost all cases.
901
902 config ARCH_HAS_STRICT_MODULE_RWX
903         def_bool n
904
905 config STRICT_MODULE_RWX
906         bool "Set loadable kernel module data as NX and text as RO" if ARCH_OPTIONAL_KERNEL_RWX
907         depends on ARCH_HAS_STRICT_MODULE_RWX && MODULES
908         default !ARCH_OPTIONAL_KERNEL_RWX || ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
909         help
910           If this is set, module text and rodata memory will be made read-only,
911           and non-text memory will be made non-executable. This provides
912           protection against certain security exploits (e.g. writing to text)
913
914 # select if the architecture provides an asm/dma-direct.h header
915 config ARCH_HAS_PHYS_TO_DMA
916         bool
917
918 config HAVE_ARCH_COMPILER_H
919         bool
920         help
921           An architecture can select this if it provides an
922           asm/compiler.h header that should be included after
923           linux/compiler-*.h in order to override macro definitions that those
924           headers generally provide.
925
926 config HAVE_ARCH_PREL32_RELOCATIONS
927         bool
928         help
929           May be selected by an architecture if it supports place-relative
930           32-bit relocations, both in the toolchain and in the module loader,
931           in which case relative references can be used in special sections
932           for PCI fixup, initcalls etc which are only half the size on 64 bit
933           architectures, and don't require runtime relocation on relocatable
934           kernels.
935
936 config ARCH_USE_MEMREMAP_PROT
937         bool
938
939 config LOCK_EVENT_COUNTS
940         bool "Locking event counts collection"
941         depends on DEBUG_FS
942         ---help---
943           Enable light-weight counting of various locking related events
944           in the system with minimal performance impact. This reduces
945           the chance of application behavior change because of timing
946           differences. The counts are reported via debugfs.
947
948 # Select if the architecture has support for applying RELR relocations.
949 config ARCH_HAS_RELR
950         bool
951
952 config RELR
953         bool "Use RELR relocation packing"
954         depends on ARCH_HAS_RELR && TOOLS_SUPPORT_RELR
955         default y
956         help
957           Store the kernel's dynamic relocations in the RELR relocation packing
958           format. Requires a compatible linker (LLD supports this feature), as
959           well as compatible NM and OBJCOPY utilities (llvm-nm and llvm-objcopy
960           are compatible).
961
962 config ARCH_HAS_MEM_ENCRYPT
963         bool
964
965 source "kernel/gcov/Kconfig"
966
967 source "scripts/gcc-plugins/Kconfig"
968
969 endmenu