From 3de4f391131ab56e03622bf3bbb152c29bdc293e Mon Sep 17 00:00:00 2001 From: Martell Malone Date: Tue, 16 Aug 2016 13:05:23 -0700 Subject: [PATCH 5/6] COFF: Fix short import lib import name type bitshift llvm-readobj: Support short import objects from within an archive The import magic was previous just checked against the archive as a whole As per the PE COFF spec (section 8.3, Import Name Type) Offset: 18 Size 2 bits Name: Type Offset: 20 Size 3 bits Name: Name Type Offset: 20 added based on 18+2 Cherry-picked from SVN trunk commit 283055, git mirror commit d17dee59d1351. --- include/llvm/Support/COFF.h | 2 +- .../llvm-readobj/Inputs/imports.mangle.coff-x86_64 | Bin 0 -> 2108 bytes test/tools/llvm-readobj/imports-mangle.test | 17 +++++++++++++++++ tools/llvm-readobj/llvm-readobj.cpp | 2 ++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/tools/llvm-readobj/Inputs/imports.mangle.coff-x86_64 create mode 100644 test/tools/llvm-readobj/imports-mangle.test diff --git a/include/llvm/Support/COFF.h b/include/llvm/Support/COFF.h index 7dad3e8..1ca781b9 100644 --- a/include/llvm/Support/COFF.h +++ b/include/llvm/Support/COFF.h @@ -657,7 +657,7 @@ namespace COFF { } ImportNameType getNameType() const { - return static_cast((TypeInfo & 0x1C) >> 3); + return static_cast((TypeInfo & 0x1C) >> 2); } }; diff --git a/test/tools/llvm-readobj/Inputs/imports.mangle.coff-x86_64 b/test/tools/llvm-readobj/Inputs/imports.mangle.coff-x86_64 new file mode 100644 index 0000000000000000000000000000000000000000..af6e583a31b953d1c9451266b09bee50093b8d54 GIT binary patch literal 2108 zcmb_d&2JJ>5dX1!Db|LlF)`5wn@hpnzkM|G&UYM z`7e0zkMPE!S8sYU9@>AzL!H_8-m)OpZqrTX&6^Kq-uu0o;qIg6PHW>y;$dp^%bG^c zDC9Dk{HQ)7MLna--C6>`6+oK-A_XA23B(U19TR7o6%-o)v4L%umsXZ*b$j8(>hoH8 zrM_IV*SlTVcC}Hd{B6VsvI<+h)Tl1n3&nboyxW~^d$-rg!d*OBXIYnab}%5;r?fXM z>s7H-vR+I3s4g%H*&zyXf?-Aj3K3v43LKE)m}r)05OX0y93g15#t=bNu3?OxAuu}P z;^RRW99vv|2$T;aVIv0@K7BIAgnQcA+VWueUsafSRW54@rys`8kDnXi5O9gG;VEigrVzjtk^-P-BycGve(_iGPQm2!1a+D8~W^C6h1?A=|G zR(f~R$qcYs-Oe_haldzjlM}x;xlti7sjFImd&~``aW5ruNFS4Z=tuB;=7$>A-{wVr z937aK5;F}iX$@Rn6Pqs)v@&!v=gkYJuep`+)jbp+ZE|He!sM;K$}p6YE8~k2B(&*ChildOrErr.get())) dumpObject(Obj); + else if (COFFImportFile *Import = dyn_cast(&*ChildOrErr.get())) + dumpCOFFImportFile(Import); else reportError(Arc->getFileName(), readobj_error::unrecognized_file_format); } -- 2.7.4