ld: Handle extended-length data structures in PDB types
authorMark Harmstone <mark@harmstone.com>
Mon, 26 Dec 2022 20:47:49 +0000 (20:47 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 31 Dec 2022 08:56:23 +0000 (19:26 +1030)
commitfdf591c4c6d065d29461e7966809e97bcaea7e8b
tree8921b6ffa1d8c3b608902995c79851c9842dd500
parent826eed802778ceb59ad6f645130917d247f1415b
ld: Handle extended-length data structures in PDB types

A few fixes to minor issues I've discovered in my PDB patches.

* If sizes or offsets are greater than 0x8000, they get encoded as
extended values in the same way as for enum values - e.g. a LF_ULONG
.short followed by a .long.

* I've managed to coax MSVC to produce another type, LF_VFTABLE, which
is seen when dealing with COM. I don't think LLVM emits this. Note that
we can't just implement everything in Microsoft's header files, as most
of it is obsolete.

* Fixes a stupid bug in the test program, where I was adding an index to
a size. The index was hard-coded to 0, so this didn't cause any actual
issues.
ld/pdb.c
ld/pdb.h
ld/testsuite/ld-pe/pdb-types1-hashlist.d
ld/testsuite/ld-pe/pdb-types1-typelist.d
ld/testsuite/ld-pe/pdb-types1b.s
ld/testsuite/ld-pe/pdb.exp