The "ioarea" is a piece of memory that is initialised by the run-time system. It contains pointers to assembly code for run-time system calls, as well as a few other things. I think what's happening is that the export function is simply copying the current contents to the object file. It's going to be overwritten when it's loaded so in a way it doesn't matter. See https://github.com/polyml/polyml/blob/master/libpolyml/exporter.cpp#L496 .
The rest of the object file can contain pointers to various locations in the ioarea so there needs to be something that can be used as the target of relocation entries. Possibly the correct solution is to use a bss (uninitialised data) section. I think the reason it doesn't at the moment is that there are three different "exporters", ELF, MachO and PECOFF and they all do it differently.
David
On 09/03/2016 16:56, James Clarke wrote:
Hi, I?ve been working on making Poly/ML build reproducibly (https://reproducible-builds.org), specifically the Debian package, although it should be distro-agnostic. The first step was getting timestamps to be deterministic using SOURCE_DATE_EPOCH (see https://reproducible-builds.org/docs/timestamps/), and I have done this, both for libpolyml?s different export formats, and for PolyML.make. This was sufficient when disabling native code generation. However, using x86 native code generation, ioarea is not reproducible. Specifically, for every defined entry, the first word (which I believe is the length word?) differs, with the rest of the entry zero. An example (ioarea starts at 0x01029010; sizeof(PolyWord) is 8 and IO_SPACING is 8, so 0x01029050 is entry 1):
1 Hex??dump??of??section??'.?data?: ? 1 Hex??dump??of??section??'.?data':? 2 ????0x01029000??00000000??00000000??08900201??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 2 ????0x01029000??00000000??00000000??08900201??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 3 ????0x01029010??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 3 ????0x01029010??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 4 ????0x01029020??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 4 ????0x01029020??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 5 ????0x01029030??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 5 ????0x01029030??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 6 ????0x01029040??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 6 ????0x01029040??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 7 ????0x01029050??cc495964??797f0000??00000000??00000000??.?IYdy.?.?.?.?.?.?.?.?.?.?.? 7 ????0x01029050??cc1944ae??577f0000??00000000??00000000??.?.?D.?W.?.?.?.?.?.?.?.?.?.?.? 8 ????0x01029060??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 8 ????0x01029060??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 9 ????0x01029070??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 9 ????0x01029070??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 10 ????0x01029080??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 10 ????0x01029080??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 11 ????0x01029090??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 11 ????0x01029090??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 12 ????0x010290a0??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 12 ????0x010290a0??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 13 ????0x010290b0??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 13 ????0x010290b0??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 14 ????0x010290c0??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.? 14 ????0x010290c0??00000000??00000000??00000000??00000000??.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?
Where are these coming from, and do you have any ideas for how to make sure they are reproducible?
Regards, James
polyml mailing list polyml at inf.ed.ac.uk http://lists.inf.ed.ac.uk/mailman/listinfo/polyml