mirror of
https://github.com/qemu/qemu.git
synced 2025-08-14 20:31:47 +00:00
tcg: Use uintptr_t in tcg_malloc implementation
Avoid ubsan failure with clang-20, tcg.h:715:19: runtime error: applying non-zero offset 64 to null pointer by not using pointers. Acked-by: Ilya Leoshkevich <iii@linux.ibm.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
e4e839b2ee
commit
c86da2b1dd
@ -357,7 +357,7 @@ static inline TCGRegSet output_pref(const TCGOp *op, unsigned i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct TCGContext {
|
struct TCGContext {
|
||||||
uint8_t *pool_cur, *pool_end;
|
uintptr_t pool_cur, pool_end;
|
||||||
TCGPool *pool_first, *pool_current, *pool_first_large;
|
TCGPool *pool_first, *pool_current, *pool_first_large;
|
||||||
int nb_labels;
|
int nb_labels;
|
||||||
int nb_globals;
|
int nb_globals;
|
||||||
@ -706,7 +706,7 @@ size_t tcg_nb_tbs(void);
|
|||||||
static inline void *tcg_malloc(int size)
|
static inline void *tcg_malloc(int size)
|
||||||
{
|
{
|
||||||
TCGContext *s = tcg_ctx;
|
TCGContext *s = tcg_ctx;
|
||||||
uint8_t *ptr, *ptr_end;
|
uintptr_t ptr, ptr_end;
|
||||||
|
|
||||||
/* ??? This is a weak placeholder for minimum malloc alignment. */
|
/* ??? This is a weak placeholder for minimum malloc alignment. */
|
||||||
size = QEMU_ALIGN_UP(size, 8);
|
size = QEMU_ALIGN_UP(size, 8);
|
||||||
@ -717,7 +717,7 @@ static inline void *tcg_malloc(int size)
|
|||||||
return tcg_malloc_internal(tcg_ctx, size);
|
return tcg_malloc_internal(tcg_ctx, size);
|
||||||
} else {
|
} else {
|
||||||
s->pool_cur = ptr_end;
|
s->pool_cur = ptr_end;
|
||||||
return ptr;
|
return (void *)ptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1331,8 +1331,9 @@ void *tcg_malloc_internal(TCGContext *s, int size)
|
|||||||
p = s->pool_current;
|
p = s->pool_current;
|
||||||
if (!p) {
|
if (!p) {
|
||||||
p = s->pool_first;
|
p = s->pool_first;
|
||||||
if (!p)
|
if (!p) {
|
||||||
goto new_pool;
|
goto new_pool;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!p->next) {
|
if (!p->next) {
|
||||||
new_pool:
|
new_pool:
|
||||||
@ -1351,8 +1352,8 @@ void *tcg_malloc_internal(TCGContext *s, int size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
s->pool_current = p;
|
s->pool_current = p;
|
||||||
s->pool_cur = p->data + size;
|
s->pool_cur = (uintptr_t)p->data + size;
|
||||||
s->pool_end = p->data + p->size;
|
s->pool_end = (uintptr_t)p->data + p->size;
|
||||||
return p->data;
|
return p->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1364,7 +1365,7 @@ void tcg_pool_reset(TCGContext *s)
|
|||||||
g_free(p);
|
g_free(p);
|
||||||
}
|
}
|
||||||
s->pool_first_large = NULL;
|
s->pool_first_large = NULL;
|
||||||
s->pool_cur = s->pool_end = NULL;
|
s->pool_cur = s->pool_end = 0;
|
||||||
s->pool_current = NULL;
|
s->pool_current = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user