A duplicate insn is one that is appears to be executed twice in a row. This is currently possible due to -icount and cpu_io_recompile() causing a re-translation of a block. On it's own this won't trigger any tests though. The heuristics that the plugin use can't deal with the x86 rep instruction which (validly) will look like executing the same instruction several times. To avoid problems later we tweak the rules for x86 to run the "inline" version of the plugin. This also has the advantage of increasing coverage of the plugin code (see bugfix in previous commit). Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20210213130325.14781-15-alex.bennee@linaro.org>
48 lines
1.4 KiB
Makefile
48 lines
1.4 KiB
Makefile
#
|
|
# x86 system tests
|
|
#
|
|
# This currently builds only for i386. The common C code is built
|
|
# with standard compiler flags however so we can support both by
|
|
# adding additional boot files for x86_64.
|
|
#
|
|
|
|
I386_SYSTEM_SRC=$(SRC_PATH)/tests/tcg/i386/system
|
|
X64_SYSTEM_SRC=$(SRC_PATH)/tests/tcg/x86_64/system
|
|
|
|
# These objects provide the basic boot code and helper functions for all tests
|
|
CRT_OBJS=boot.o
|
|
|
|
CRT_PATH=$(I386_SYSTEM_SRC)
|
|
LINK_SCRIPT=$(I386_SYSTEM_SRC)/kernel.ld
|
|
LDFLAGS=-Wl,-T$(LINK_SCRIPT) -Wl,-melf_i386
|
|
CFLAGS+=-nostdlib -ggdb -O0 $(MINILIB_INC)
|
|
LDFLAGS+=-static -nostdlib $(CRT_OBJS) $(MINILIB_OBJS) -lgcc
|
|
|
|
TESTS+=$(MULTIARCH_TESTS)
|
|
EXTRA_RUNS+=$(MULTIARCH_RUNS)
|
|
|
|
# building head blobs
|
|
.PRECIOUS: $(CRT_OBJS)
|
|
|
|
%.o: $(CRT_PATH)/%.S
|
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@
|
|
|
|
# Build and link the tests
|
|
%: %.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS)
|
|
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
|
|
|
|
memory: CFLAGS+=-DCHECK_UNALIGNED=1
|
|
|
|
# non-inline runs will trigger the duplicate instruction heuristics in libinsn.so
|
|
run-plugin-%-with-libinsn.so:
|
|
$(call run-test, $@, \
|
|
$(QEMU) -monitor none -display none \
|
|
-chardev file$(COMMA)path=$@.out$(COMMA)id=output \
|
|
-plugin ../../plugin/libinsn.so$(COMMA)arg=inline \
|
|
-d plugin -D $*-with-libinsn.so.pout \
|
|
$(QEMU_OPTS) $*, \
|
|
"$* on $(TARGET_NAME)")
|
|
|
|
# Running
|
|
QEMU_OPTS+=-device isa-debugcon,chardev=output -device isa-debug-exit,iobase=0xf4,iosize=0x4 -kernel
|