f9733e492d
Currently CONFIG_OMIT_FRAME_POINTER is a boolean and defaults to N, which increases code size. This is intended to improve debugability but on many architectures the use of this option does not actually compromise debugging. Further the compiler already knows whether or not omitting the frame pointer is harmful to debugging and its defaults are selected accordingly. By making this choice optional we can have a sane default on *all* architectures by letting the compiler decide for us. This patch significantly improves the default code generation on arm (thumb), nios2 and arc. The benefit looks to be about between 5% and 10% code size reduction depending upon architecture). x86 is unaffected. Change-Id: I5790634a40e2462cc1089dce4087040833793ae7 Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
336 lines
9.4 KiB
Plaintext
336 lines
9.4 KiB
Plaintext
# Kconfig - miscellany configuration options
|
|
|
|
#
|
|
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
menu "Compile and Link Features"
|
|
|
|
menu "Linker Options"
|
|
config TEXT_SECTION_OFFSET
|
|
hex "TEXT section offset"
|
|
default 0
|
|
help
|
|
This sets and offset before the text section and allows booting images
|
|
with custom headers that are inserted at the beginning of the image.
|
|
|
|
config HAVE_CUSTOM_LINKER_SCRIPT
|
|
prompt "Custom linker scripts provided"
|
|
def_bool n
|
|
help
|
|
Set this option if you have a custom linker script which needed to
|
|
be define in CUSTOM_LINKER_SCRIPT.
|
|
|
|
config CUSTOM_LINKER_SCRIPT
|
|
string "Path to custom linker script"
|
|
default ""
|
|
depends on HAVE_CUSTOM_LINKER_SCRIPT
|
|
help
|
|
Path to the linker script to be used instead of the one define by the
|
|
board.
|
|
|
|
The linker script must be based on a version provided by Zephyr since
|
|
the kernel can expect a certain layout/certain regions.
|
|
|
|
This is useful when an application needs to add sections into the
|
|
linker script and avoid having to change the script provided by
|
|
Zephyr.
|
|
|
|
config CUSTOM_RODATA_LD
|
|
bool "Include custom-rodata.ld"
|
|
default n
|
|
help
|
|
Include a customized linker script fragment for inserting additional
|
|
data and linker directives into the rodata section.
|
|
|
|
config CUSTOM_RWDATA_LD
|
|
bool "Include custom-rwdata.ld"
|
|
default n
|
|
help
|
|
Include a customized linker script fragment for inserting additional
|
|
data and linker directives into the data section.
|
|
|
|
config CUSTOM_SECTIONS_LD
|
|
bool "Include custom-sections.ld"
|
|
default n
|
|
help
|
|
Include a customized linker script fragment for inserting additional
|
|
arbitrary sections.
|
|
|
|
config LINK_WHOLE_ARCHIVE
|
|
bool "Allow linking with --whole-archive"
|
|
default n
|
|
help
|
|
This options allows linking external libraries with the
|
|
--whole-archive option to keep all symbols.
|
|
|
|
endmenu
|
|
|
|
menu "Compiler Options"
|
|
config CROSS_COMPILE
|
|
string "Cross-compiler tool prefix"
|
|
help
|
|
Same as running 'make CROSS_COMPILE=prefix-' but stored for
|
|
default make runs in this kernel build directory. You don't
|
|
need to set this unless you want the configured kernel build
|
|
directory to select the cross-compiler automatically.
|
|
|
|
config COMPILER_OPT
|
|
string
|
|
prompt "Custom compiler options"
|
|
default ""
|
|
help
|
|
This option is a free-form string that is passed to the compiler
|
|
when building all parts of a project (i.e. kernel).
|
|
The compiler options specified by this string supplement the
|
|
pre-defined set of compiler supplied by the build system,
|
|
and can be used to change compiler optimization, warning and error
|
|
messages, and so on.
|
|
|
|
config TOOLCHAIN_VARIANT
|
|
string "Cross-compiler variant name"
|
|
help
|
|
For optimized compilers with reduced features, specify the name
|
|
of the variant.
|
|
|
|
endmenu
|
|
|
|
config CPLUSPLUS
|
|
bool "Enable C++ support for the application"
|
|
default n
|
|
help
|
|
This option enables the use of applications built with C++.
|
|
|
|
config GDB_INFO
|
|
bool
|
|
prompt "Task-aware debugging with GDB"
|
|
default n
|
|
help
|
|
This option enables the kernel to collect additional information
|
|
during interrupts, exceptions, and context switches. This information
|
|
is required for task-aware debugging with GDB.
|
|
|
|
config KERNEL_BIN_NAME
|
|
string "The kernel binary name"
|
|
default "zephyr"
|
|
help
|
|
This option sets the name of the generated kernel binary.
|
|
|
|
endmenu
|
|
|
|
menu "Debugging Options"
|
|
|
|
config DEBUG
|
|
bool "Build kernel with debugging enabled"
|
|
default n
|
|
help
|
|
Build a kernel suitable for debugging. Right now, this option
|
|
only disables optimization, more debugging variants can be selected
|
|
from here to allow more debugging.
|
|
|
|
config STACK_USAGE
|
|
bool "Generate stack usage information"
|
|
default n
|
|
help
|
|
Generate an extra file that specifies the maximum amount of stack used,
|
|
on a per-function basis.
|
|
|
|
config PRINTK
|
|
bool
|
|
prompt "Send printk() to console"
|
|
depends on CONSOLE_HAS_DRIVER
|
|
default y
|
|
help
|
|
This option directs printk() debugging output to the supported
|
|
console device, rather than suppressing the generation
|
|
of printk() output entirely. Output is sent immediately, without
|
|
any mutual exclusion or buffering.
|
|
|
|
config STDOUT_CONSOLE
|
|
bool
|
|
prompt "Send stdout to console"
|
|
depends on CONSOLE_HAS_DRIVER
|
|
default n
|
|
help
|
|
This option directs standard output (e.g. printf) to the console
|
|
device, rather than suppressing it entirely.
|
|
|
|
config EARLY_CONSOLE
|
|
bool
|
|
prompt "Send stdout at the earliest stage possible"
|
|
default n
|
|
help
|
|
This option will enable stdout as early as possible, for debugging
|
|
purpose. For instance, in case of STDOUT_CONSOLE being set it will
|
|
initialize its driver earlier than normal, in order to get the stdout
|
|
sent through the console at the earliest stage possible.
|
|
|
|
config ASSERT
|
|
bool
|
|
prompt "Enable __ASSERT() macro"
|
|
default n
|
|
help
|
|
This enables the __ASSERT() macro in the kernel code. If an assertion
|
|
fails, the calling thread is put on an infinite tight loop. Since
|
|
enabling this adds a significant footprint, it should only be enabled
|
|
in a non-production system.
|
|
|
|
config ASSERT_LEVEL
|
|
int
|
|
prompt "__ASSERT() level"
|
|
default 2
|
|
range 0 2
|
|
depends on ASSERT
|
|
help
|
|
This option specifies the assertion level used by the __ASSERT()
|
|
macro. It can be set to one of three possible values:
|
|
|
|
Level 0: off
|
|
Level 1: on + warning in every file that includes __assert.h
|
|
Level 2: on + no warning
|
|
|
|
config DEBUG_TRACING_KERNEL_OBJECTS
|
|
bool "Kernel object tracing (deprecated)"
|
|
select OBJECT_TRACING
|
|
default n
|
|
help
|
|
For backward compatibility only
|
|
|
|
config OBJECT_TRACING
|
|
bool
|
|
prompt "Kernel object tracing"
|
|
default n
|
|
help
|
|
This option enable the feature for tracing kernel objects. This option
|
|
is for debug purposes and increases the memory footprint of the kernel.
|
|
|
|
config OVERRIDE_FRAME_POINTER_DEFAULT
|
|
bool
|
|
prompt "Override compiler defaults for -fomit-frame-pointer"
|
|
default n
|
|
help
|
|
Omitting the frame pointer prevents the compiler from putting the stack
|
|
frame pointer into a register. Saves a few instructions in function
|
|
prologues/epilogues and frees up a register for general-purpose use,
|
|
which can provide good performance improvements on register-constrained
|
|
architectures like x86. On some architectures (including x86) omitting
|
|
frame pointers impedes debugging as local variables are harder to
|
|
locate. At -O1 and above gcc will enable -fomit-frame-pointer
|
|
automatically but only if the architecture does not require if for
|
|
effective debugging.
|
|
|
|
Choose Y is you want to override the default frame pointer behaviour
|
|
of your compiler, otherwise choose N.
|
|
|
|
config OMIT_FRAME_POINTER
|
|
bool
|
|
prompt "Omit frame pointer"
|
|
default n
|
|
depends on OVERRIDE_FRAME_POINTER_DEFAULT
|
|
help
|
|
Choose Y for best performance. On some architectures (including x86)
|
|
this will favour code size and performance over debugability.
|
|
|
|
Choose N in you wish to retain the frame pointer. This option may
|
|
be useful if your application uses runtime backtracing and does not
|
|
support parsing unwind tables.
|
|
|
|
If unsure, disable OVERRIDE_FRAME_POINTER_DEFAULT to allow the compiler
|
|
to adopt sensible defaults for your architecture.
|
|
|
|
endmenu
|
|
|
|
menu "System Monitoring Options"
|
|
|
|
config PERFORMANCE_METRICS
|
|
bool
|
|
prompt "Enable performance metrics [EXPERIMENTAL]"
|
|
default n
|
|
help
|
|
Enable Performance Metrics.
|
|
|
|
config BOOT_TIME_MEASUREMENT
|
|
bool
|
|
prompt "Boot time measurements [EXPERIMENTAL]"
|
|
default n
|
|
depends on PERFORMANCE_METRICS
|
|
help
|
|
This option enables the recording of timestamps during system start
|
|
up. The global variable __start_tsc records the time kernel begins
|
|
executing, while __main_tsc records when main() begins executing,
|
|
and __idle_tsc records when the CPU becomes idle. All values are
|
|
recorded in terms of CPU clock cycles since system reset.
|
|
|
|
config CPU_CLOCK_FREQ_MHZ
|
|
int
|
|
prompt "CPU CLock Frequency in MHz"
|
|
default 20
|
|
depends on BOOT_TIME_MEASUREMENT
|
|
help
|
|
This option specifies the CPU Clock Frequency in MHz in order to
|
|
convert Intel RDTSC timestamp to microseconds.
|
|
|
|
endmenu
|
|
|
|
menu "Boot Options"
|
|
|
|
config IS_BOOTLOADER
|
|
bool "Act as a bootloader"
|
|
default n
|
|
depends on XIP
|
|
depends on ARM
|
|
help
|
|
This option indicates that Zephyr will act as a bootloader to execute
|
|
a separate Zephyr image payload.
|
|
|
|
config BOOTLOADER_SRAM_SIZE
|
|
int "SRAM reserved for when Zephyr acts as a bootloader"
|
|
default 16
|
|
depends on !XIP || IS_BOOTLOADER
|
|
depends on ARM
|
|
help
|
|
This option specifies the amount of SRAM (measure in kB) reserved for
|
|
when Zephyr is to act as a bootloader.
|
|
|
|
config BOOTLOADER_KEXEC
|
|
bool
|
|
prompt "Boot using Linux kexec() system call"
|
|
depends on X86
|
|
default n
|
|
help
|
|
This option signifies that Linux boots the kernel using kexec system call
|
|
and utility. This method is used to boot the kernel over the network.
|
|
|
|
config BOOTLOADER_UNKNOWN
|
|
bool
|
|
prompt "Generic boot loader support"
|
|
default n
|
|
depends on X86
|
|
help
|
|
This option signifies that the target has a generic bootloader
|
|
or that it supports multiple ways of booting and it isn't clear
|
|
at build time which method is to be used. When this option is enabled
|
|
the board may have to do extra work to ensure a proper startup.
|
|
|
|
config BOOTLOADER_CONTEXT_RESTORE
|
|
bool
|
|
prompt "Boot loader has context restore support"
|
|
default y
|
|
depends on SYS_POWER_DEEP_SLEEP && BOOTLOADER_CONTEXT_RESTORE_SUPPORTED
|
|
help
|
|
This option signifies that the target has a bootloader
|
|
that restores CPU context upon resuming from deep sleep
|
|
power state.
|
|
|
|
config REBOOT
|
|
bool "Reboot functionality"
|
|
default n
|
|
select SYSTEM_CLOCK_DISABLE
|
|
help
|
|
Enable the sys_reboot() API. Enabling this can drag in other subsystems
|
|
needed to perform a "safe" reboot (e.g. SYSTEM_CLOCK_DISABLE, to stop the
|
|
system clock before issuing a reset).
|
|
endmenu
|