On Sun, Jan 6, 2013 at 9:40 AM, Brad Smith <b...@comstyle.com> wrote: > On Sat, Jan 05, 2013 at 04:51:01PM +0000, Blue Swirl wrote: >> On Sat, Jan 5, 2013 at 1:48 AM, Brad Smith <b...@comstyle.com> wrote: >> > Supposedly QEMU is able to build with Clang and yet trying to do so >> > I am seeing the build fail as follows.. >> > >> > Comments? >> >> Clang does not support this kind of assembly code yet. The attached >> patch avoids this by using 'as' and 'cpp' for .S files, please try. It >> could still fail if the 'as' does not come from binutils. > > Could this please use $CC -E instead unless overridden? It just > makes it easier if I only have to override CC and not CPP as well > if using LLVM/Clang or even say another copy of GCC and have it > use the appropriate C preprocessor.
I've just posted to the list an updated version using $cc -E. > > BTW, there are some interesting warnings spit out while compiling > with Clang and most of them look to be legit issues with the code. I'm using this to get a warning free build: CFLAGS=-Wno-unused-value -Wno-initializer-overrides -Wno-constant-conversion -Wno-unneeded-internal-declaration Not all warnings are very interesting to fix, for example initializer override warnings comes from somewhat useful shorthand in defining tables and the only warning from -Wconstant-conversion in ARM code looks like a bug in Clang. But there could be additional Clang warning flags besides the defaults that could be useful to enable, using -Weverything (or what was it) produced some interesting warnings. > > QEMU builds and works fine with Clang with this patch applied. > >> > >> > >> > gmake[1]: Entering directory `/home/brad/qemu/pc-bios/optionrom' >> > clang -I. -I/home/brad/qemu -I/home/brad/qemu/include >> > -I/home/brad/qemu/libcacard -Wall -Wstrict-prototypes -Werror >> > -fomit-frame-pointer -fno-builtin -I/home/brad/qemu -fno-stack-protector >> > -MMD -MP -MT multiboot.o -MF ./multiboot.d -Wall -Wstrict-prototypes >> > -Werror -fomit-frame-pointer -fno-builtin -I/home/brad/qemu >> > -fno-stack-protector -c -o multiboot.o multiboot.S >> > multiboot.S:31:1: error: unexpected directive .code16 >> > .code16; .text; .global _start; _start:; .short 0xaa55; .byte (_end - >> > _start) / 512; lret; .org 0x18; .short 0; .short _pnph; _pnph: .ascii >> > "$PnP"; .byte 0x01; .byte ( _pnph_len / 16 ); .short 0x0000; .byte 0x00; >> > .byte 0x00; .long 0x00000000; .short _manufacturer; .short _product; .long >> > 0x00000000; .short 0x0000; .short 0x0000; .short _bev; .short 0x0000; >> > .short 0x0000; .equ _pnph_len, . - _pnph; _bev:; movw %cs, %ax; movw %ax, >> > %ds; >> > ^ >> > multiboot.S:31:8: error: .code16 not supported yet >> > .code16; .text; .global _start; _start:; .short 0xaa55; .byte (_end - >> > _start) / 512; lret; .org 0x18; .short 0; .short _pnph; _pnph: .ascii >> > "$PnP"; .byte 0x01; .byte ( _pnph_len / 16 ); .short 0x0000; .byte 0x00; >> > .byte 0x00; .long 0x00000000; .short _manufacturer; .short _product; .long >> > 0x00000000; .short 0x0000; .short 0x0000; .short _bev; .short 0x0000; >> > .short 0x0000; .equ _pnph_len, . - _pnph; _bev:; movw %cs, %ax; movw %ax, >> > %ds; >> > ^ >> > multiboot.S:71:135: error: unknown directive >> > read_fw 0x0a; mov %eax, %edi; read_fw 0x0b; mov %eax, %ecx; mov $0x12, >> > %ax; mov $0x510, %edx; outw %ax, (%dx); mov $0x511, %dx; cld; .dc.b >> > 0xf3,0x6c >> > >> > ^ >> > multiboot.S:102:2: error: unknown directive >> > .dc.b 0x26,0x67,0x66,0x89,0x4f,0xfc >> > ^ >> > multiboot.S:130:17: error: unexpected token in argument list >> > data32 lgdt %gs:6 >> > ^ >> > multiboot.S:138:15: error: unknown token in expression >> > data32 ljmp *%gs:0 >> > ^ >> > multiboot.S:152:135: error: unknown directive >> > read_fw 0x07; mov %eax, %edi; read_fw 0x08; mov %eax, %ecx; mov $0x11, >> > %ax; mov $0x510, %edx; outw %ax, (%dx); mov $0x511, %dx; cld; .dc.b >> > 0xf3,0x6c >> > >> > ^ >> > gmake[1]: *** [multiboot.o] Error 1 > > -- > This message has been scanned for viruses and > dangerous content by MailScanner, and is > believed to be clean. >