結局うまくいかず
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
さぁダウンロードです。
だめでした。
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