質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.03%

arm-gccのバージョンを上げたら、Segmentation Fault

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,414

score 24

arm上で動作するアプリを作っています。
これまで使用してきたarm-gccのバージョンを上げたところ、ビルドは出来るのですが実機で実行するとすぐにSegmentation Faultか、全く何も出ずCtrl+Cで止めるしかない状況です。
ちなみに、クロスコンパイルしています。

ターゲットはLinux環境で次のようなものです。

$ cat /proc/cpuinfo
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 227.73
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5

Hardware        : DaVinci DA830/OMAP-L137/AM17xx EVM
Revision        : 0000
Serial          : 0000000000000000

これまで使ってきたgccのバージョンは4.6.1で、次のようなものです。

Target: arm-none-linux-gnueabi
Configured with: /scratch/jwlemke/2011.09-arm-linux-eabi-lite/src/gcc-4.6-2011.09/configure --build=i686-pc-linux-gnu --host=i686-mingw32 --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -DCS_SOURCERYGXX_MAJ=2011 -DCS_SOURCERYGXX_MIN=9 -DCS_SOURCERYGXX_REV=70 %{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2011.09-70' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/install/host-i686-mingw32/arm-none-linux-gnueabi/libc --with-libiconv-prefix=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/usr --with-gmp=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/usr --with-mpfr=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/usr --with-mpc=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/usr --with-ppl=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-cloog=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/usr --with-libelf=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/host-libs-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/tools-i686-pc-linux-gnu-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/jwlemke/2011.09-arm-linux-eabi-lite/obj/tools-i686-pc-linux-gnu-2011.09-70-arm-none-linux-gnueabi-i686-mingw32/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.6.1 (Sourcery CodeBench Lite 2011.09-70)

これから使いたい(使えたら)と思っているのは、v6.5.0です。

Target: arm-linux-gnueabi
Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release_1/snapshots/gcc.git~linaro-6.5-2018.12/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/i686-w64-mingw32 --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/i686-w64-mingw32 --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/i686-w64-mingw32 --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --with-system-zlib --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=soft --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/sysroots/arm-linux-gnueabi --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/i686-w64-mingw32/arm-linux-gnueabi/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --with-libiconv-prefix=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/i686-w64-mingw32/usr --with-system-zlib=no --build=x86_64-unknown-linux-gnu --host=i686-w64-mingw32 --target=arm-linux-gnueabi --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release_1/_build/builds/destdir/i686-w64-mingw32
Thread model: posix
gcc version 6.5.0 (Linaro GCC 6.5-2018.12)

必要なコンパイルオプションはどのようなものでしょうか?
-marm -march=armv5eや-mthumbなど色々試してみたのですが動かず、そもそもgccがターゲット環境に合っているのか?という疑問が湧いてきました。
ちなみに、テストコードはよくある"Hello, World!"を出力するだけのものでスタティックリンク(-staticオプション)しています。ビルドエラー・ワーニングは出ていません。

ビルドされた実行コードにはこんなヘッダが付いていました。

gcc 4.6.1の方(動く方)

$ file test-gcc4.6.1
test-gcc4.6.1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, not stripped

gcc 6.5.0の方(動かない方)

$ file test-gcc6.5.0
test-gcc6.5.0: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=48a192810f4135d4c9b35c826632ce2991187fc6, with debug_info, not stripped

EABIの違いが気になっていますが、共有ライブラリに依存してなければ動くのだろうと思っています。

アドバイス、よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

Segmentation Fault が出るのなら幸いです。coreを出力する様にして、gdb で問題の原因を確認しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る