この記事は IT勉強会/コミュニティ運営 Advent Calendar 2016 の 12 日目の記事です。
ぴねと申します。JavaScript が好きです。仕事では Perl を主に書いてます。
この記事は IT勉強会/コミュニティ運営 Advent Calendar 2016 の 12 日目の記事です。
ぴねと申します。JavaScript が好きです。仕事では Perl を主に書いてます。
MIPSのABIは変だという話をこないだのシステムプログラミング会でしたら、ややザワッとしたので、なにがおかしいのかというのをちょっとまとめてみました。まとめてみて思いましたが、やっぱりMIPSのELFファイルはちょっと変です。
これが僕は一番ひどいと思ったものです。
ファイルにマルチバイトの数値を保存するときはエンディアンというものが問題になります。たとえば0xBEEFという2バイトの数を保存するときは、1バイト目にBE、2バイト目にEFを書くか、逆順で書くかは、ただの決まり事でどっちでもいいわけですが、書く側と読む側で認識があっていないと困ります。世の中的にはリトルエンディアン(下位バイトから書く)のが主流ですがビッグエンディアンなシステムもあります。
それがですね、MIPSのELFヘッダのr_infoという64ビットのフィールドはリトルエンディアンでもビッグエンディアンでもない謎なエンコーディングになっています。具体的には下位32ビットが最初にリトルエンディアンで書かれていて、ビッグエンディアンでエンコードされた上位32ビットがそれに続くという構成になっています。つまりリトルエンディアンだとABCD EFGH、ビッグエンディアンだとHGFE DCBAとなるところが、MIPSのmixed endianだとEFGH DCBAというふうにファイルに書かれていることになります。
| \documentclass[senior,final,11pt]{uiscs-thesis} | |
| % 論文の種類とフォントサイズをオプションに | |
| %------------------- | |
| \etitle{Title in English} | |
| \jtitle{邦文標題} | |
| % | |
| \eauthor{Taro Todai} | |
| \jauthor{東大太郎} | |
| \esupervisor{Masami Hagiya} | |
| \jsupervisor{萩谷昌己} |
| (* Encoding termination of a Turing machine into a GADT *) | |
| type s0 and s1 and s2 and s3 and s4 and fin | |
| type c0 and c1 and c2 and c3 and blank | |
| type left and right | |
| type endt | |
| type ('st_in, 'head_in, 'st_out, 'head_out, 'lr) transition = | |
| | Tr1 : (s0, 'a, s1, 'a, left) transition |
This userjs improves the layout of the algebraic topology website Algebraic Toplogy, A Guide To Literature.
When these extensions are installed in your browser, clicking shinshu.user.js will install this script.