From 54a3f636d86a21c8cc08bff63e2735d7e9ac3e2a Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Wed, 23 Sep 2015 20:44:37 +0000 Subject: [PATCH] dsymutil: Don't prune forward declarations inside a module definition. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248428 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/dsymutil/Inputs/modules/1.o | Bin 2392 -> 2392 bytes test/tools/dsymutil/Inputs/modules/Bar.pcm | Bin 25532 -> 25636 bytes test/tools/dsymutil/Inputs/modules/Foo.pcm | Bin 25464 -> 25464 bytes test/tools/dsymutil/X86/modules.m | 11 ++++++++--- tools/dsymutil/DwarfLinker.cpp | 15 +++++++++------ 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/test/tools/dsymutil/Inputs/modules/1.o b/test/tools/dsymutil/Inputs/modules/1.o index 254ae692a8e8068815d47a18711e9df7c6b8889e..e7a52931b9f83c7b521e7ff4819e568de87dff34 100644 GIT binary patch delta 164 zcmca1bVF!@gP;Km0~maO(gqs?|1&er*c`~B!{lMhz`_`+4U}hvC}Loc12P!H6M!UB zSU-?tW13iziOeg=1M{W zQ9qDmW13iziOeg=1M{W?xlIa%5RIYF(xc#Q+C(ep z-=Pf(ZlVm8-|}3^J*m(qbV22}+JoEgZdq-Z-l}{%I9-V{-mCUm3zh6`>3>v zeNl;}t^L`ZoRPkP`3p3gU1XRS0Y-IV+G+PN{mQP;I5=vgk{lb(MFKh35l!^jn}Vju zZ?6e21gS#&+!2scjj- zFITe(P6V3H%ff4sk9oH;T=`R#VvAYM<2?tQNjhynfF+N4tQX-OYfB%(mne-j^~D`a z)`8if<=lzpQtR?;#YH=q7Wq+@s6kDQ%~xq%6381YCueSBYADm}e!8RqShvM;5RP#N zA~)VpRt51i8T6oq7J~cGM&E;JxSK>N8TI6roR~-zQfh$;*7)oqsG+M3_QZ++$agYR zFqtNT0qXh(d)uqqYt9Y;_Zbr-U6Sl*pgU5L(G(;6MHjOpjt|@Te9w#ydESZ?A^!lb z+yJ8yhkUhzJlmM`$?GT9GLC6jAF}UaE00Gaed~sPXLs6cElIS2+IWNysZD3cXD}Ez zuYsyUDZ=@R#ct{iB{{N$;|yzAF`J8?UF7tZ@S<7la;y+#LY1+ml&aKb1BslX=V@p+2(!|QPU<bKUz1Uoo)V4Ib7s-qKX*B4XR2c;STO2PW^&h>y_zr5Qm9F6n%0m z3&A(Uxk){nv{2y`o8;O$nI6H@3a5T*ONTKDpDG-iIA1QNcn9auzm%&t@S=pB6o1=- zKT0^qImGSqwcF$-YE<)1@r+EZG7Vz`zc=MZ2!K#B8H!!!4_TCTE4kiC?2~PdWOSM? zG%a|DI~XZ$rxp3&Hax(Y;&RQD0B}|%m>MmW_^bG^D19*Ac2{^g);M?z;C{@v>m0G9 z(hzF^au}yZVE+55DJ9UyU?;LPxTqrun$cMD{IWg0t#UGR_nv{(6Uvjnvs{0&YF_F1 z&$`zseU{b65`b)kQo123=q!B7e%6E;|Ez;RG=s5fMFN3tf?ji>oxluLFU?E!qNP+x zvpN7RUbB}dISz~jU)YPtmDsxdVqrnmc%#rl)2t-gXUtY59p~YZRp;p@FhboJCUEm1 z-fiwl8Zv{cCmU@(x4wHAtyz#ZBOl!GR)GV)A)NNzG)Oj`<(`)wx~7k32~>3w5aWpd(E{zm zK}RcWlQ*%O6NtPEm<3S7(MY&2913@V8s7)XwX~d?Dn4$_=wLclw9IPP<1n%0utz8= zqa%&xutD}~V^K*ksGyp{< jU8<=&sdFsgNgjWYD*GYCKo=$cm6nMImqTU9wVM6`YuUBu diff --git a/test/tools/dsymutil/Inputs/modules/Foo.pcm b/test/tools/dsymutil/Inputs/modules/Foo.pcm index 33bca2a6547bb8f58f7863ac0247591ad88ba877..a715bfaa7f21fb09386dfab1a983b06a5ba4fbd9 100644 GIT binary patch delta 536 zcmexyjPb`Y#tn~jSc_!ZoC795*D>W!Tst9=?bjmCb&Y#Z8AY>i*4CZODBLKQc)*L% zEk9o`gMooTOy{H0fSk7wZDtQ#-I$jGzV zBcY1XLDE^G0c0MNBamfLI2I1t;g~OEWrd?$lq$Sij(!*M_DB)`x3F zO|&1pStoj6y{H0fSk4=eoZl#B~d&HAbA6z-6aYV9BiR13|A(f zif&|-n(PzfCG>8?xesCt{HK6QKp^rC)8rK~Ig<@y3nq)idQ3hOE62z^`E{%oBmZQv zICVzB$#!vyjG~hh;>2YoAzBy&fixq-G{2uLJPd3M&N+$2#SH9|r^G2p2}4z|fmOT( zx|xT8nISWUL45MLI5|en$#3ISr9rM^WUx2!@ZtbU$H#{`#ybYN2gk=V@NU+Pmtth( z-t3W3#puv3y6q;&JSImV;R?j|K+GHpB;0|RQIo|RNHH*KF))GnFa@k24hsVtlg4DG RBxRP)U5zI;YbNgetTag() == dwarf::DW_TAG_module) - InTagModule = true; + if (DIE->getTag() == dwarf::DW_TAG_module && + DIE->getAttributeValueAsString(&CU.getOrigUnit(), dwarf::DW_AT_name, + "") != CU.getClangModuleName()) { + InImportedModule = true; + } Info.ParentIdx = ParentIdx; - if (CU.hasODR() || CU.isClangModule() || InTagModule) { + if (CU.hasODR() || CU.isClangModule() || InImportedModule) { if (CurrentDeclContext) { auto PtrInvalidPair = Contexts.getChildDeclContext(*CurrentDeclContext, DIE, CU, StringPool); @@ -1795,12 +1798,12 @@ static bool analyzeContextInfo(const DWARFDebugInfoEntryMinimal *DIE, Info.Ctxt = CurrentDeclContext = nullptr; } - Info.Prune = InTagModule; + Info.Prune = InImportedModule; if (DIE->hasChildren()) for (auto *Child = DIE->getFirstChild(); Child && !Child->isNULL(); Child = Child->getSibling()) Info.Prune &= analyzeContextInfo(Child, MyIdx, CU, CurrentDeclContext, - StringPool, Contexts, InTagModule); + StringPool, Contexts, InImportedModule); // Prune this DIE if it is either a forward declaration inside a // DW_TAG_module or a DW_TAG_module that contains nothing but -- 2.34.1