When i disassembly simple code and found a question. Why local variable isn't place in current function stack?? ex: The "_ZN3aaa10build_user17h6ef656f427941943E" function does't create stack frame only use previous function's stack. line :5,6,7 This my code : https://gist.github.com/wayling/4f0a2b40dece616893722299631b7441
Firstly, questions like this should probably be asked in the users.rust-lang.org section next time.
Secondly to answer your question, LLVM may choose several ways to return a struct. The ABI may allow returning it in multiple registers, or as you see here there is an implicit out parameter. Here you’ll see where space is allocated on the stack and
rdi is set to point towards that space on the stack. The
rdi is one of the argument registers. The other function then uses this pointer to construct the struct.
(to answer why
sub rsp, 0x20 but
lea rdi, [rbp-0x18] only 0x18 bytes are needed but it usually preferable and perhaps required on some ABIs that the stack is kept specially aligned)