Я не уверен, что я бред, но я близок к определенным вызовам, использовавшимся при сбое в System V Linux x86_64, если они не были выровнены при входе (то есть вы намеренно отклонилисьстек перед call
, поэтому он выравнивается при входе).
Например (теперь это работает):
.data
str: .asciz "string literal"
.text
.globl main
main:
lea str(%rip), %rdi
call puts@plt
xor %eax, %eax
ret
Я почти уверен, что раньше это не получалось, может кто-нибудь объяснитьесли я: бредовый (то есть это всегда работало), неправильно понимающий семантику выравнивания стека, не подозревающий (несколько недавних?) изменений в чем-то, где-нибудь?* (согласно общему прологу) или просто sub $8, %rsp
, но теперь код, который я пишу без этого, кажется, работает нормально?
Это нюанс или это поведение сейчас приемлемо?