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