備忘など
つうか
ldr r1,[r0] lsl r1,#2 sub r1,#8 add r0,#8
なソレですが 2 bit 左 shift て 4 倍ですね。どうも根本的な部分での理解が駄目な模様。Google 先生からは以下な資料を見てみれ、とのご託宣。
atag 云々な記述があります。ATAG_CMDLINE な size が 2 + ((length_of_cmdline + 3)/4)とありますが、これって word size って理解で良いのかな。atag_header な定義が以下、とありますし。
struct atag_header { u32 size; /* length of tag in words including this header */ u32 tag; /* tag value */ };
であれば r0 に 8 を加算してるのは理解できます。あー、4 倍して 8 引いてる理屈も分かりました。最初の ldr でサイズが r1 に格納されるんですがこれって word size だから 4 倍してるのか。で、atag_header 分はアレなので 8 引いてるんですね。
しかもこれ、4 byte 境界で align した値になってるからあまり当てにはならない模様。
いやはや
修正対応早めに済ませてアレしたかいはありました。