OSDN Git Service

nds32: Exception handling
authorGreentime Hu <greentime@andestech.com>
Tue, 24 Oct 2017 06:42:02 +0000 (14:42 +0800)
committerGreentime Hu <greentime@andestech.com>
Thu, 22 Feb 2018 02:44:31 +0000 (10:44 +0800)
commit2923f5ea7738cb9f5372bb9d7ac9886cf4193003
treeee1811a5903a7cc76253c6fdb0161e150cfe80c9
parent001d953ede35dfb135e636af4b41d5dd20a09471
nds32: Exception handling

This patch includes the exception/interrupt entries, pt_reg structure and
related accessors.

/* Unaligned accessing handling*/
Andes processors cannot load/store information which is not naturally
aligned on the bus, i.e., loading a 4 byte data whose start address must
be divisible by 4. If unaligned data accessing is happened, data
unaligned exception will be triggered and user will get SIGSEGV or
kernel oops according to the unaligned address. In order to make user be
able to load/store data from an unaligned address, software load/store
emulation is implemented in arch/nds32/mm/alignment.c to address data
unaligned exception.

Unaligned accessing handling is disabled by default because it is not a
normal case. User can enable this feature by following steps.

A. Compile time:
    1. Enable kernel config CONFIG_ALIGNMENT_TRAP
B. Run time:
    1. Enter /proc/sys/nds32/unaligned_acess folder
    2. Write 1 to file enable_mode to enable unaligned accessing
       handling. User can disable it by writing 0 to this file.
    3. Write 1 to file debug to show which unaligned address is under
       processing. User can disable it by writing 0 to this file.

However, unaligned accessing handler cannot work if this unaligned
address is not accessible such as protection violation. On this
condition, the default behaviors for addressing data unaligned exception
still happen

Signed-off-by: Vincent Chen <vincentc@andestech.com>
Signed-off-by: Greentime Hu <greentime@andestech.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
arch/nds32/include/asm/ptrace.h [new file with mode: 0644]
arch/nds32/kernel/ex-entry.S [new file with mode: 0644]
arch/nds32/kernel/ex-exit.S [new file with mode: 0644]
arch/nds32/kernel/stacktrace.c [new file with mode: 0644]
arch/nds32/kernel/traps.c [new file with mode: 0644]
arch/nds32/mm/alignment.c [new file with mode: 0644]