• naur@tech.pr0n.pl
    link
    fedilink
    Polski
    arrow-up
    1
    ·
    13日前

    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.

    • サぺル@tech.pr0n.plOPM
      link
      fedilink
      Polski
      arrow-up
      1
      ·
      13日前

      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ę.