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