[PATCH] arm: spl: Use separate fault handlers instead of a single common one

It may be necessary to set breakpoints etc. on a specific fault handler in SPL. Add a Kconfig option to separate the different handlers into their own individual infinite loops.
Signed-off-by: Csókás Bence csokas.bence@prolan.hu --- arch/arm/Kconfig | 10 ++++++++++ arch/arm/lib/vectors.S | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 328e2ddc33..47494cb72b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -79,6 +79,16 @@ config SPL_SYS_NO_VECTOR_TABLE depends on SPL bool
+config SPL_USE_SEPARATE_FAULT_HANDLERS + bool "Use separate fault handlers instead of a single common one" + depends on !SPL_SYS_NO_VECTOR_TABLE + default n + help + Instead of a common fault handler, generate a separate one for + undefined_instruction, software_interrupt, prefetch_abort etc. + This is for debugging purposes, when you want to set breakpoints + on them separately. + config LINUX_KERNEL_IMAGE_HEADER depends on ARM64 bool diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S index 7cf7d1636f..a14bca6fb8 100644 --- a/arch/arm/lib/vectors.S +++ b/arch/arm/lib/vectors.S @@ -138,11 +138,29 @@ _fiq: .word fiq #if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) .align 5 undefined_instruction: +#if CONFIG_IS_ENABLED(USE_SEPARATE_FAULT_HANDLERS) + b undefined_instruction +#endif software_interrupt: +#if CONFIG_IS_ENABLED(USE_SEPARATE_FAULT_HANDLERS) + b software_interrupt +#endif prefetch_abort: +#if CONFIG_IS_ENABLED(USE_SEPARATE_FAULT_HANDLERS) + b prefetch_abort +#endif data_abort: +#if CONFIG_IS_ENABLED(USE_SEPARATE_FAULT_HANDLERS) + b data_abort +#endif not_used: +#if CONFIG_IS_ENABLED(USE_SEPARATE_FAULT_HANDLERS) + b not_used +#endif irq: +#if CONFIG_IS_ENABLED(USE_SEPARATE_FAULT_HANDLERS) + b irq +#endif fiq: 1: b 1b /* hang and never return */

On Thu, Dec 14, 2023 at 05:29:31PM +0100, Csókás Bence wrote:
It may be necessary to set breakpoints etc. on a specific fault handler in SPL. Add a Kconfig option to separate the different handlers into their own individual infinite loops.
Signed-off-by: Csókás Bence csokas.bence@prolan.hu
arch/arm/Kconfig | 10 ++++++++++ arch/arm/lib/vectors.S | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 328e2ddc33..47494cb72b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -79,6 +79,16 @@ config SPL_SYS_NO_VECTOR_TABLE depends on SPL bool
+config SPL_USE_SEPARATE_FAULT_HANDLERS
- bool "Use separate fault handlers instead of a single common one"
- depends on !SPL_SYS_NO_VECTOR_TABLE
Will this dep catch that this is only valid for !ARM64 && !CPU_V7M ?
- default n
"n" is the default, so don't add this.
Otherwise looks good.

2023. 12. 14. 18:53 keltezéssel, Tom Rini írta:
On Thu, Dec 14, 2023 at 05:29:31PM +0100, Csókás Bence wrote:
It may be necessary to set breakpoints etc. on a specific fault handler in SPL. Add a Kconfig option to separate the different handlers into their own individual infinite loops.
Signed-off-by: Csókás Bence csokas.bence@prolan.hu
arch/arm/Kconfig | 10 ++++++++++ arch/arm/lib/vectors.S | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 328e2ddc33..47494cb72b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -79,6 +79,16 @@ config SPL_SYS_NO_VECTOR_TABLE depends on SPL bool
+config SPL_USE_SEPARATE_FAULT_HANDLERS
- bool "Use separate fault handlers instead of a single common one"
- depends on !SPL_SYS_NO_VECTOR_TABLE
Will this dep catch that this is only valid for !ARM64 && !CPU_V7M ?
Is it? How so? So should I put `depends on !SPL_SYS_NO_VECTOR_TABLE && !ARM64 && !CPU_V7M` instead?
- default n
"n" is the default, so don't add this.
Understood.
Otherwise looks good.

On Fri, Dec 15, 2023 at 01:10:45PM +0100, Csókás Bence wrote:
- 18:53 keltezéssel, Tom Rini írta:
On Thu, Dec 14, 2023 at 05:29:31PM +0100, Csókás Bence wrote:
It may be necessary to set breakpoints etc. on a specific fault handler in SPL. Add a Kconfig option to separate the different handlers into their own individual infinite loops.
Signed-off-by: Csókás Bence csokas.bence@prolan.hu
arch/arm/Kconfig | 10 ++++++++++ arch/arm/lib/vectors.S | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 328e2ddc33..47494cb72b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -79,6 +79,16 @@ config SPL_SYS_NO_VECTOR_TABLE depends on SPL bool +config SPL_USE_SEPARATE_FAULT_HANDLERS
- bool "Use separate fault handlers instead of a single common one"
- depends on !SPL_SYS_NO_VECTOR_TABLE
Will this dep catch that this is only valid for !ARM64 && !CPU_V7M ?
Is it? How so? So should I put `depends on !SPL_SYS_NO_VECTOR_TABLE && !ARM64 && !CPU_V7M` instead?
Well, looking at arch/arm/lib/Makefile, vector.S is only used in the case I said, so you would need to modify the other files as well.
participants (2)
-
Csókás Bence
-
Tom Rini