2014-05-18 11 views
5

Quando si compila un progetto ChibiOS-RT, ottengo il seguente errore in fase di collegamento (con braccio-nessuno-EABI-gcc 4.8):braccio-nessuno-EABI-gcc 4.8 errore di segmentazione (ChibiOS-RT)

../../../../test/rt/test.c: In function 'TestThread': 
../../../../test/rt/test.c:314:7: internal compiler error: Segmentation fault: 11 
msg_t TestThread(void *p) { 
^
libbacktrace could not find executable to open 
Please submit a full bug report, 
with preprocessed source if appropriate. 
See <http://gcc.gnu.org/bugs.html> for instructions. 
lto-wrapper: arm-none-eabi-gcc returned 1 exit status 
/usr/gcc-arm-none-eabi-4_8-2013q4/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld: lto-wrapper failed 
collect2: error: ld returned 1 exit status 
make: *** [build/ch.elf] Error 1 

Questo NON si verifica con arm-none-eabi-gcc 4.7.

Questo è uno dei file di build del sistema operativo, quindi non voglio scherzare con esso - e non ho mai visto gcc stesso riscontrare un errore di segmentazione durante la costruzione. Inoltre, si verifica quando si costruisce qualsiasi progetto, anche se completamente invariato dal repository di ChibiOS di root.

Qualche consiglio su come diagnosticare questo problema?

+1

In primo luogo, questo succede ogni volta * * si collega questa cosa particolare con questo compilatore ? In caso contrario, quello che hai è una RAM cattiva. In secondo luogo, prova a cancellare e reinstallare arm-none-eabi-gcc-4.8 * e * qualunque sia la versione di binutils. Se nessuno di questi risolve il problema, hai trovato un bug onesto nel compilatore e/o linker e dovresti consultare 'gcc-help @ gcc.gnu.org' per consigli su come segnalarlo. – zwol

+0

Un ICE è un bug; GCC stesso ha riconosciuto che qualcosa non va. Se ha funzionato bene con 4.7, tornare a 4.7 e usarlo per costruire 4.8 o 4.9. È strano; normalmente, GCC ottiene un buon allenamento costruendo se stesso e le sue librerie di supporto. –

risposta

4

GCC 4.8 non supporta LTO e ggdb abilitato insieme. Basta disabilitare l'uno o l'altro.

provare a configurare il vostro Makefile:

USE_LTO = no 

o

USE_OPT = -O2 -fomit-frame-pointer -falign-functions=16 

senza bandiera -ggdb