gcc

gcc

gccのビルトイン関数には関数のリターンアドレスやフレームポインタなどを取得することができる関数がある。この関数を使用しsetjmp/longjmpの実装は以下の様になる。たぶんバグはないはず?jmp.c #include <stdio.h> #include <stdlib.h> #define JMP_BUFFSIZE 6 typedef struc</stdlib.h></stdio.h>…

gcc

カーネルやVMMを実装するときは標準ライブラリを使用せずにコンパイルを行う。32ビットカーネルやVMMを実装中に、long longなどの変数の除算やかけ算を行うとコンパイルが通らない。それはlong longなどの64ビット変数の乗算や除算などの命令を実行している…

asmlinkage

LilyVMのコード読んでいるとき、asmlinkageのマクロが出てきたが定義がされていない。Linuxカーネルなどにも使用されているので調べてみた。 asmlinkageマクロとは Linuxカーネルなどによく見かけるマクロの一つとして、asmlinkageマクロがある。このマクロ…