BREAK — Breakpoint

Instruction Word

Slot
Inst
6
3
6
2
6
1
6
0
5
9
5
8
5
7
5
6
5
5
5
4
5
3
5
2
5
1
5
0
4
9
4
8
4
7
4
6
4
5
4
4
4
3
4
2
4
1
4
0
3
9
3
8
3
7
3
6
3
5
3
4
3
3
3
2
3
1
3
0
2
9
2
8
2
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
1
9
1
8
1
7
1
6
1
5
1
4
1
3
1
2
1
1
1
0
9876543210
Format x24 - 24 bit(s) 0
BREAK 000000000100 0000
s 3210
t 3210

Assembler Syntax

BREAK 0..15, 0..15

C Syntax

#include <xtensa/tie/xt_debug.h>

extern void XT_BREAK(immediate imms, immediate immt);

Description

(please consult the Xtensa ® Instruction Set Architecture Reference Manual for any cross references and additional information)

This instruction simply raises an exception when it is executed and PS.INTLEVEL < DEBUGLEVEL. The high-priority vector for DEBUGLEVEL is used. The DEBUGCAUSE register is written as part of raising the exception to indicate that BREAK raised the debug exception. The address of the BREAK instruction is stored in EPC[DEBUGLEVEL]. The s and t fields of the instruction word are not used by the processor; they are available for use by the software. When PS.INTLEVEL >= DEBUGLEVEL, BREAK is a no-op.

The BREAK instruction typically calls a debugger when program execution reaches a certain point (a "breakpoint"). The instruction at the breakpoint is replaced with the BREAK instruction. To continue execution after a breakpoint is reached, the debugger must re-write the BREAK to the original instruction, single-step by one instruction, and then put back the BREAK instruction again.

Writing instructions requires special consideration. See the ISYNC instruction for more information.

When it is not possible to write the instruction memory (for example, for ROM code), the IBREAKA feature provides breakpoint capabilities (see Debug Option).

Software can also use BREAK to indicate an error condition that requires the programmer's attention. The s and t fields may encode information about the situation.

BREAK is a 24-bit instruction. The BREAK.N density-option instruction performs a similar operation in a 16-bit encoding.

Operation

if PS.INTLEVEL < DEBUGLEVEL then
	EPC[DEBUGLEVEL] ← PC
	EPS[DEBUGLEVEL] ← PS
	DEBUGCAUSE ← 001000
	nextPC ← InterruptVector[DEBUGLEVEL]
	PS.EXCM ← 1
	PS.INTLEVEL ← DEBUGLEVEL
endif

Exceptions

EveryInst Group (see EveryInst Group:)DebugExcep(BREAK) if Debug Option

Implementation Pipeline

In Out
PSEXCM Mstage, PSINTLEVEL Mstage

Protos that use BREAK

proto BREAK { in immediate imms, in immediate immt }{}{
BREAK imms + 0, immt + 0;
}