leoheck / ubuntu-config

Scripts to configure Ubuntu hosts
MIT License
3 stars 2 forks source link

GNU g++ / Mentor sscom - Linking Issues #19

Open leoheck opened 8 years ago

leoheck commented 8 years ago

Não sei por qual motivo, mas Ruaro, gnomo, Andre não estão conseguindo compilar SystemC mais:

Quando ocorre problema:

Não funcionan na maquina do Ruaro, LHeck, Gnomo (gaphl14, gaphl12, gaphl56)

Maquina que estão funcionando

Compilando com o Questa (na verdade o problema é na hora de juntar os objetos)

sccom -link 
Start time: 18:08:26 on Aug 15,2016

QuestaSim-64 sccom 10.4a compiler 2015.03 Mar 24 2015

/soft64/mentor/ferramentas/questa/10.4a/questasim/gcc-4.7.4-linux_x86_64/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.7.4/ld: /lib/crti.o: unrecognized relocation (0x2a) in section `.init'
/soft64/mentor/ferramentas/questa/10.4a/questasim/gcc-4.7.4-linux_x86_64/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.7.4/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
** Error: (sccom-6126) Linking failed. Creation of work/systemc.so failed.
End time: 18:08:26 on Aug 15,2016, Elapsed time: 0:00:00
Errors: 2, Warnings: 0

Compilando com o g++ (na verdade o problema é na hora de juntar os objetos)

'Generating HeMPS ...'
g++ -I./ -o HeMPS queue.o switchcontrol.o router_cc.o mlite_cpu.o dmni.o ram.o pe.o hemps.o test_bench.o -L. -Linc/. -lsystemc
pe.o: In function `sc_core::sc_in<sc_dt::sc_uint<32> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:304: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
pe.o: In function `sc_core::sc_inout<sc_dt::sc_uint<30> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:1165: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
pe.o: In function `sc_core::sc_inout<sc_dt::sc_uint<32> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:1165: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
pe.o: In function `sc_dt::sc_uint_base::print(std::ostream&) const':
/soft64/util/accelera/systemc/2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const'
/soft64/util/accelera/systemc/2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const'
/soft64/util/accelera/systemc/2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const'
/soft64/util/accelera/systemc/2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const'
/soft64/util/accelera/systemc/2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const'
pe.o:/soft64/util/accelera/systemc/2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: more undefined references to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const' follow
test_bench.o: In function `sc_core::sc_inout<sc_dt::sc_uint<4> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:1165: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test_bench.o: In function `sc_core::sc_inout<sc_dt::sc_uint<15> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:1165: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test_bench.o: In function `sc_core::sc_inout<sc_dt::sc_uint<8> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:1165: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test_bench.o: In function `sc_core::sc_in<sc_dt::sc_uint<4> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:304: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test_bench.o: In function `sc_core::sc_in<sc_dt::sc_uint<30> >::end_of_elaboration()':
/soft64/util/accelera/systemc/2.3.1/include/sysc/communication/sc_signal_ports.h:304: undefined reference to `sc_core::sc_trace(sc_core::sc_trace_file*, sc_dt::sc_uint_base const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
test_bench.o: In function `sc_dt::sc_uint_base::print(std::ostream&) const':
/soft64/util/accelera/systemc/2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: undefined reference to `sc_dt::sc_uint_base::to_string[abi:cxx11](sc_dt::sc_numrep, bool) const'
collect2: error: ld returned 1 exit status
makefile:35: recipe for target 'HeMPS' failed

Alguns reports relacionados: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808205 dirkvdb/ps3netsrv--#13

leoheck commented 8 years ago

Trocando o ld que vem com o Questa 4.7.4 pelo que vem com que tem no Ubuntu 16.04, o passo de link funcionou. Como trocar o toolchain/binutils do Questa de forma elegnate e permanente, incluindo versões futuras?

leoheck commented 8 years ago

Bom, pra ficar claro, vou reportar o que eu fiz para resolver o problema temporáriamente nas duas abordagens. Estou referenciando a Hemps, onde isso foi observado https://github.com/GaphGroup/hemps/issues/1

Acho que os problemas com q++ e questa podem não estar relacionados. Pelo menos, as soluções foram diferentes.

1 - Arrumando a compilação usando g++

Aqui eu simplesmente adicionei um define que estava faltando. Isso pode ser feito por linha de comando, como por exemplo:

g++ -D_GLIBCXX_USE_CXX11_ABI=0

2 - Arrumando a compilação do Mentor Questa 10.4a [WORKAROUND]

Veja a solução mais elegante na próxima postagem

Aqui eu consegui fazer funcionar usando o ld da máquina do usuário ao invés do ld que vem com o Questa

cd /soft64/mentor/ferramentas/questa/10.4a/questasim/
cp -r gcc-4.7.4-linux_x86_64 gcc-4.7.4-linux_x86_64-mod
cd gcc-4.7.4-linux_x86_64-mod
rm -rf libexec/gcc/x86_64-unknown-linux-gnu/4.7.4/ld
ln -ls /usr/bin/ld libexec/gcc/x86_64-unknown-linux-gnu/4.7.4/ld

Na hora de compilar use a nova pasta modificada:

sscom -cpppath /soft64/mentor/ferramentas/questa/10.4a/questasim/gcc-4.7.4-linux_x86_64-mod-lheck/bin/g++
leoheck commented 8 years ago

Boa, consegui fazer funcionar com o Questa sem gabiarra. Funcionou no meu Ubuntu 16.04

Adicionar na compilação e link essa flag:

-B/usr/bin/

Isso vai instruir o gcc a usar o linker da máquina que está mais atualizado com relação a libc. O gcc do Questa ainda vai estar sendo usado.