digitalmars.D.bugs - [Issue 21914] New: naked assembler functions get wrong offset to
- d-bugmail puremagic.com (34/34) May 11 2021 https://issues.dlang.org/show_bug.cgi?id=21914
https://issues.dlang.org/show_bug.cgi?id=21914 Issue ID: 21914 Summary: naked assembler functions get wrong offset to parameters Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: regression Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: bugzilla digitalmars.com Consider the function: extern (C++) int insbad(int a, int b) { asm { naked ; mov EAX,a-4+[ESP] ; mov EBX,b-4+[ESP] ; } } In 2.079 and earlier, the inline assembler assumed that an EBP was set up and provided offsets to the parameters accordingly. Hence, in the above code, a -4 was inserted to correct for not having EBP pushed on the stack. Somewhere between 2.079 and 2.090 this was changed to not consider EBP, and the offsets look like this for the above function: ?insbad YAHHH Z: mov EAX,[ESP] // should be 4[ESP] mov EBX,4[ESP] // should be 8[ESP] The problem looks to be the computation of Para.size in cgcod.d from this PR: https://github.com/dlang/dmd/pull/9620/files i.e. my fault. --
May 11 2021