-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
eusforeign.lのpodcodeの0x78
の意味を教えてください.
#498
Comments
podcodeのコードをassemblyになおしてみましたが,
|
このPRの eval.c の部分を参考にするとできないでしょうか?
関数の初めに、関数で使う量だけ、スタックポインタを移動させている 関数の最後に、関数が呼ばれた位置までスタックポインタを移動させている |
ありがとうございます!参考にしてみます.
少し疑問だったのは,領域が足りているのかということです.
|
動作どうなってるか自分でも忘れていたので読んだ結果分かったこと。 foreignpodのアセンブラの動作
ここでcalleusは以下で定義されている関数 https://github.com/euslisp/EusLisp/blob/master/lisp/c/calleus.c#L68-L75
コメントを読むと
ということで、 以下でcalleusを呼ぶための引数の2番目(rsi)にスタックポインタ(rsp)を指定している
https://github.com/euslisp/EusLisp/blob/master/lisp/l/eusforeign.l#L354 以下で、スタックポインタにCで関数が呼ばれたときの引数をスタックポインタにコピーしている https://github.com/euslisp/EusLisp/blob/master/lisp/l/eusforeign.l#L338-L351 |
@YoheiKakiuchi 垣内先生、ありがとうございます |
@YoheiKakiuchi
たぶん自分のアセンブリへの理解が浅いのですが,何点かお聞きしたいです. calleusのfsym(address)とcargvの渡し方について
ここでのrdiやrsiは arm64だとx0とx1にそれぞれつっこめばいいって感じでしょうか?
floatの場合の返り値について
eusforeign.lの中で以下の箇所でこれをやっていると思うのですが,
calleusのintegerの引数の数についてx86がintegerを |
rdi, rsi は
そうだと思います。
この資料の https://refspecs.linuxbase.org/elf/x86_64-abi-0.99.pdf "Returning of Values" のところに書かれています。 資料を読み解いたというよりも、Cのソースをアセンブラにしてどの返り値がどのレジスタに入っているか読んだのだろうと思います。 armはここに書いてあるようなんだけど、具体的にどの記述がそれに当たるか分からない。 #230 での説明文で以下のように書いていて、
以下のような対応で良いのだろうと思います。
そうですね。整数の引数が7個以上あると正しく値が渡せないだろうと思います。 |
eusforeign.l
のx86_64
のpodcode
において,0x78
というアドレスが指定されているのですが,この意味を教えていただけないでしょうか?調べたのですがあまり良くわかりませんでした...
@YoheiKakiuchi @k-okada
https://github.com/euslisp/EusLisp/blob/master/lisp/l/eusforeign.l#L337-L363
現在
eusforeign.l
のpodcode
をarm
とaarch64
に対応しようとしているます.x86_64
のアセンブリをarm
のアセンブリに書き換えようと考えています.@YoheiKakiuchi
垣内先生が以前に
x86_64
のpodcodeをかいたときはどのようにやったのか教えていただけると助かります.4cf35c7#diff-394f201594de883bbf06e727286716be8acab8f94e2886eabcd351a06f2be180
The text was updated successfully, but these errors were encountered: