[llvm] [llvm-pdbutil] Avoid reading EC names from non-EC modules (PR #223253)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 13 09:56:34 PDT 2026
https://github.com/oltolm updated https://github.com/llvm/llvm-project/pull/223253
>From ed73b011069adb7790ca9719441b20385fa47803 Mon Sep 17 00:00:00 2001
From: Oleg Tolmatcev <oleg.tolmatcev at gmail.com>
Date: Sun, 13 Sep 2026 17:05:54 +0200
Subject: [PATCH] [llvm-pdbutil] Handle zero EC name indices without an EC name
table
The module dumper resolves PDB and source file name indices through the EC
name table even when an index is zero. For PDBs without an EC name table,
this causes `dump --modules` to fail with:
Unexpected error processing modules: Stream Error: The stream is too short
to perform the requested operation.
Treat a zero name index as an empty string without consulting the EC name
table. Continue resolving nonzero indices normally.
---
.../test/DebugInfo/PDB/Inputs/no-ec-names.pdb | Bin 0 -> 19456 bytes
llvm/test/DebugInfo/PDB/pdbdump-headers.test | 7 +++++
llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp | 24 +++++++++++-------
3 files changed, 22 insertions(+), 9 deletions(-)
create mode 100644 llvm/test/DebugInfo/PDB/Inputs/no-ec-names.pdb
diff --git a/llvm/test/DebugInfo/PDB/Inputs/no-ec-names.pdb b/llvm/test/DebugInfo/PDB/Inputs/no-ec-names.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..9bb124216ce60af4283b005f6afcb19e0170e7ee
GIT binary patch
literal 19456
zcmeHOO>9(E6h3c2><=yNpaw{kw?JbGeXqq*OryyQ(;$RGYKSfj3)(kN9D$i;W*XYW
z1q<Vn6&n&4tc(j?lejT4F%jd!$c6w57O+4Qni3br1>^VKJGXgxOxlp9(Pz&|&pqee
zbLPG~- at JRzz30B3ti<(NqxNyrFNLN3`~8!rkNSs$k&(WhJ(H&ev{l4|*a>d(8nnd<
zEfoPpAm<49@>feq5l{p+CjvR2zO?&_fFiIC1hBkUQUnx%O^QH2zBlK96X0p^-`MO=
zK~93-1V;stU8ws7`gO36>jB8^;1|H#z%PQkz}?^;a4(qlJ}}$g0p at 20!9}o=BA^H;
z0*Zhlpa}fC2wV+Dz3E$Deaakv^8ME8jlDPTeEZ{rPagmF(N)IvusU-wX_zAbME(`&
zI?W{j>E8Qqu>~bXKoQ6j0=++vdT+DCSfCfcyP$5DR*QRrR?D9Bac%FI>v+;O at yt@b
zU%CcX&I6s%x at f5gC<6a+1bFIkse9C8^zM~cuQ29wPyZA68!&0a3RAwaqL;sLYO7^6
zwnfcd+uClqY!x}ymT6I%2pjb{JQv4d5ZB7d!th*qcDPy_PU4^@t6SNQyI1FX_sEy&
zn`QJNf2vYFpVa*!k>T%xWw(OiH0Fz(O}lgPLn0QD`Qw!(H~$^SWt6dT9wjj!5 at l>|
z at x-|`Yvb=giYy<Y?x<jvVV)^jw;D<@?8L at WS4wxSsocy6q~pJb2md92(TArb9sjA5
z`JD1OCKbgqQvpAdRGalhd9rLRS}FpHKwc1dy7Y93anCm$UOkd<4sbEDVEnOXXiF7}
zfFh7T1d8%HkLBb5*lS1fqVx~Caqa5z_sz7&ihv at p76Lv7I^%jL;+}C&ceu=Te;52-
zhIH}2lmEKwcq66UAi%w%Qoa!gn#ltHuZKA=Q!wynCIlb3u%KR^Y0lVpgv at 4veoPdm
zC_=g_n4Pa&C|AnNg_&d-{W9a)_|4h&Og;e>W+TCuhf)-=y#?!MnwW->?YSgG+t>J2
ztRK%WOy-V$eEBFv5!wsKYz1_YIWYaqmuH2gNaTpqRVo7iX9PIZ-;j6A9^lt!zUX_U
zl0P~g91KQi3S_|eeb)AKIciGg0ZCXN*mNND*QA&kS;l3hC}0Bl6IUFwW*B<A|Co6A
z==SeF9J(eGcOQO at 0P_SkA522q=3PUl!)yrkm)oieML-dF4g@&<k;^yZI(;5CggJrZ
zy2G4s>H~jj(mxoC9S#nedErBOcTnO>WgJAE!C~GR9Og-~knmjUVq>u}J{Hc$^(Mq@
zr5au+2ejdoufw_3x$1oT?2mROML-eQSOl_re8yPvhEZlOuwnPnh7|!tU`+%*-?v5X
k*WtG6N`1{{)IkwY1agSLjR>9Av7f_VPP?oKtRI1Y0Evm`3jhEB
literal 0
HcmV?d00001
diff --git a/llvm/test/DebugInfo/PDB/pdbdump-headers.test b/llvm/test/DebugInfo/PDB/pdbdump-headers.test
index feef88d33e5cd..af2915f379334 100644
--- a/llvm/test/DebugInfo/PDB/pdbdump-headers.test
+++ b/llvm/test/DebugInfo/PDB/pdbdump-headers.test
@@ -2,6 +2,8 @@
; RUN: | FileCheck -check-prefix=ALL %s
; RUN: llvm-pdbutil dump -summary -modules -files \
; RUN: %p/Inputs/big-read.pdb | FileCheck -check-prefix=BIG %s
+; RUN: llvm-pdbutil dump -modules %p/Inputs/no-ec-names.pdb \
+; RUN: | FileCheck -check-prefix=NO-EC-NAMES %s
; RUN: not llvm-pdbutil dump -summary %p/Inputs/bad-block-size.pdb 2>&1 \
; RUN: | FileCheck -check-prefix=BAD-BLOCK-SIZE %s
@@ -1170,4 +1172,9 @@ BIG-NEXT: Mod 0045 | `Import:api-ms-win-crt-heap-l1-1-0.dll`:
BIG-NEXT: Mod 0046 | `api-ms-win-crt-heap-l1-1-0.dll`:
BIG-NEXT: Mod 0047 | `* Linker *`:
+NO-EC-NAMES: Modules
+NO-EC-NAMES: Mod 0000
+NO-EC-NAMES: has ec info: false
+NO-EC-NAMES-NEXT: pdb file ni: 0 ``, src file ni: 0 ``
+
BAD-BLOCK-SIZE: The PDB file is corrupt. MSF superblock is missing
diff --git a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp
index feb23ca2083d5..3f36be915d6a6 100644
--- a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp
+++ b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp
@@ -503,15 +503,21 @@ Error DumpOutputStyle::dumpModules() {
Desc.getModuleStreamIndex(), Desc.getNumberOfFiles(),
Desc.hasECInfo());
- auto PdbPathOrErr = Stream.getECName(Desc.getPdbFilePathNameIndex());
- if (!PdbPathOrErr)
- return PdbPathOrErr.takeError();
- StringRef PdbFilePath = *PdbPathOrErr;
-
- auto SrcPathOrErr = Stream.getECName(Desc.getSourceFileNameIndex());
- if (!SrcPathOrErr)
- return SrcPathOrErr.takeError();
- StringRef SrcFilePath = *SrcPathOrErr;
+ StringRef PdbFilePath;
+ if (Desc.getPdbFilePathNameIndex() != 0) {
+ auto PdbPathOrErr = Stream.getECName(Desc.getPdbFilePathNameIndex());
+ if (!PdbPathOrErr)
+ return PdbPathOrErr.takeError();
+ PdbFilePath = *PdbPathOrErr;
+ }
+
+ StringRef SrcFilePath;
+ if (Desc.getSourceFileNameIndex()) {
+ auto SrcPathOrErr = Stream.getECName(Desc.getSourceFileNameIndex());
+ if (!SrcPathOrErr)
+ return SrcPathOrErr.takeError();
+ SrcFilePath = *SrcPathOrErr;
+ }
P.formatLine("pdb file ni: {0} `{1}`, src file ni: {2} `{3}`",
Desc.getPdbFilePathNameIndex(), PdbFilePath,
More information about the llvm-commits
mailing list