Help us understand the problem. What is going on with this article?

newlibのコンパイル

mipsel用にnewlib-3.0.0.20180831をlinuxのtoolchainを使ってコンパイルしてみた。toolchainはいろいろ探したら、gcc 4.2.3な物が見つかったので、これを使いました。

% mips-cc -v
Using built-in specs.
Target: mipsel-linux-uclibc
Configured with: /home/gracecsm/toolchains/src/toolchains/linux-2.6/buildroot/to
olchain_build_mipsel/gcc-4.2.3/configure --prefix=/projects/hnd/tools/linux/hndt
ools-mipsel-linux-uclibc-4.2.3 --build=i386-pc-linux-gnu --host=i386-pc-linux-gn
u --target=mipsel-linux-uclibc --enable-languages=c,c++ --disable-__cxa_atexit -
-enable-target-optspace --with-gnu-ld --with-gmp=/home/gracecsm/toolchains/src/t
oolchains/linux-2.6/buildroot/toolchain_build_mipsel/gmp --with-mpfr=/home/grace
csm/toolchains/src/toolchains/linux-2.6/buildroot/toolchain_build_mipsel/mpfr --
enable-shared --disable-nls --enable-threads --disable-multilib --with-abi=32 --
with-tune=mips32
Thread model: posix
gcc version 4.2.3

蟹さんのときと同じで

newlib/libc/include/stdlib.h の deprecatedを2行コメントアウト
newlib/libc/include/sys/_intsup.h の Unable to determineを2行コメントアウト

gccのバージョンが古いためか

libgloss/mips/crt0.Sの.gnu_attribute 4,0をコメントアウトが必要だった。

あと何故かコンパイル時にmakedoc.cのコンパイルのためにgccが必要になっていた。ところがconfigure時に/usr/bin/ccをgccとシンボリックリンクしておくとconfigureが暴走します。。。

configureはいろいろ試して、こうしました。

% ./configure --target=mips --host=amd64 CFLAGS_FOR_TARGET="-fno-pic -mno-abicalls"

setjmpで固まるのでデバッグして、newlib/libc/machine/mips/setjmp.SのsetjmpとlongjmpのFPR_LAYOUTをコメントアウトしたら正常に動くようになりました。

テストプログラムはこんなです。

jmp_buf env;
        printk("MORIMORI1");
        if (setjmp(env) == 0) {
                printk("MORIMORI2");
                longjmp(env, 1);
        } else {
                printk("MORIMORI3");
        }

_sbrkを作ってmallocのテストもした方が良いです。

long *ptr;
        printk("MORIMORI1");
        ptr = malloc(32);
        printk("MORIMORI2");

pkgで入れたgcc6ではコンパイルできそうになかったので、あきらめました。

newlibはmakeの中でもconfigureを実行しているような感じがしますし、configureを二度かけると挙動が違ったり、なんだか変です。

arm編

armel用にnewlib-3.0.0.20180831をビルドしてみました。armのgcc4はFreeBSDのpkgで用意されていたので、それを使います。上で書いていたdocのgccも問題も解決しました。

% ./configure --disable-newlib-supplied-syscalls --target=arm-none-eabi --host=amd64 CC_FOR_BUILD=cc
% gmake

こちらは修正無しに通りました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away