TUD-OS / NRE

NOVA runtime environment (official branch)
GNU General Public License v2.0
33 stars 12 forks source link

Update toolchain to gcc 4.7 or 4.8 #34

Closed blitz closed 11 years ago

blitz commented 11 years ago

GCC 4.6 as used by NRE is not supported anymore.

hrniels commented 11 years ago

I've just upgraded to gcc 4.8.1 (see 1a964c4b51e8cc2cd99115657d80b6a225e9ef21). Actually, it wasn't that hard :) Everything seems to work, except that I get some strange messages:

error in /opt/nre-cross-x86_64/lib/gcc/x86_64-pc-nulnova/4.8.1/crtend.o(.eh_frame); no .eh_frame_hdr table will be created.

I don't know what causes that. Although I think that I had that before...but I don't remember how I fixed that. Anyway, it doesn't seem to cause trouble.

@blitz Could you try to build the toolchain on Fedora or other distributions you have?

parthy commented 11 years ago

Maybe this helps?

http://stackoverflow.com/questions/3695335/c-compilation-error-no-eh-frame-hdr-table-will-be-created

If not, forgive me my spamming ;)

blitz commented 11 years ago

Seems to work and to compile NRE just fine. Toolchain is at http://os.inf.tu-dresden.de/~jsteckli/tmp/nre-cross-fedora19-x86_64.tar.xz

hrniels commented 11 years ago

@parthy No, that seems to be a different problem. The reason why the eh_frame section of crtend.o is wrong is that it contains a zero-length entry at the beginning followed by a CIE (common information entry) and a FDE (frame description entry). A zero-length entry is only allowed at the end, according to a comment in the dwarf-code. With gcc 4.6.3, it contained only the zero-length entry. As far as I understand that, gcc 4.8.1 generates a FDE for the __do_global_ctors_aux function in crtend.o which is why a CIE and FDE is added. But I don't know why he does that. The crtstuff.c is actually not that different from the one in 4.6.3. And even if I use the one from 4.6.3 it still generates them.

I've also upgraded to binutils 2.23.2 (was 2.21.1a previously) in case that this is a binutils issue or a problem of having a recent gcc working together with an rather old binutils. But it didn't help (although I'll stick to the new binutils version now).

@blitz Thanks. Since I'm at it now, I'll also look into not putting the crt* files from NRE into /opt (issue #24). If I'm done with that and have pushed the binutils-version-change, it would be nice if you could generate a cross-compiler with Fedora for x86_32 and x86_64. I'll add them to the download-script then, so that others can simply use them.

blitz commented 11 years ago

@hrniels I can do that. I'll look into generating RPMs as well. Unpacking tarballs as root is scary.

Nils-TUD commented 11 years ago

I've just merged the gcc-4.8.1 branch into master, because the cross-compiler based on gcc 4.8.1 and binutils 2.23.2 is usable now. The crtend.o issue is not relevant anymore since we don't use it. Thus, I'll close this issue. There are already prebuild compilers for 32-bit and 64-bit Ubuntu. As soon as the ones for Fedora are ready, I can add them.

blitz commented 11 years ago

Can't build binutils, because I hit this bug: http://sourceware.org/bugzilla/show_bug.cgi?id=15183

I have texinfo 5.1, which seems to be a bit unfriendly... See #35