http://d.puremagic.com/issues/show_bug.cgi?id=3372

           Summary: optlink silently mistreats object files with more than
                    16384 symbols
           Product: D
           Version: 2.033
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: major
          Priority: P2
         Component: Optlink
        AssignedTo: nob...@puremagic.com
        ReportedBy: r.sagita...@gmx.de


--- Comment #0 from Rainer Schuetze <r.sagita...@gmx.de> 2009-10-07 23:50:29 
PDT ---
Larger projects (like qtd) are suffering from problems with large object files
with a lot of symbols, where the linker creates bad fixups, creating
executables that are calling wrong functions.

Here's a test case that creates a lot of symbols

//////////////////////////////////////

import std.stdio;

class genfuns(int n, int m)
{
    static void run() { 
        genfuns!(n - 1, m).run(); 
    }
}

class genfuns(int n : 0, int m)
{
    static void run() { writefln("=== 0, %d ===", m); }
}

void main()
{
    // dmd-release: stack overflow with n=700
    // dmd-debug:   stack overflow with n=500
    genfuns!(300, 0).run(); 
    genfuns!(300, 1).run();
    genfuns!(300, 2).run();
    genfuns!(300, 3).run();
    genfuns!(300, 4).run();
    genfuns!(300, 5).run();
    genfuns!(300, 6).run();
    genfuns!(300, 7).run();
    genfuns!(300, 8).run();
    genfuns!(300, 9).run();
    genfuns!(300, 10).run();
    genfuns!(300, 11).run();
}
////////////////////////////////////////////

The output looks like this:

=== 0, 0 ===
=== 0, 1 ===
=== 0, 2 ===
=== 0, 3 ===
=== 0, 4 ===
=== 0, 5 ===
=== 0, 6 ===
=== 0, 7 ===
=== 0, 8 ===
=== 0, 9 ===
=== 0, 0 ===
=== 0, 0 ===

That shows, that the two last functions are calling wrong functions. The
symbols don't even show up in the map file, but are still in the debug info.
There you can see, that the adress is plain wrong, and searching the symbol in
the object file dump, it seems that symbol #16384 + n gets the address of
symbol #n.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to