On 2024-12-07, Gioele Barabucci wrote:
> On 07/12/24 06:01, Vagrant Cascadian wrote:
>> On 2024-12-07, Gioele Barabucci wrote:
>>> the libraries and executables of many cmake-based packages gain extra
>>> zero bytes in their .dynstr ELF section when rebuilt. (This accounts for
>>> about 15% of the failed rebuilds.)
>>>
>>>   From <https://reproduce.debian.net/api/v0/builds/105657/diffoscope>:
>>>
>>> ```
>>> ─ readelf --wide --decompress --hex-dump=.dynstr {}
>>> @@ -1275,9 +1275,10 @@
>>>      0x00009388 00474c49 42435858 5f332e34 2e323100 .GLIBCXX_3.4.21.
>>>      0x00009398 43585841 42495f31 2e330047 4c494243 CXXABI_1.3.GLIBC
>>>      0x000093a8 58585f33 2e342e32 3000474c 49424358 XX_3.4.20.GLIBCX
>>>      0x000093b8 585f332e 34000000 00000000 00000000 X_3.4...........
>>>      0x000093c8 00000000 00000000 00000000 00000000 ................
>>>      0x000093d8 00000000 00000000 00000000 00000000 ................
>>>      0x000093e8 00000000 00000000 00000000 00000000 ................
>>> -  0x000093f8 00000000 0000                       ......
>>> +  0x000093f8 00000000 00000000 00000000 00000000 ................
>>> +  0x00009408 00000000 000000                     .......
>>> ```
>>>
>>> Oddly, sometimes the number of zero bytes added is odd.
>> 
>> My hunch is that this might be a side-effect of building in the wrong
>> build path, as mentioned in:
>> 
>>    https://bugs.debian.org/1089087
>
> That could indeed be the case.
>
> The build paths for 105657 are
>
>      /build/reproducible-path/simbody-3.7+dfs
>
> and
>
>      /build/reproducible-path/simbody-3.7+dfs/simbody-3.7+dfs
>
> The second path is 16+1 characters longer and the .dynstr section 
> contains indeed 17 extra zeros.

That does seem like commpelling evidence! :)

> Does GCC blank out (replace with zeroes) the build path?

I do not know the specifics of the implementation at that level, but
most debian builds are done with -ffile-prefix-map=BUILDPATH=. by
dpkg-buildflags setting it in various *FLAGS variables, and I have
observed behavior much like this in the past, back when we used to
intentionally vary build paths on tests.reproducible-builds.org for
unstable and experimental.

The workaround, of course, is to use an identical build path.


live well,
  vagrant

Attachment: signature.asc
Description: PGP signature

Reply via email to