www.digitalmars.com         C & C++   DMDScript  

D.gnu - [Issue 906] New: GDC Phobos std.demangle can't demangle symbol

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906

           Summary: GDC Phobos std.demangle can't demangle symbol
           Product: DGCC aka GDC
           Version: unspecified
          Platform: Macintosh
        OS/Version: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: dvdfrdmn users.sf.net
        ReportedBy: rmann-d-lang latencyzero.com


(Wow, the CC list is LOONG. I hope I'm doing the right thing by posting this
bug here).

I wrote a simple program to demangle symbols. When I try to demangle the
following, I just get the same thing back out. This symbol was emitted by GDC
0.27/DMD 1.00 as part of a link error message.

__D5macos6carbon16carboneventscore19InstallEventHandlerFT5macos6carbon16carboneventscore14EventTargetRefT5macos6carbon16carboneventscore15EventHandlerUPPkPS5macos6carbon16carboneventscore13EventTypeSpecPvJT5macos6carbon16carboneventscore15EventHandlerRefZT5macos6carbon5types8OSStatus


-- 
Jan 29 2007
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906






Hmm. I tried feeding it a mangled symbol generated in the same little program
using the .mangleof property, and it still returns its input unchaged. Maybe it
doesn't work at all on GDC.


-- 
Jan 29 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906






Looking at the std.demangle code, it seems that it's looking for a valid symbol
to begin with "_D", rather than the "__D" that is being emitted by gdc. The
symbol above demangles to:

typedef macos.carbon.hitoolbox.Types.OSStatus
macos.carbon.hitoolbox.CarbonEventsCore.InstallEventHandler(typedef
macos.carbon.hitoolbox.CarbonEventsCore.EventTargetRef, typedef
macos.carbon.hitoolbox.CarbonEventsCore.EventHandlerUPP, struct
macos.carbon.hitoolbox.CarbonEventsCore.EventTypeSpec[], void*, out typedef
macos.carbon.hitoolbox.CarbonEventsCore.EventHandlerRef)


-- 
Jan 30 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906






Are you sure that the symbol starts with 2 underscores instead of 1?


-- 
Jan 30 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906






All Mac OS X symbols start with underscore.

This D code:
void main () { }
extern(C) void test () { }

Produces symbols:
__Dmain
_test

For details see "Mach-O" on Apple Developer.


-- 
Jan 30 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906






I don't know if phobos on the Mac should be modified so that std.demangle can
grok the extra underscore. If so, I'll leave this open. If not, feel free to
close this bug.


-- 
Jan 30 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906






std.demangle should probably be left to operate on the real symbols - without
the extra underscore, but you might want to add the feature to your simple
program ?


if you use dlsym to load symbols, that will use the symbols without
underscores*. so the extra underscore is more a quirk of the object format,
than anything else.

(* actually something of a minefield if you want portable code, some systems do
require the underscore prepended and yet others do not. but that's another
story)


-- 
Jan 31 2007
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=906


rmann-d-lang latencyzero.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID





Fair 'nough. Closing.


-- 
Jan 31 2007