* fix finding python path which only has python3.

* fix #1246, arm host issue.

* skip assembler tests on non-x86 host.

* update macro of dummy value.

* fix MSVC macro.

* update dummy array value macro.

* restore to original qemu code.
This commit is contained in:
Chen Huitao 2020-05-18 19:57:44 +08:00 committed by GitHub
parent 08240d5453
commit 2c66acf4ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 29 additions and 6 deletions

View File

@ -77,6 +77,11 @@ static const int tcg_target_call_iarg_regs[] = {
TCG_REG_R8,
TCG_REG_R9,
#else
#ifdef _MSC_VER
#ifdef _UC_MSVC_ARRAY_DUMMY
#error "DUP DEF _UC_MSVC_ARRAY_DUMMY"
#endif
#define _UC_MSVC_ARRAY_DUMMY
/* 32 bit mode uses stack based calling convention (GCC default).
We add a dummy value here for MSVC compatibility for the error:
"error C2466: cannot allocate an array of constant size 0"
@ -85,6 +90,7 @@ static const int tcg_target_call_iarg_regs[] = {
*/
0,
#endif
#endif
};
static const int tcg_target_call_oarg_regs[] = {

View File

@ -574,9 +574,6 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
/* Do copy propagation */
for (i = nb_oargs; i < nb_oargs + nb_iargs; i++) {
if (args[i] >= TCG_MAX_TEMPS) {
return NULL;
}
if (temps[args[i]].state == TCG_TEMP_COPY) {
args[i] = find_better_copy(s, args[i]);
}

View File

@ -2378,8 +2378,10 @@ static int tcg_reg_alloc_call(TCGContext *s, const TCGOpDef *def,
flags = args[nb_oargs + nb_iargs + 1];
nb_regs = ARRAY_SIZE(tcg_target_call_iarg_regs);
#if TCG_TARGET_REG_BITS == 32
#ifdef _UC_MSVC_ARRAY_DUMMY
// do this because msvc cannot have arrays with 0 entries.
/* ref: tcg/i386/tcg-target.c: tcg_target_call_iarg_regs,
it is added a dummy value, set back to 0. */
nb_regs = 0;
#endif
if (nb_regs > nb_params) {

View File

@ -7,6 +7,7 @@ ASFLAGS += --32
OBJCOPY = objcopy
UNAME_S := $(shell uname -s)
UNAME_M := $(shell uname -m)
LDLIBS += -pthread
ifeq ($(UNAME_S), Linux)
LDLIBS += -lrt
@ -32,12 +33,16 @@ TEST_PROGS = $(TEST_ASSEMBLY:%.s=%.o)
TEST_BINS = $(TEST_PROGS:%.o=%.bin)
ALL_TESTS = $(ALL_TESTS_SOURCES:%.c=%)
ifneq (,$(findstring x86,$(UNAME_M)))
ALL_TESTS += $(TEST_BINS)
endif
.PHONY: all
all: ${TEST_BINS} ${ALL_TESTS}
all: ${ALL_TESTS}
.PHONY: clean
clean:
rm -rf ${TEST_BINS} ${ALL_TESTS}
rm -rf ${ALL_TESTS}
%.bin: %.o
${OBJCOPY} -O binary $^ $@

View File

@ -92,6 +92,9 @@ static void test_high_address_read_values(void **state)
uc_engine *uc = *state;
struct stat info;
char * code = read_file("high_address.bin", &info);
if (code == NULL) {
return;
}
uint64_t addr = 0x0010000000000001;
//addr = 0x000ffffffffffff8; // uncomment to fix wrong behaviour

View File

@ -57,6 +57,9 @@ static void test_pc_change(void **state)
int32_t r_ecx = 3, r_edx = 15;
struct stat info;
char *code = read_file("pc_change.bin", &info);
if (code == NULL) {
return;
}
#define BASEADDR 0x1000000

View File

@ -42,7 +42,14 @@ do { \
char * read_file(const char *filename, struct stat *info) {
stat(filename, info);
char *code = malloc(info->st_size);
if (code == NULL) {
return NULL;
}
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
free(code);
return NULL;
}
fread(code, info->st_size, 1, fp);
return code;
}