Thread overview
GDB demangling
Dec 03, 2018
ANtlord
Dec 03, 2018
Rainer Schuetze
Dec 04, 2018
ANtlord
Dec 04, 2018
Rainer Schuetze
December 03, 2018
Hello!

Short time ago I created a plugin that demangles D symbols in call stack. I'm gonna to add the code to upstream. After a little research mail lists and code of gdb I see a couple of mentions about demangling of D code. Also, I found threads in the forum about support of the demangling that was implemented by GDC team. But I see partially demangling when I'm debugging my favorite project DCD. Look at the call stack

#0  _D7dsymbol6symbol7DSymbol__T17getFirstPartNamedTSQBvQBqQBmZQBfMNgFSQCn16string_interning14InternedStringZPNgSQEdQDyQDu (this=, name={
  data = "*constructor*"
})
        at dsymbol/src/dsymbol/symbol.d:234
#1  dsymbol.conversion.first.FirstPass.visit(const(dparse.ast.StructBody)) (this=, structBody=)
        at dsymbol/src/dsymbol/conversion/first.d:401
#2  _D6dparse3ast17StructDeclaration6acceptMxFCQBpQBl10ASTVisitorZv (this=, visitor=)
        at libdparse/src/dparse/ast.d-mixin-2757:2759
#3  _D7dsymbol10conversion5first9FirstPass__T25visitAggregateDeclarationTxC6dparse3ast17StructDeclarationZQCjMFxQBmEQEg6symbol14CompletionKindZv (this=, kind=115 's', dec=)
        at dsymbol/src/dsymbol/conversion/first.d:809
#4  dsymbol.conversion.first.FirstPass.visit(const(dparse.ast.StructDeclaration)) (this=, dec=)
        at dsymbol/src/dsymbol/conversion/first.d:184
#5  _D6dparse3ast11Declaration6acceptMxFCQBjQBf10ASTVisitorZv (this=, visitor=)
        at libdparse/src/dparse/ast.d:1244
#6  dsymbol.conversion.first.FirstPass.visit(const(dparse.ast.Declaration)) (this=, dec=)
        at dsymbol/src/dsymbol/conversion/first.d:315
#7  _D6dparse3ast6Module6acceptMxFCQBdQz10ASTVisitorZv (this=, visitor=)
        at libdparse/src/dparse/ast.d-mixin-2196:2198
#8  dsymbol.conversion.first.FirstPass.visit(const(dparse.ast.Module)) (this=, mod=)
        at dsymbol/src/dsymbol/conversion/first.d:338
#9  dsymbol.conversion.first.FirstPass.run() (this=) at dsymbol/src/dsymbol/conversion/first.d:91
#10 _D7dsymbol11modulecache11ModuleCache11cacheModuleMFAyaZPSQCd6symbol7DSymbol (this=, location="/usr/include/dmd/phobos/etc/c/odbc/sqltypes.d")
        at dsymbol/src/dsymbol/modulecache.d:236
#11 _D7dsymbol10conversion6second13resolveImportFPSQBt6symbol7DSymbolKS10containers12unrolledlist__T12UnrolledListTPSQEh11type_lookup10TypeLookupTS4stdx9allocator10mallocator10MallocatorVbi0Vmi64ZQDsKSQHn11modulecache11ModuleCacheZv (cache=, typeLookups=, acSymbol=)
        at dsymbol/src/dsymbol/conversion/second.d:142
#12 _D7dsymbol10conversion6second10secondPassFPSQBq8semantic14SemanticSymbolPSQCu6scope_5ScopeKSQDm11modulecache11ModuleCacheZv (cache=, moduleScope=, currentSymbol=)
        at dsymbol/src/dsymbol/conversion/second.d:61
#13 _D7dsymbol10conversion6second10secondPassFPSQBq8semantic14SemanticSymbolPSQCu6scope_5ScopeKSQDm11modulecache11ModuleCacheZv (cache=, moduleScope=, currentSymbol=)
        at dsymbol/src/dsymbol/conversion/second.d:77
#14 _D7dsymbol11modulecache11ModuleCache11cacheModuleMFAyaZPSQCd6symbol7DSymbol (this=, location="/usr/include/dmd/phobos/etc/c/odbc/sql.d")
        at dsymbol/src/dsymbol/modulecache.d:238
#15 _D7dsymbol10conversion6second13resolveImportFPSQBt6symbol7DSymbolKS10containers12unrolledlist__T12UnrolledListTPSQEh11type_lookup10TypeLookupTS4stdx9allocator10mallocator10MallocatorVbi0Vmi64ZQDsKSQHn11modulecache11ModuleCacheZv (cache=, typeLookups=, acSymbol=)
        at dsymbol/src/dsymbol/conversion/second.d:142
#16 _D7dsymbol10conversion6second10secondPassFPSQBq8semantic14SemanticSymbolPSQCu6scope_5ScopeKSQDm11modulecache11ModuleCacheZv (cache=, moduleScope=, currentSymbol=)
        at dsymbol/src/dsymbol/conversion/second.d:61
#17 _D7dsymbol10conversion6second10secondPassFPSQBq8semantic14SemanticSymbolPSQCu6scope_5ScopeKSQDm11modulecache11ModuleCacheZv (cache=, moduleScope=, currentSymbol=)
        at dsymbol/src/dsymbol/conversion/second.d:77
#18 _D7dsymbol11modulecache11ModuleCache11cacheModuleMFAyaZPSQCd6symbol7DSymbol (this=, location="/usr/include/dmd/phobos/etc/c/odbc/sqlext.d")
        at dsymbol/src/dsymbol/modulecache.d:238
#19 _D7dsymbol11modulecache11ModuleCache14addImportPathsMFxAAyaZ8scanFromMFxQqZv (this=, root="/usr/include/dmd/phobos/etc/c/odbc")
        at dsymbol/src/dsymbol/modulecache.d:123
#20 _D7dsymbol11modulecache11ModuleCache14addImportPathsMFxAAyaZ8scanFromMFxQqZv (this=, root="/usr/include/dmd/phobos/etc/c")
        at dsymbol/src/dsymbol/modulecache.d:125
#21 _D7dsymbol11modulecache11ModuleCache14addImportPathsMFxAAyaZ8scanFromMFxQqZv (this=, root="/usr/include/dmd/phobos/etc")
        at dsymbol/src/dsymbol/modulecache.d:125
#22 _D7dsymbol11modulecache11ModuleCache14addImportPathsMFxAAyaZ8scanFromMFxQqZv (this=, root="/usr/include/dmd/phobos/")
        at dsymbol/src/dsymbol/modulecache.d:125
#23 dsymbol.modulecache.ModuleCache.addImportPaths(const(immutable(char)[][])) (this=, paths={[0] = "/usr/include/dmd/phobos/"})
        at dsymbol/src/dsymbol/modulecache.d:129
#24 D main (args={[0] = "/endlessos/develop/DCD/bin/dcd-server"}) at src/dcd/server/main.d:167


You can see some readable messages like

#23 dsymbol.modulecache.ModuleCache.addImportPaths(const(immutable(char)[][])) (this=, paths={[0] = "/usr/include/dmd/phobos/"})

and some unreadable

#22 _D7dsymbol11modulecache11ModuleCache14addImportPathsMFxAAyaZ8scanFromMFxQqZv (this=, root="/usr/include/dmd/phobos/")

So please make me clear with the state of the demangling. Is it supported?
December 03, 2018

On 03/12/2018 12:29, ANtlord wrote:
> You can see some readable messages like
> 
> #23
> dsymbol.modulecache.ModuleCache.addImportPaths(const(immutable(char)[][]))
> (this=, paths={[0] = "/usr/include/dmd/phobos/"})
> 
> and some unreadable
> 
> #22 _D7dsymbol11modulecache11ModuleCache14addImportPathsMFxAAyaZ8scanFromMFxQqZv (this=, root="/usr/include/dmd/phobos/")
> 
> So please make me clear with the state of the demangling. Is it supported?

The mangling has changed with dmd 2.077 to reduce the size of symbols.

There is a patch for gdb/libiberty but it hasn't been merged yet AFAICT: https://github.com/ibuclaw/gdb/pull/8
December 04, 2018
On Monday, 3 December 2018 at 22:36:43 UTC, Rainer Schuetze wrote:

> There is a patch for gdb/libiberty but it hasn't been merged yet AFAICT: https://github.com/ibuclaw/gdb/pull/8

What is the state of the PR? As far as I see hasn't been updated since 10 May. Also, can't we use D code in gdb? It helps to synchronize the demangling with the latest changes. Or it's impossible because GDB's demangling should support several versions of dlang compiler?
December 04, 2018

On 04/12/2018 09:28, ANtlord wrote:
> On Monday, 3 December 2018 at 22:36:43 UTC, Rainer Schuetze wrote:
> 
>> There is a patch for gdb/libiberty but it hasn't been merged yet AFAICT: https://github.com/ibuclaw/gdb/pull/8
> 
> What is the state of the PR? As far as I see hasn't been updated since 10 May.

Some paperwork had to be done with the FSF but that is completed. I guess Iain will merge the PR before the next major update.

Also, can't we use D code in gdb?

I doubt this is allowed before GDC is part of the official GNU compiler suite. This is expected to happen early next year.

It helps to synchronize the
> demangling with the latest changes. Or it's impossible because GDB's demangling should support several versions of dlang compiler?

The new mangling is a superset of the old mangling, so demangling works for both old and new versions.