Re: [Qemu-devel] [PATCH] Get tests/tcg building, fix unused variable warning due to wrong extended asm operand, fix the 'test' make target.
Peter, do you have a second to look at this? I've got a new test in tests/tcg that checks fprem correctness (or at least compares with h/w...) that depends on this. On Fri, Jul 13, 2012 at 4:44 AM, 陳韋任 (Wei-Ren Chen) che...@iis.sinica.edu.tw wrote: Tested-by: Wei-Ren Chen On Fri, Jul 13, 2012 at 02:55:13AM -0400, Catalin Patulea wrote: Not all tests pass, but at least they can be run using 'make test'. To build individual tests: $ cd $BUILD_PATH/tests/tcg $ SRC_PATH=path/to/qemu make target [snip] Regards, chenwj -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 Homepage: http://people.cs.nctu.edu.tw/~chenwj
Re: [Qemu-devel] [PATCH] Get tests/tcg building, fix unused variable warning due to wrong extended asm operand, fix the 'test' make target.
On 13 July 2012 07:55, Catalin Patulea catal...@google.com wrote: Not all tests pass, but at least they can be run using 'make test'. To build individual tests: $ cd $BUILD_PATH/tests/tcg $ SRC_PATH=path/to/qemu make target I don't know enough about our test makefile structure to know if this is right (try Anthony) but some comments below. (It looks like some of this is fixing bustage from Anthony's commit c09015dd.) Signed-off-by: Catalin Patulea catal...@google.com --- tests/tcg/Makefile| 16 ++-- tests/tcg/test-i386.c |3 ++- tests/tcg/test_path.c | 13 +++-- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/tests/tcg/Makefile b/tests/tcg/Makefile index 15e36a2..3256a98 100644 --- a/tests/tcg/Makefile +++ b/tests/tcg/Makefile @@ -1,13 +1,13 @@ --include ../config-host.mak +-include ../../config-host.mak -include $(SRC_PATH)/rules.mak -$(call set-vpath, $(SRC_PATH)/tests) +$(call set-vpath, $(SRC_PATH)/tests/tcg) -QEMU=../i386-linux-user/qemu-i386 -QEMU_X86_64=../x86_64-linux-user/qemu-x86_64 +QEMU=../../i386-linux-user/qemu-i386 +QEMU_X86_64=../../x86_64-linux-user/qemu-x86_64 CC_X86_64=$(CC_I386) -m64 -QEMU_INCLUDES += -I.. +QEMU_INCLUDES += -I../.. CFLAGS=-Wall -O2 -g -fno-strict-aliasing #CFLAGS+=-msse2 LDFLAGS= @@ -36,6 +36,7 @@ TESTS += $(I386_TESTS) endif all: $(patsubst %,run-%,$(TESTS)) +test: all # rules to run tests @@ -74,7 +75,10 @@ run-test_path: test_path # rules to compile tests test_path: test_path.o + $(CC_I386) $(LDFLAGS) $(LIBS) -o $@ $^ This won't compile: ccache gcc -m32 -lrt -pthread -lgthread-2.0 -lrt -lglib-2.0-o test_path test_path.o test_path.o: In function `qemu_iovec_init': /home/pm215/src/qemu/qemu/cutils.c:142: undefined reference to `g_malloc' test_path.o: In function `qemu_iovec_add': /home/pm215/src/qemu/qemu/cutils.c:166: undefined reference to `g_realloc' test_path.o: In function `qemu_iovec_destroy': /home/pm215/src/qemu/qemu/cutils.c:210: undefined reference to `g_free' collect2: ld returned 1 exit status You need to have the $(LIBS) after the $^. + test_path.o: test_path.c + $(CC_I386) $(QEMU_INCLUDES) $(GLIB_CFLAGS) $(CFLAGS) $(LDFLAGS) -c -o $@ $^ Ditto. hello-i386: hello-i386.c $(CC_I386) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $ @@ -86,7 +90,7 @@ testthread: testthread.c # i386/x86_64 emulation test (test various opcodes) */ test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \ test-i386.h test-i386-shift.h test-i386-muldiv.h - $(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ \ + $(CC_I386) $(QEMU_INCLUDES) $(CFLAGS) $(LDFLAGS) -o $@ \ $(D)/test-i386.c $(D)/test-i386-code16.S $(D)/test-i386-vm86.S -lm test-x86_64: test-i386.c \ diff --git a/tests/tcg/test-i386.c b/tests/tcg/test-i386.c index 8e64bba..acbc9c9 100644 --- a/tests/tcg/test-i386.c +++ b/tests/tcg/test-i386.c @@ -17,6 +17,7 @@ * along with this program; if not, see http://www.gnu.org/licenses/. */ #define _GNU_SOURCE +#include compiler.h // QEMU_PACKED checkpatch complains about this //-syntax comment; might as well just drop it. #include stdlib.h #include stdio.h #include string.h @@ -784,7 +785,7 @@ void fpu_clear_exceptions(void) long double fpregs[8]; } float_env32; -asm volatile (fnstenv %0\n : : m (float_env32)); +asm volatile (fnstenv %0\n : =m (float_env32)); float_env32.fpus = ~0x7f; asm volatile (fldenv %0\n : : m (float_env32)); } This doesn't seem to be sufficient for test-i386 to compile for me: ccache gcc -m32 -I/home/pm215/src/qemu/qemu/slirp -I. -I/home/pm215/src/qemu/qemu -I/home/pm215/src/qemu/qemu/fpu -I../.. -Wall -O2 -g -fno-strict-aliasing -o test-i386 \ ./test-i386.c ./test-i386-code16.S ./test-i386-vm86.S -lm ./test-i386.c: Assembler messages: ./test-i386.c:1831: Error: expecting lockable instruction after `lock' Since 'lock nop' isn't valid we probably need to do this with a .byte directive to emit the sequence we require. (this is gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 on x86.) diff --git a/tests/tcg/test_path.c b/tests/tcg/test_path.c index 7265a94..a064eea 100644 --- a/tests/tcg/test_path.c +++ b/tests/tcg/test_path.c @@ -1,11 +1,12 @@ /* Test path override code */ -#include ../config-host.h -#include ../qemu-malloc.c -#include ../cutils.c -#include ../path.c -#include ../trace.c +#define _GNU_SOURCE +#include config-host.h +#include iov.c +#include cutils.c +#include path.c +#include trace.c #ifdef CONFIG_TRACE_SIMPLE -#include ../simpletrace.c +#include ../trace/simple.c #endif #include stdarg.h The whole way this test works looks pretty foul to me, so yeah, whatever :-) -- PMM
Re: [Qemu-devel] [PATCH] Get tests/tcg building, fix unused variable warning due to wrong extended asm operand, fix the 'test' make target.
On Mon, Jul 16, 2012 at 3:08 PM, Peter Maydell peter.mayd...@linaro.org wrote: You need to have the $(LIBS) after the $^. Done. test_path.o: test_path.c + $(CC_I386) $(QEMU_INCLUDES) $(GLIB_CFLAGS) $(CFLAGS) $(LDFLAGS) -c -o $@ $^ Ditto. I don't think I meant to put $(LDFLAGS) in there. This is just a compilation step, after all. I've taken it out, please let me know if you still have any troubles building. +#include compiler.h // QEMU_PACKED checkpatch complains about this //-syntax comment; might as well just drop it. Done. -asm volatile (fnstenv %0\n : : m (float_env32)); +asm volatile (fnstenv %0\n : =m (float_env32)); float_env32.fpus = ~0x7f; asm volatile (fldenv %0\n : : m (float_env32)); } This doesn't seem to be sufficient for test-i386 to compile for me: ccache gcc -m32 -I/home/pm215/src/qemu/qemu/slirp -I. -I/home/pm215/src/qemu/qemu -I/home/pm215/src/qemu/qemu/fpu -I../.. -Wall -O2 -g -fno-strict-aliasing -o test-i386 \ ./test-i386.c ./test-i386-code16.S ./test-i386-vm86.S -lm ./test-i386.c: Assembler messages: ./test-i386.c:1831: Error: expecting lockable instruction after `lock' Since 'lock nop' isn't valid we probably need to do this with a .byte directive to emit the sequence we require. I don't understand why gcc would be generating a lock prefix here.. (this is gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 on x86.) I'm on gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) and it appears unreasonably difficult to get 4.6 on my machine. I'll keep trying but for now I'm shooting blind. Wei-Ren, what version of gcc are you running? (and had success with?) #include stdarg.h The whole way this test works looks pretty foul to me, so yeah, whatever :-) I agree that this is grotesque - I'm just trying to make the minimal number of changes to unbreak things so that I can get on with my fprem life ;-)
Re: [Qemu-devel] [PATCH] Get tests/tcg building, fix unused variable warning due to wrong extended asm operand, fix the 'test' make target.
On 16 July 2012 21:00, Catalin Patulea catal...@google.com wrote: On Mon, Jul 16, 2012 at 3:08 PM, Peter Maydell peter.mayd...@linaro.org wrote: This doesn't seem to be sufficient for test-i386 to compile for me: ccache gcc -m32 -I/home/pm215/src/qemu/qemu/slirp -I. -I/home/pm215/src/qemu/qemu -I/home/pm215/src/qemu/qemu/fpu -I../.. -Wall -O2 -g -fno-strict-aliasing -o test-i386 \ ./test-i386.c ./test-i386-code16.S ./test-i386-vm86.S -lm ./test-i386.c: Assembler messages: ./test-i386.c:1831: Error: expecting lockable instruction after `lock' Since 'lock nop' isn't valid we probably need to do this with a .byte directive to emit the sequence we require. I don't understand why gcc would be generating a lock prefix here.. Have you looked at the code? We're specifically asking for one: asm volatile(lock nop); (which we expect to be invalid). We just need to handle that the same way we do for the case a bit later, by using asm volatile(.byte 0xsomething, 0xsomething); to emit the sequence we want rather than asking gas to do something it thinks is illegal. Since you have an assembler that doesn't complain about lock nop you should be able to disassemble the binary it creates to find out what the byte sequence we need is. (this is gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 on x86.) I'm on gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) and it appears unreasonably difficult to get 4.6 on my machine. If you have the disk space then setting up a chroot environment of a newer ubuntu is probably the easiest thing. -- PMM
Re: [Qemu-devel] [PATCH] Get tests/tcg building, fix unused variable warning due to wrong extended asm operand, fix the 'test' make target.
On Mon, Jul 16, 2012 at 5:11 PM, Peter Maydell peter.mayd...@linaro.org wrote: On 16 July 2012 21:00, Catalin Patulea catal...@google.com wrote: On Mon, Jul 16, 2012 at 3:08 PM, Peter Maydell peter.mayd...@linaro.org wrote: ccache gcc -m32 -I/home/pm215/src/qemu/qemu/slirp -I. -I/home/pm215/src/qemu/qemu -I/home/pm215/src/qemu/qemu/fpu -I../.. -Wall -O2 -g -fno-strict-aliasing -o test-i386 \ ./test-i386.c ./test-i386-code16.S ./test-i386-vm86.S -lm ./test-i386.c: Assembler messages: ./test-i386.c:1831: Error: expecting lockable instruction after `lock' Since you have an assembler that doesn't complain about lock nop you should be able to disassemble the binary it creates to find out what the byte sequence we need is. For the readers: PATCHv2 does exactly that, thanks for reviewing it. (this is gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 on x86.) I'm on gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) and it appears unreasonably difficult to get 4.6 on my machine. If you have the disk space then setting up a chroot environment of a newer ubuntu is probably the easiest thing. That is a really great idea, will do.
Re: [Qemu-devel] [PATCH] Get tests/tcg building, fix unused variable warning due to wrong extended asm operand, fix the 'test' make target.
Tested-by: Wei-Ren Chen On Fri, Jul 13, 2012 at 02:55:13AM -0400, Catalin Patulea wrote: Not all tests pass, but at least they can be run using 'make test'. To build individual tests: $ cd $BUILD_PATH/tests/tcg $ SRC_PATH=path/to/qemu make target [snip] Regards, chenwj -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 Homepage: http://people.cs.nctu.edu.tw/~chenwj