備忘など

つうか

        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 した値になってるからあまり当てにはならない模様。

いやはや

修正対応早めに済ませてアレしたかいはありました。