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: -------