Skip to content

Commit bb2e2bf

Browse files
committed
Merge remote-tracking branch 'remotes/xtensa/tags/20200407-xtensa' into staging
target/xtensa fixes for 5.0: - fix pasto in pfwait.r opcode name; - fix memory leak with dynamically allocated xtensa_insnbufs in DisasContext. # gpg: Signature made Wed 08 Apr 2020 00:58:05 BST # gpg: using RSA key 2B67854B98E5327DCDEB17D851F9CC91F83FA044 # gpg: issuer "[email protected]" # gpg: Good signature from "Max Filippov <[email protected]>" [unknown] # gpg: aka "Max Filippov <[email protected]>" [full] # gpg: aka "Max Filippov <[email protected]>" [full] # Primary key fingerprint: 2B67 854B 98E5 327D CDEB 17D8 51F9 CC91 F83F A044 * remotes/xtensa/tags/20200407-xtensa: target/xtensa: statically allocate xtensa_insnbufs in DisasContext target/xtensa: fix pasto in pfwait.r opcode name Signed-off-by: Peter Maydell <[email protected]>
2 parents f3bac27 + fde557a commit bb2e2bf

File tree

3 files changed

+7
-17
lines changed

3 files changed

+7
-17
lines changed

target/xtensa/cpu.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,9 @@ enum {
213213
#define MEMCTL_IL0EN 0x1
214214

215215
#define MAX_INSN_LENGTH 64
216+
#define MAX_INSNBUF_LENGTH \
217+
((MAX_INSN_LENGTH + sizeof(xtensa_insnbuf_word) - 1) / \
218+
sizeof(xtensa_insnbuf_word))
216219
#define MAX_INSN_SLOTS 32
217220
#define MAX_OPCODE_ARGS 16
218221
#define MAX_NAREG 64

target/xtensa/helper.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ static void init_libisa(XtensaConfig *config)
9696

9797
config->isa = xtensa_isa_init(config->isa_internal, NULL, NULL);
9898
assert(xtensa_isa_maxlength(config->isa) <= MAX_INSN_LENGTH);
99+
assert(xtensa_insnbuf_size(config->isa) <= MAX_INSNBUF_LENGTH);
99100
opcodes = xtensa_isa_num_opcodes(config->isa);
100101
formats = xtensa_isa_num_formats(config->isa);
101102
regfiles = xtensa_isa_num_regfiles(config->isa);

target/xtensa/translate.c

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ struct DisasContext {
7272
unsigned cpenable;
7373

7474
uint32_t op_flags;
75-
xtensa_insnbuf insnbuf;
76-
xtensa_insnbuf slotbuf;
75+
xtensa_insnbuf_word insnbuf[MAX_INSNBUF_LENGTH];
76+
xtensa_insnbuf_word slotbuf[MAX_INSNBUF_LENGTH];
7777
};
7878

7979
static TCGv_i32 cpu_pc;
@@ -1173,16 +1173,6 @@ static void xtensa_tr_init_disas_context(DisasContextBase *dcbase,
11731173
dc->cwoe = tb_flags & XTENSA_TBFLAG_CWOE;
11741174
dc->callinc = ((tb_flags & XTENSA_TBFLAG_CALLINC_MASK) >>
11751175
XTENSA_TBFLAG_CALLINC_SHIFT);
1176-
1177-
/*
1178-
* FIXME: This will leak when a failed instruction load or similar
1179-
* event causes us to longjump out of the translation loop and
1180-
* hence not clean-up in xtensa_tr_tb_stop
1181-
*/
1182-
if (dc->config->isa) {
1183-
dc->insnbuf = xtensa_insnbuf_alloc(dc->config->isa);
1184-
dc->slotbuf = xtensa_insnbuf_alloc(dc->config->isa);
1185-
}
11861176
init_sar_tracker(dc);
11871177
}
11881178

@@ -1272,10 +1262,6 @@ static void xtensa_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu)
12721262
DisasContext *dc = container_of(dcbase, DisasContext, base);
12731263

12741264
reset_sar_tracker(dc);
1275-
if (dc->config->isa) {
1276-
xtensa_insnbuf_free(dc->config->isa, dc->insnbuf);
1277-
xtensa_insnbuf_free(dc->config->isa, dc->slotbuf);
1278-
}
12791265
if (dc->icount) {
12801266
tcg_temp_free(dc->next_icount);
12811267
}
@@ -3746,7 +3732,7 @@ static const XtensaOpcodeOps core_ops[] = {
37463732
.name = "pfwait.a",
37473733
.translate = translate_nop,
37483734
}, {
3749-
.name = "pfwait.o",
3735+
.name = "pfwait.r",
37503736
.translate = translate_nop,
37513737
}, {
37523738
.name = "pitlb",

0 commit comments

Comments
 (0)