menu "Kernel hacking"

source "lib/Kconfig.debug"

# RMK wants arm kernels compiled with frame pointers so hardwire this to y.
# If you know what you are doing and are willing to live without stack
# traces, you can get a slightly smaller kernel by setting this option to
# n, but then RMK will have to kill you ;).
config FRAME_POINTER
	bool
	default y
	help
	  If you say N here, the resulting kernel will be slightly smaller and
	  faster. However, when a problem occurs with the kernel, the
	  information that is reported is severely limited. Most people
	  should say Y here.

config DEBUG_USER
	bool "Verbose user fault messages"
	help
	  When a user program crashes due to an exception, the kernel can
	  print a brief message explaining what the problem was. This is
	  sometimes helpful for debugging but serves no purpose on a
	  production system. Most people should say N here.

	  In addition, you need to pass user_debug=N on the kernel command
	  line to enable this feature.  N consists of the sum of:

	      1 - undefined instruction events
	      2 - system calls
	      4 - invalid data aborts
	      8 - SIGSEGV faults
	     16 - SIGBUS faults

config DEBUG_WAITQ
	bool "Wait queue debugging"
	depends on DEBUG_KERNEL

config DEBUG_ERRORS
	bool "Verbose kernel error messages"
	depends on DEBUG_KERNEL
	help
	  This option controls verbose debugging information which can be
	  printed when the kernel detects an internal error. This debugging
	  information is useful to kernel hackers when tracking down problems,
	  but mostly meaningless to other people. It's safe to say Y unless
	  you are concerned with the code size or don't want to see these
	  messages.


# These options are only for real kernel hackers who want to get their hands dirty.
config DEBUG_LL
	bool "Kernel low-level debugging functions"
	depends on DEBUG_KERNEL
	help
	  Say Y here to include definitions of printascii, printchar, printhex
	  in the kernel.  This is helpful if you are debugging code that
	  executes before the console is initialized.

config DEBUG_ICEDCC
	bool "Kernel low-level debugging via EmbeddedICE DCC channel"
	depends on DEBUG_LL
	help
	  Say Y here if you want the debug print routines to direct their
	  output to the EmbeddedICE macrocell's DCC channel using
	  co-processor 14. This is known to work on the ARM9 style ICE
	  channel.

	  It does include a timeout to ensure that the system does not
	  totally freeze when there is nothing connected to read.

config DEBUG_DC21285_PORT
	bool "Kernel low-level debugging messages via footbridge serial port"
	depends on DEBUG_LL && FOOTBRIDGE
	help
	  Say Y here if you want the debug print routines to direct their
	  output to the serial port in the DC21285 (Footbridge). Saying N
	  will cause the debug messages to appear on the first 16550
	  serial port.

config DEBUG_CLPS711X_UART2
	bool "Kernel low-level debugging messages via UART2"
	depends on DEBUG_LL && ARCH_CLPS711X
	help
	  Say Y here if you want the debug print routines to direct their
	  output to the second serial port on these devices.  Saying N will
	  cause the debug messages to appear on the first serial port.

config DEBUG_S3C2410_PORT
	depends on DEBUG_LL && ARCH_S3C2410
	bool "Kernel low-level debugging messages via S3C2410 UART"
	help
	  Say Y here if you want debug print routines to go to one of the
	  S3C2410 internal UARTs. The chosen UART must have been configured
	  before it is used.

config DEBUG_S3C2410_UART
	depends on ARCH_S3C2410
	int "S3C2410 UART to use for low-level debug"
	default "0"
	help
	  Choice for UART for kernel low-level using S3C2410 UARTS,
	  should be between zero and two. The port must have been
	  initalised by the boot-loader before use.

	  The uncompressor code port configuration is now handled
	  by CONFIG_S3C2410_LOWLEVEL_UART_PORT.

endmenu
