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