[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