stack frame optimization problem
downs
default_357-line at yahoo.de
Tue Oct 20 17:59:42 PDT 2009
sprucely wrote:
> To try to be sure I had the correct syntax I tried the -S option of g++ along with a switch for intel syntax to output the assembly. However the portion corresponding to the inline assembly was still in ATT syntax.
>
> For my resulting D executable I tried using hte, but it would abort after mentioning something about a nonexistent htcfg file. I didn't find much info after a cursory search. I gave up easily because I wasn't sure if I would be able to make proper use of it. Maybe I should take an x86 assembly course.
>
> Vladimir Panteleev Wrote:
>
>> On Tue, 20 Oct 2009 18:45:50 +0300, sprucely <timberdig at gmail.com> wrote:
>>
>>> This works with g++ and inline ATT assembly, but I have had no such luck
>>> in D. I have many simple functions that need to be executed sequentially
>>> and have identical stack frames. To avoid the overhead of setting up and
>>> tearing down the stack frames I want to jmp from the body of one
>>> function to the body of the next. A simplified example...
>>>
>>> extern(C) byte jumpHere;
>>>
>>> byte* jumpTo = &jumpHere;
>>>
>>> void f1()
>>> {
>>> asm
>>> {
>>> //jmp dword ptr jumpTo;
>>> mov EAX, jumpTo;
>>> jmp EAX;
>>> //jmp [EAX]
>>> }
>>> }
>>>
>>> void f2()
>>> {
>>> asm{jumpHere:;}
>>> }
>>>
>>> No matter what I try I get a segfault. My assembly skills are very
>>> limited. I'm not using the naked keyword yet, because I want to get a
>>> proof-of-concept working first. Anyone see anything wrong with this? Any
>>> suggestions?
>> Just disassemble the resulting machine code and look at what's going on.
>>
>> --
>> Best regards,
>> Vladimir mailto:thecybershadow at gmail.com
>
Try dropping an "int 3" before and after, then running it in gdb and using the "disassemble" and "info registers" commands.
More information about the Digitalmars-d
mailing list