Yes I was aware of how it was exported, I just wasn't sure where it came from... But given that the only difference was the first word for each entry, I came to the conclusion that it must be being overwritten at runtime (given that the values are of course queried by the RTS). I just couldn't find where this was. Anyway, I shall try changing it to use bss for all three (pexport doesn't save it, so I hope even "make compiler" would be reproducible, although that's not an objective). This will also have the bonus of saving an incredible 8 or 16 KiB (depending on pointer size) on disk!..
Thanks, James
On 9 Mar 2016, at 18:58, David Matthews <David.Matthews at prolingua.co.uk> wrote:
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
polyml mailing list polyml at inf.ed.ac.uk http://lists.inf.ed.ac.uk/mailman/listinfo/polyml