mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
tcg: Diagnose referenced labels that have not been emitted
Currently, a jump to a label that is not defined anywhere will
be emitted not be relocated. This results in a jump to a random
jump target. With tcg debugging, print a diagnostic to the -d op
file and abort.
This could help debug or detect errors like
c2d9644e6d
("target/arm: Fix crash on conditional instruction in an IT block")
Reported-by: Roman Kapl <code@rkapl.cz>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
a044e3de29
commit
bef16ab4e6
3 changed files with 33 additions and 3 deletions
12
tcg/tcg.h
12
tcg/tcg.h
|
@ -244,16 +244,21 @@ typedef struct TCGRelocation {
|
|||
intptr_t addend;
|
||||
} TCGRelocation;
|
||||
|
||||
typedef struct TCGLabel {
|
||||
typedef struct TCGLabel TCGLabel;
|
||||
struct TCGLabel {
|
||||
unsigned present : 1;
|
||||
unsigned has_value : 1;
|
||||
unsigned id : 15;
|
||||
unsigned id : 14;
|
||||
unsigned refs : 16;
|
||||
union {
|
||||
uintptr_t value;
|
||||
tcg_insn_unit *value_ptr;
|
||||
TCGRelocation *first_reloc;
|
||||
} u;
|
||||
} TCGLabel;
|
||||
#ifdef CONFIG_DEBUG_TCG
|
||||
QSIMPLEQ_ENTRY(TCGLabel) next;
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct TCGPool {
|
||||
struct TCGPool *next;
|
||||
|
@ -685,6 +690,7 @@ struct TCGContext {
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_TCG
|
||||
QSIMPLEQ_HEAD(, TCGLabel) labels;
|
||||
int temps_in_use;
|
||||
int goto_tb_issue_mask;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue