[lld] r336405 - [PDB] Sort globals symbols by name in GSI hash buckets.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 6 09:39:08 PDT 2018


Do you have an easy way to check what DIA version that is? Anyway, thanks
for fixing it!
On Fri, Jul 6, 2018 at 1:53 AM Hans Wennborg <hans at chromium.org> wrote:

> On Fri, Jul 6, 2018 at 4:33 AM, Zachary Turner via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> > Author: zturner
> > Date: Thu Jul  5 19:33:58 2018
> > New Revision: 336405
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=336405&view=rev
> > Log:
> > [PDB] Sort globals symbols by name in GSI hash buckets.
> >
> > It seems like the debugger first computes a symbol's bucket,
> > and then does a binary search of entries in the bucket using the
> > symbol's name in order to find it.  If the bucket entries are not
> > in sorted order, this obviously won't work.  After this patch a
> > couple of simple test cases show that we generate an exactly
> > identical GSI hash stream, which is very nice.
> [..]
> > Added: lld/trunk/test/COFF/pdb-globals-dia-vfunc-collision.test
> > URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/pdb-globals-dia-vfunc-collision.test?rev=336405&view=auto
> >
> ==============================================================================
> > --- lld/trunk/test/COFF/pdb-globals-dia-vfunc-collision.test (added)
> > +++ lld/trunk/test/COFF/pdb-globals-dia-vfunc-collision.test Thu Jul  5
> 19:33:58 2018
> > @@ -0,0 +1,42 @@
> > +REQUIRES: diasdk
> > +
> > +Input object file reconstruction:
> > +
> > +; // main.cpp
> > +; struct S {
> > +;   // Function names are chosen specifically to generate hash
> collisions in the
> > +;   // GSI hash table.
> > +;   virtual int A307() { return 102; }
> > +;   virtual int A400() { return 12; }
> > +;   virtual int A206() { return 201; }
> > +;   virtual int A105() { return 300; }
> > +; };
> > +;
> > +; struct T : public S {
> > +;   int A105() override { return 300; }
> > +;   int A307() override { return 102; }
> > +;   int A206() override { return 201; }
> > +;   int A400() override { return 12; }
> > +; };
> > +;
> > +; int main(int argc, char **argv) {
> > +;   T s;
> > +;   return s.A105() + s.A206() + s.A307() + s.A400();
> > +; }
> > +
> > +clang-cl /Z7 /GS- /GR- /c main.cpp /Foglobals-dia-vfunc-collision.obj
> > +
> > +RUN: lld-link /debug /nodefaultlib /entry:main /out:%t.exe
> %S/Inputs/globals-dia-vfunc-collision.obj
> > +RUN: llvm-pdbutil pretty -classes %t.pdb | FileCheck %s
> > +
> > +CHECK: struct T
> > +CHECK: func [0x000010c0+ 0 - 0x000010dd-29 | sizeof= 29] (FPO) virtual
> int __cdecl A105()
>
> In Chromium's build this failed [1] because DIA was printing the qualified
> name:
>
> <stdin>:10:2: note: possible intended match here
>  func [0x000010c0+ 0 - 0x000010dd-29 | sizeof= 29] (FPO) virtual int
> __cdecl T::A105()
>  ^
>
> Maybe because the bot uses a different DIA version. I've relaxed the
> check a little in r336424.
>
>  [1]
> https://logs.chromium.org/v/?s=chromium%2Fbb%2Ftryserver.chromium.win%2Fwin_upload_clang%2F365%2F%2B%2Frecipes%2Fsteps%2Fpackage_clang%2F0%2Fstdout
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180706/2ae463cd/attachment.html>


More information about the llvm-commits mailing list