読者です 読者をやめる 読者になる 読者になる

結局うまくいかず

                                          • -

さぁダウンロードです。

だめでした。
BINFMT_FLAT: reloc outside program 0xb0000000 (0 - 0x3b60/0x1a40), killing ryos_test!

rem:test> microblaze-unknown-uclinux-uclibc-size test.gdb
text data bss dec hex filename
6720 224 8256 15200 3b60 test.gdb

0x3b60 が全体のサイズ、0x1a40 がテキストのサイズ

で r が 0xb0000000

#define flat_reloc_valid(reloc, size) *1
reloc は このサイズ(0x3b60)以下にならないとダメ。

あーなんか data にリロケーション情報があってその値が 0xb0000000 だね。
カーネル内の処理を調べる
binfmt_flat.c: if (flags & FLAT_FLAG_GOTPIC) {

  • elf2flt=-v

とするとリロケーション情報が出ます。たしかにk
0xb0000000 があります。

おしいところまできたが、一度ギブアップか、、、、

                    • -

しかたながないので
uclibc をつくりなおし
UCLIBC_HAS_FLATS=y
でいいのか?
UCLIBC_HAS_FPU is not set
に変更
utime をつけるために
UCLIBC_SUSV4_LEGACY=y

UCLIBC_CTOR_DTOR
を not set にする。これで c++ は使えなくなった。

UCLIBC_CTOR_DTOR
を外したら crti.o と crtn.o を生成しなくなった、、、、

crti.o と crtn.o は c++ のための仕組みだった。

*1:reloc) <= (size