Dear coreboot folks,

I submitted a bug report to GCC about the build failures we got with GCC
4.8.x¹. Björn Busse noticed that the ASUS M2V-MX SE did not build
anymore. (This was probably not detected by Jenkins because its coreboot
toolchain has to be updated manually.)

The code is in `src/cpu/amd/car/post_cache_as_ram.c` [1]

        __asm__ volatile (
                /* set new esp */ /* before CONFIG_RAMBASE */
                "subl   %0, %%esp\n\t"
                ::"a"( (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE)- 
(CONFIG_RAMTOP) )
                /* discard all registers (eax is used for %0), so gcc redoes 
everything
                   after the stack is moved */
                : "cc", "memory", "%ebx", "%ecx", "%edx", "%esi", "%edi", "%ebp"
        );
        printf("Done.\n");

and gcc throws the following error.

        $ make V=1
        […]
            CC         romstage.inc
        /src/coreboot/util/crossgcc/xgcc/bin/i386-elf-gcc -Wa,--divide 
-fno-stack-protector -Wl,--build-id=none -MMD -Isrc -Isrc/include -Ibuild 
-Isrc/arch/x86/include -Isrc/device/oprom/include -include 
src/include/kconfig.h -Os -pipe -g -nostdinc -nostdlib -Wall -Wundef 
-Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls 
-Wno-trigraphs -Wstrict-aliasing -Wshadow -Werror -fno-common -ffreestanding 
-fno-builtin -fomit-frame-pointer -D__PRE_RAM__ -Isrc -I. -Ibuild -c -S 
src/mainboard/asus/m2v-mx_se/romstage.c -o 
build/mainboard/asus/m2v-mx_se/romstage.pre.inc
        src/mainboard/asus/m2v-mx_se/romstage.c: In function 
'pci_locate_device':
        src/mainboard/asus/m2v-mx_se/romstage.c:196:1: internal compiler error: 
Illegal instruction
        Please submit a full bug report,
        with preprocessed source if appropriate.
        See <http://gcc.gnu.org/bugs.html> for instructions.
        make: *** [build/mainboard/asus/m2v-mx_se/romstage.pre.inc] Error 1

The verbose error is `error: bp cannot be used in asm here`.

The offending code lies in and therefore the patch was reverted by
Patrick Georgi in commit c8883262 (buildgcc: Downgrade to gcc 4.7.3,
handle armv7-a) [2].

My ticket 58758 [3] was closed right away as invalid by Andrew Pinski
and he linked to bug 11807 [4]. Furthermore he replied the following
about the code used in coreboot.

        This code really should be written in pure asm rather than doing
        an inline-asm as GCC can do many different optimizations more
        than just rereading them from the stack.

So it looks like GCC is not going to be changed/fixed and, if we wanted
to update coreboot’s toolchain, we would need to fix our code.


Thanks,

Paul


¹ Sometimes it fails for me with 4.7.3 too. I do not know why, but it
might be related to `.xcompile` not having some flags it should have.
This is another problem though.


[1] http://review.coreboot.org/3930
[2] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58758
[3] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11807

Attachment: signature.asc
Description: This is a digitally signed message part

-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to