Ale nawet w tym hello world widać przekazywanie przez rejestry w wywołaniach objc_msgSend.
Według AAPCS64:
[Platform] may elect not to maintain a frame chain and to use the frame pointer register as a general-purpose
callee-saved register
Odnośnie funkcji “variadic”:
The address of the first stacked argument is defined to be the initial value of SP.
Nie widzę nigdzie informacji, żeby FR był wymagany w tym przypadku. W X86 na pewno nie trzeba ustawiać EBP dla takich wywołań.
Sprawdziłem też pod Godboltem z opcją “-fomit-frame-pointer” i prolog/epilog funkcji jest bardzo krótki.
Zauważyłem, że kompilator tak robi tylko w -O0. Starałem się na siłę to zrozumieć i rzuciłem jakimiś tezami. Ale może tak napisał, bo gdzieś tak zobaczył/przeczytał. Może tak pisał, żeby nie zapomnieć. Miałem, jeszcze pomysł, że coś to sprawdza. Nikt go nie zapytał. Zostaje jeszcze sprawdzić deasm jakiegoś prawdziwego kodu na tę platformę.
Ale nawet w tym hello world widać przekazywanie przez rejestry w wywołaniach objc_msgSend.
Według AAPCS64:
Odnośnie funkcji “variadic”:
Nie widzę nigdzie informacji, żeby FR był wymagany w tym przypadku. W X86 na pewno nie trzeba ustawiać EBP dla takich wywołań.
Sprawdziłem też pod Godboltem z opcją “-fomit-frame-pointer” i prolog/epilog funkcji jest bardzo krótki.
Zauważyłem, że kompilator tak robi tylko w -O0. Starałem się na siłę to zrozumieć i rzuciłem jakimiś tezami. Ale może tak napisał, bo gdzieś tak zobaczył/przeczytał. Może tak pisał, żeby nie zapomnieć. Miałem, jeszcze pomysł, że coś to sprawdza. Nikt go nie zapytał. Zostaje jeszcze sprawdzić deasm jakiegoś prawdziwego kodu na tę platformę.