[PATCH] bfd/pdb: fix bitmap generation in pdb_write_bitmap

Mark Harmstone mark@harmstone.com
Wed Sep 4 17:15:16 GMT 2024


Thanks, I'll send a patch. -Wmaybe-uninitialized doesn't trigger on -O0, this has
tripped me up before...

Mark

On 04/09/2024 11:27, Mark Wielaard wrote:
> Hi,
> 
> On Sun, Sep 01, 2024 at 05:47:15PM +0100, Mark Harmstone wrote:
>> MSVC 2022 is more pedantic than MSVC 2019 when it comes to loading PDB
>> files, and was rejecting PDB files generated by binutils because of
>> their invalid free-space bitmaps. This patch fixes pdb_write_bitmap so
>> we generate files that MSVC will accept.
>>
>> Specifically there were three things we were doing wrong:
>>
>> - We weren't including the superblock (block 0)
>>
>> - We were setting bits in bytes backwards (MSB to LSB, rather than LSB to MSB)
>>
>> - We should have been marking the contents of stream 0 as free. This is
>>    because, as the comment says, it's intended to be used for the
>>    directory for the previous write, to allow atomic updates.
>> ---
>>   bfd/pdb.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++---------
>>   1 file changed, 48 insertions(+), 9 deletions(-)
> 
> This seems to have broken the gdb build on some builders with older gcc:
> https://builder.sourceware.org/buildbot/#/changes/61630
> gdb-debian-armhf, gdb-ubuntu-riscv, gdb-alma-x86_64 and gdb-ibm-power9
> 
> In function ‘pdb_write_bitmap’,
>      inlined from ‘pdb_write_contents’ at ../../binutils-gdb/bfd/pdb.c:780:8:
> ../../binutils-gdb/bfd/pdb.c:675:29: error: ‘stream0_start’ may be used uninitialized [-Werror=maybe-uninitialized]
>    675 |           if (stream0_start % 8)
>        |               ~~~~~~~~~~~~~~^~~
> ../../binutils-gdb/bfd/pdb.c: In function ‘pdb_write_contents’:
> ../../binutils-gdb/bfd/pdb.c:721:12: note: ‘stream0_start’ was declared here
>    721 |   uint32_t stream0_start;
>        |            ^~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> make[3]: *** [Makefile:1768: pdb.lo] Error 1
> make[3]: *** Waiting for unfinished jobs....
> 
> Maybe just initialize to zero to make the compiler happy?
> 
> Thanks,
> 
> Mark



More information about the Binutils mailing list