This changes the VM environment for gitian building to use Ubuntu 14.04 (Trusty).
- Changes compiler version from GCC 4.6 to GCC 4.8, which makes #6211 (using the relevant subset of c++11) possible, and probably results in better code
- Removes some 12.04 specific cruft from descriptors
- The security and symbol checks pass (symbol check reports
clock_gettime
, but this is the same for old descriptors thus unrelated) - Linux and OSX and Windows output is deterministic
Known problems:
Windows build is not deterministic
SOLVED
Every link, a few bytes in the executable near the end of .rodata
are different. These are not a timestamp but apparently random.
I spent some time tracking this down, eventually used a linker map to find that the bytes come from a ephermal object ertr000001.o
. This helped trace this problem to the function pe_create_runtime_relocator_reference
in binutils/ld/pe-dll.c
which leaks a few bytes of heap to the executable by writing uninitialized data (!).
This sounds serious, however apparently this was already solved by the Erinn Clark of the Tor project in 2013: https://sourceware.org/bugzilla/show_bug.cgi?id=16192 . Awesome.
Unfortunately Ubuntu hasn’t included the new binutils in 14.04… @theuni any idea how to handle this? Tor, for a while, manually patched the bytes (well not manually I suppose - in a postprocessing step). Another option would be to use our own binutils, or use an even newer image (but that wouldn’t be long term supported).