xref: /openbmc/linux/arch/Kconfig (revision 5f56a5df)
1#
2# General architecture dependent options
3#
4
5config KEXEC_CORE
6	bool
7
8config OPROFILE
9	tristate "OProfile system profiling"
10	depends on PROFILING
11	depends on HAVE_OPROFILE
12	select RING_BUFFER
13	select RING_BUFFER_ALLOW_SWAP
14	help
15	  OProfile is a profiling system capable of profiling the
16	  whole system, include the kernel, kernel modules, libraries,
17	  and applications.
18
19	  If unsure, say N.
20
21config OPROFILE_EVENT_MULTIPLEX
22	bool "OProfile multiplexing support (EXPERIMENTAL)"
23	default n
24	depends on OPROFILE && X86
25	help
26	  The number of hardware counters is limited. The multiplexing
27	  feature enables OProfile to gather more events than counters
28	  are provided by the hardware. This is realized by switching
29	  between events at an user specified time interval.
30
31	  If unsure, say N.
32
33config HAVE_OPROFILE
34	bool
35
36config OPROFILE_NMI_TIMER
37	def_bool y
38	depends on PERF_EVENTS && HAVE_PERF_EVENTS_NMI && !PPC64
39
40config KPROBES
41	bool "Kprobes"
42	depends on MODULES
43	depends on HAVE_KPROBES
44	select KALLSYMS
45	help
46	  Kprobes allows you to trap at almost any kernel address and
47	  execute a callback function.  register_kprobe() establishes
48	  a probepoint and specifies the callback.  Kprobes is useful
49	  for kernel debugging, non-intrusive instrumentation and testing.
50	  If in doubt, say "N".
51
52config JUMP_LABEL
53       bool "Optimize very unlikely/likely branches"
54       depends on HAVE_ARCH_JUMP_LABEL
55       help
56         This option enables a transparent branch optimization that
57	 makes certain almost-always-true or almost-always-false branch
58	 conditions even cheaper to execute within the kernel.
59
60	 Certain performance-sensitive kernel code, such as trace points,
61	 scheduler functionality, networking code and KVM have such
62	 branches and include support for this optimization technique.
63
64         If it is detected that the compiler has support for "asm goto",
65	 the kernel will compile such branches with just a nop
66	 instruction. When the condition flag is toggled to true, the
67	 nop will be converted to a jump instruction to execute the
68	 conditional block of instructions.
69
70	 This technique lowers overhead and stress on the branch prediction
71	 of the processor and generally makes the kernel faster. The update
72	 of the condition is slower, but those are always very rare.
73
74	 ( On 32-bit x86, the necessary options added to the compiler
75	   flags may increase the size of the kernel slightly. )
76
77config STATIC_KEYS_SELFTEST
78	bool "Static key selftest"
79	depends on JUMP_LABEL
80	help
81	  Boot time self-test of the branch patching code.
82
83config OPTPROBES
84	def_bool y
85	depends on KPROBES && HAVE_OPTPROBES
86	depends on !PREEMPT
87
88config KPROBES_ON_FTRACE
89	def_bool y
90	depends on KPROBES && HAVE_KPROBES_ON_FTRACE
91	depends on DYNAMIC_FTRACE_WITH_REGS
92	help
93	 If function tracer is enabled and the arch supports full
94	 passing of pt_regs to function tracing, then kprobes can
95	 optimize on top of function tracing.
96
97config UPROBES
98	def_bool n
99	help
100	  Uprobes is the user-space counterpart to kprobes: they
101	  enable instrumentation applications (such as 'perf probe')
102	  to establish unintrusive probes in user-space binaries and
103	  libraries, by executing handler functions when the probes
104	  are hit by user-space applications.
105
106	  ( These probes come in the form of single-byte breakpoints,
107	    managed by the kernel and kept transparent to the probed
108	    application. )
109
110config HAVE_64BIT_ALIGNED_ACCESS
111	def_bool 64BIT && !HAVE_EFFICIENT_UNALIGNED_ACCESS
112	help
113	  Some architectures require 64 bit accesses to be 64 bit
114	  aligned, which also requires structs containing 64 bit values
115	  to be 64 bit aligned too. This includes some 32 bit
116	  architectures which can do 64 bit accesses, as well as 64 bit
117	  architectures without unaligned access.
118
119	  This symbol should be selected by an architecture if 64 bit
120	  accesses are required to be 64 bit aligned in this way even
121	  though it is not a 64 bit architecture.
122
123	  See Documentation/unaligned-memory-access.txt for more
124	  information on the topic of unaligned memory accesses.
125
126config HAVE_EFFICIENT_UNALIGNED_ACCESS
127	bool
128	help
129	  Some architectures are unable to perform unaligned accesses
130	  without the use of get_unaligned/put_unaligned. Others are
131	  unable to perform such accesses efficiently (e.g. trap on
132	  unaligned access and require fixing it up in the exception
133	  handler.)
134
135	  This symbol should be selected by an architecture if it can
136	  perform unaligned accesses efficiently to allow different
137	  code paths to be selected for these cases. Some network
138	  drivers, for example, could opt to not fix up alignment
139	  problems with received packets if doing so would not help
140	  much.
141
142	  See Documentation/unaligned-memory-access.txt for more
143	  information on the topic of unaligned memory accesses.
144
145config ARCH_USE_BUILTIN_BSWAP
146       bool
147       help
148	 Modern versions of GCC (since 4.4) have builtin functions
149	 for handling byte-swapping. Using these, instead of the old
150	 inline assembler that the architecture code provides in the
151	 __arch_bswapXX() macros, allows the compiler to see what's
152	 happening and offers more opportunity for optimisation. In
153	 particular, the compiler will be able to combine the byteswap
154	 with a nearby load or store and use load-and-swap or
155	 store-and-swap instructions if the architecture has them. It
156	 should almost *never* result in code which is worse than the
157	 hand-coded assembler in <asm/swab.h>.  But just in case it
158	 does, the use of the builtins is optional.
159
160	 Any architecture with load-and-swap or store-and-swap
161	 instructions should set this. And it shouldn't hurt to set it
162	 on architectures that don't have such instructions.
163
164config KRETPROBES
165	def_bool y
166	depends on KPROBES && HAVE_KRETPROBES
167
168config USER_RETURN_NOTIFIER
169	bool
170	depends on HAVE_USER_RETURN_NOTIFIER
171	help
172	  Provide a kernel-internal notification when a cpu is about to
173	  switch to user mode.
174
175config HAVE_IOREMAP_PROT
176	bool
177
178config HAVE_KPROBES
179	bool
180
181config HAVE_KRETPROBES
182	bool
183
184config HAVE_OPTPROBES
185	bool
186
187config HAVE_KPROBES_ON_FTRACE
188	bool
189
190config HAVE_NMI_WATCHDOG
191	bool
192#
193# An arch should select this if it provides all these things:
194#
195#	task_pt_regs()		in asm/processor.h or asm/ptrace.h
196#	arch_has_single_step()	if there is hardware single-step support
197#	arch_has_block_step()	if there is hardware block-step support
198#	asm/syscall.h		supplying asm-generic/syscall.h interface
199#	linux/regset.h		user_regset interfaces
200#	CORE_DUMP_USE_REGSET	#define'd in linux/elf.h
201#	TIF_SYSCALL_TRACE	calls tracehook_report_syscall_{entry,exit}
202#	TIF_NOTIFY_RESUME	calls tracehook_notify_resume()
203#	signal delivery		calls tracehook_signal_handler()
204#
205config HAVE_ARCH_TRACEHOOK
206	bool
207
208config HAVE_DMA_CONTIGUOUS
209	bool
210
211config GENERIC_SMP_IDLE_THREAD
212       bool
213
214config GENERIC_IDLE_POLL_SETUP
215       bool
216
217# Select if arch init_task initializer is different to init/init_task.c
218config ARCH_INIT_TASK
219       bool
220
221# Select if arch has its private alloc_task_struct() function
222config ARCH_TASK_STRUCT_ALLOCATOR
223	bool
224
225# Select if arch has its private alloc_thread_info() function
226config ARCH_THREAD_INFO_ALLOCATOR
227	bool
228
229# Select if arch wants to size task_struct dynamically via arch_task_struct_size:
230config ARCH_WANTS_DYNAMIC_TASK_STRUCT
231	bool
232
233config HAVE_REGS_AND_STACK_ACCESS_API
234	bool
235	help
236	  This symbol should be selected by an architecure if it supports
237	  the API needed to access registers and stack entries from pt_regs,
238	  declared in asm/ptrace.h
239	  For example the kprobes-based event tracer needs this API.
240
241config HAVE_CLK
242	bool
243	help
244	  The <linux/clk.h> calls support software clock gating and
245	  thus are a key power management tool on many systems.
246
247config HAVE_DMA_API_DEBUG
248	bool
249
250config HAVE_HW_BREAKPOINT
251	bool
252	depends on PERF_EVENTS
253
254config HAVE_MIXED_BREAKPOINTS_REGS
255	bool
256	depends on HAVE_HW_BREAKPOINT
257	help
258	  Depending on the arch implementation of hardware breakpoints,
259	  some of them have separate registers for data and instruction
260	  breakpoints addresses, others have mixed registers to store
261	  them but define the access type in a control register.
262	  Select this option if your arch implements breakpoints under the
263	  latter fashion.
264
265config HAVE_USER_RETURN_NOTIFIER
266	bool
267
268config HAVE_PERF_EVENTS_NMI
269	bool
270	help
271	  System hardware can generate an NMI using the perf event
272	  subsystem.  Also has support for calculating CPU cycle events
273	  to determine how many clock cycles in a given period.
274
275config HAVE_PERF_REGS
276	bool
277	help
278	  Support selective register dumps for perf events. This includes
279	  bit-mapping of each registers and a unique architecture id.
280
281config HAVE_PERF_USER_STACK_DUMP
282	bool
283	help
284	  Support user stack dumps for perf event samples. This needs
285	  access to the user stack pointer which is not unified across
286	  architectures.
287
288config HAVE_ARCH_JUMP_LABEL
289	bool
290
291config HAVE_RCU_TABLE_FREE
292	bool
293
294config ARCH_HAVE_NMI_SAFE_CMPXCHG
295	bool
296
297config HAVE_ALIGNED_STRUCT_PAGE
298	bool
299	help
300	  This makes sure that struct pages are double word aligned and that
301	  e.g. the SLUB allocator can perform double word atomic operations
302	  on a struct page for better performance. However selecting this
303	  might increase the size of a struct page by a word.
304
305config HAVE_CMPXCHG_LOCAL
306	bool
307
308config HAVE_CMPXCHG_DOUBLE
309	bool
310
311config ARCH_WANT_IPC_PARSE_VERSION
312	bool
313
314config ARCH_WANT_COMPAT_IPC_PARSE_VERSION
315	bool
316
317config ARCH_WANT_OLD_COMPAT_IPC
318	select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
319	bool
320
321config HAVE_ARCH_SECCOMP_FILTER
322	bool
323	help
324	  An arch should select this symbol if it provides all of these things:
325	  - syscall_get_arch()
326	  - syscall_get_arguments()
327	  - syscall_rollback()
328	  - syscall_set_return_value()
329	  - SIGSYS siginfo_t support
330	  - secure_computing is called from a ptrace_event()-safe context
331	  - secure_computing return value is checked and a return value of -1
332	    results in the system call being skipped immediately.
333	  - seccomp syscall wired up
334
335	  For best performance, an arch should use seccomp_phase1 and
336	  seccomp_phase2 directly.  It should call seccomp_phase1 for all
337	  syscalls if TIF_SECCOMP is set, but seccomp_phase1 does not
338	  need to be called from a ptrace-safe context.  It must then
339	  call seccomp_phase2 if seccomp_phase1 returns anything other
340	  than SECCOMP_PHASE1_OK or SECCOMP_PHASE1_SKIP.
341
342	  As an additional optimization, an arch may provide seccomp_data
343	  directly to seccomp_phase1; this avoids multiple calls
344	  to the syscall_xyz helpers for every syscall.
345
346config SECCOMP_FILTER
347	def_bool y
348	depends on HAVE_ARCH_SECCOMP_FILTER && SECCOMP && NET
349	help
350	  Enable tasks to build secure computing environments defined
351	  in terms of Berkeley Packet Filter programs which implement
352	  task-defined system call filtering polices.
353
354	  See Documentation/prctl/seccomp_filter.txt for details.
355
356config HAVE_CC_STACKPROTECTOR
357	bool
358	help
359	  An arch should select this symbol if:
360	  - its compiler supports the -fstack-protector option
361	  - it has implemented a stack canary (e.g. __stack_chk_guard)
362
363config CC_STACKPROTECTOR
364	def_bool n
365	help
366	  Set when a stack-protector mode is enabled, so that the build
367	  can enable kernel-side support for the GCC feature.
368
369choice
370	prompt "Stack Protector buffer overflow detection"
371	depends on HAVE_CC_STACKPROTECTOR
372	default CC_STACKPROTECTOR_NONE
373	help
374	  This option turns on the "stack-protector" GCC feature. This
375	  feature puts, at the beginning of functions, a canary value on
376	  the stack just before the return address, and validates
377	  the value just before actually returning.  Stack based buffer
378	  overflows (that need to overwrite this return address) now also
379	  overwrite the canary, which gets detected and the attack is then
380	  neutralized via a kernel panic.
381
382config CC_STACKPROTECTOR_NONE
383	bool "None"
384	help
385	  Disable "stack-protector" GCC feature.
386
387config CC_STACKPROTECTOR_REGULAR
388	bool "Regular"
389	select CC_STACKPROTECTOR
390	help
391	  Functions will have the stack-protector canary logic added if they
392	  have an 8-byte or larger character array on the stack.
393
394	  This feature requires gcc version 4.2 or above, or a distribution
395	  gcc with the feature backported ("-fstack-protector").
396
397	  On an x86 "defconfig" build, this feature adds canary checks to
398	  about 3% of all kernel functions, which increases kernel code size
399	  by about 0.3%.
400
401config CC_STACKPROTECTOR_STRONG
402	bool "Strong"
403	select CC_STACKPROTECTOR
404	help
405	  Functions will have the stack-protector canary logic added in any
406	  of the following conditions:
407
408	  - local variable's address used as part of the right hand side of an
409	    assignment or function argument
410	  - local variable is an array (or union containing an array),
411	    regardless of array type or length
412	  - uses register local variables
413
414	  This feature requires gcc version 4.9 or above, or a distribution
415	  gcc with the feature backported ("-fstack-protector-strong").
416
417	  On an x86 "defconfig" build, this feature adds canary checks to
418	  about 20% of all kernel functions, which increases the kernel code
419	  size by about 2%.
420
421endchoice
422
423config HAVE_CONTEXT_TRACKING
424	bool
425	help
426	  Provide kernel/user boundaries probes necessary for subsystems
427	  that need it, such as userspace RCU extended quiescent state.
428	  Syscalls need to be wrapped inside user_exit()-user_enter() through
429	  the slow path using TIF_NOHZ flag. Exceptions handlers must be
430	  wrapped as well. Irqs are already protected inside
431	  rcu_irq_enter/rcu_irq_exit() but preemption or signal handling on
432	  irq exit still need to be protected.
433
434config HAVE_VIRT_CPU_ACCOUNTING
435	bool
436
437config HAVE_VIRT_CPU_ACCOUNTING_GEN
438	bool
439	default y if 64BIT
440	help
441	  With VIRT_CPU_ACCOUNTING_GEN, cputime_t becomes 64-bit.
442	  Before enabling this option, arch code must be audited
443	  to ensure there are no races in concurrent read/write of
444	  cputime_t. For example, reading/writing 64-bit cputime_t on
445	  some 32-bit arches may require multiple accesses, so proper
446	  locking is needed to protect against concurrent accesses.
447
448
449config HAVE_IRQ_TIME_ACCOUNTING
450	bool
451	help
452	  Archs need to ensure they use a high enough resolution clock to
453	  support irq time accounting and then call enable_sched_clock_irqtime().
454
455config HAVE_ARCH_TRANSPARENT_HUGEPAGE
456	bool
457
458config HAVE_ARCH_HUGE_VMAP
459	bool
460
461config HAVE_ARCH_SOFT_DIRTY
462	bool
463
464config HAVE_MOD_ARCH_SPECIFIC
465	bool
466	help
467	  The arch uses struct mod_arch_specific to store data.  Many arches
468	  just need a simple module loader without arch specific data - those
469	  should not enable this.
470
471config MODULES_USE_ELF_RELA
472	bool
473	help
474	  Modules only use ELF RELA relocations.  Modules with ELF REL
475	  relocations will give an error.
476
477config MODULES_USE_ELF_REL
478	bool
479	help
480	  Modules only use ELF REL relocations.  Modules with ELF RELA
481	  relocations will give an error.
482
483config HAVE_UNDERSCORE_SYMBOL_PREFIX
484	bool
485	help
486	  Some architectures generate an _ in front of C symbols; things like
487	  module loading and assembly files need to know about this.
488
489config HAVE_IRQ_EXIT_ON_IRQ_STACK
490	bool
491	help
492	  Architecture doesn't only execute the irq handler on the irq stack
493	  but also irq_exit(). This way we can process softirqs on this irq
494	  stack instead of switching to a new one when we call __do_softirq()
495	  in the end of an hardirq.
496	  This spares a stack switch and improves cache usage on softirq
497	  processing.
498
499config PGTABLE_LEVELS
500	int
501	default 2
502
503config ARCH_HAS_ELF_RANDOMIZE
504	bool
505	help
506	  An architecture supports choosing randomized locations for
507	  stack, mmap, brk, and ET_DYN. Defined functions:
508	  - arch_mmap_rnd()
509	  - arch_randomize_brk()
510
511config HAVE_ARCH_MMAP_RND_BITS
512	bool
513	help
514	  An arch should select this symbol if it supports setting a variable
515	  number of bits for use in establishing the base address for mmap
516	  allocations, has MMU enabled and provides values for both:
517	  - ARCH_MMAP_RND_BITS_MIN
518	  - ARCH_MMAP_RND_BITS_MAX
519
520config HAVE_EXIT_THREAD
521	bool
522	help
523	  An architecture implements exit_thread.
524
525config ARCH_MMAP_RND_BITS_MIN
526	int
527
528config ARCH_MMAP_RND_BITS_MAX
529	int
530
531config ARCH_MMAP_RND_BITS_DEFAULT
532	int
533
534config ARCH_MMAP_RND_BITS
535	int "Number of bits to use for ASLR of mmap base address" if EXPERT
536	range ARCH_MMAP_RND_BITS_MIN ARCH_MMAP_RND_BITS_MAX
537	default ARCH_MMAP_RND_BITS_DEFAULT if ARCH_MMAP_RND_BITS_DEFAULT
538	default ARCH_MMAP_RND_BITS_MIN
539	depends on HAVE_ARCH_MMAP_RND_BITS
540	help
541	  This value can be used to select the number of bits to use to
542	  determine the random offset to the base address of vma regions
543	  resulting from mmap allocations. This value will be bounded
544	  by the architecture's minimum and maximum supported values.
545
546	  This value can be changed after boot using the
547	  /proc/sys/vm/mmap_rnd_bits tunable
548
549config HAVE_ARCH_MMAP_RND_COMPAT_BITS
550	bool
551	help
552	  An arch should select this symbol if it supports running applications
553	  in compatibility mode, supports setting a variable number of bits for
554	  use in establishing the base address for mmap allocations, has MMU
555	  enabled and provides values for both:
556	  - ARCH_MMAP_RND_COMPAT_BITS_MIN
557	  - ARCH_MMAP_RND_COMPAT_BITS_MAX
558
559config ARCH_MMAP_RND_COMPAT_BITS_MIN
560	int
561
562config ARCH_MMAP_RND_COMPAT_BITS_MAX
563	int
564
565config ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
566	int
567
568config ARCH_MMAP_RND_COMPAT_BITS
569	int "Number of bits to use for ASLR of mmap base address for compatible applications" if EXPERT
570	range ARCH_MMAP_RND_COMPAT_BITS_MIN ARCH_MMAP_RND_COMPAT_BITS_MAX
571	default ARCH_MMAP_RND_COMPAT_BITS_DEFAULT if ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
572	default ARCH_MMAP_RND_COMPAT_BITS_MIN
573	depends on HAVE_ARCH_MMAP_RND_COMPAT_BITS
574	help
575	  This value can be used to select the number of bits to use to
576	  determine the random offset to the base address of vma regions
577	  resulting from mmap allocations for compatible applications This
578	  value will be bounded by the architecture's minimum and maximum
579	  supported values.
580
581	  This value can be changed after boot using the
582	  /proc/sys/vm/mmap_rnd_compat_bits tunable
583
584config HAVE_COPY_THREAD_TLS
585	bool
586	help
587	  Architecture provides copy_thread_tls to accept tls argument via
588	  normal C parameter passing, rather than extracting the syscall
589	  argument from pt_regs.
590
591config HAVE_STACK_VALIDATION
592	bool
593	help
594	  Architecture supports the 'objtool check' host tool command, which
595	  performs compile-time stack metadata validation.
596
597#
598# ABI hall of shame
599#
600config CLONE_BACKWARDS
601	bool
602	help
603	  Architecture has tls passed as the 4th argument of clone(2),
604	  not the 5th one.
605
606config CLONE_BACKWARDS2
607	bool
608	help
609	  Architecture has the first two arguments of clone(2) swapped.
610
611config CLONE_BACKWARDS3
612	bool
613	help
614	  Architecture has tls passed as the 3rd argument of clone(2),
615	  not the 5th one.
616
617config ODD_RT_SIGACTION
618	bool
619	help
620	  Architecture has unusual rt_sigaction(2) arguments
621
622config OLD_SIGSUSPEND
623	bool
624	help
625	  Architecture has old sigsuspend(2) syscall, of one-argument variety
626
627config OLD_SIGSUSPEND3
628	bool
629	help
630	  Even weirder antique ABI - three-argument sigsuspend(2)
631
632config OLD_SIGACTION
633	bool
634	help
635	  Architecture has old sigaction(2) syscall.  Nope, not the same
636	  as OLD_SIGSUSPEND | OLD_SIGSUSPEND3 - alpha has sigsuspend(2),
637	  but fairly different variant of sigaction(2), thanks to OSF/1
638	  compatibility...
639
640config COMPAT_OLD_SIGACTION
641	bool
642
643config ARCH_NO_COHERENT_DMA_MMAP
644	bool
645
646source "kernel/gcov/Kconfig"
647