(toppers-users 4183) Re: kernel_cfg.timestampでのSegmentation Fault

Masaki Muranaka monamour @ monaka.org
2013年 12月 3日 (火) 23:30:50 JST


こんばんは.

手元のバイナリを http://archive.pizzafactory.jp/toppers/tmp/cfg に置きました.
md5 は 25f03a9e005e69633d32c3dca69fd308 です.

ldd の結果と,gdb で実行した時の出力を参考までに貼付します.
落ちている場所から boost-spirit の内側が怪しいです.
i386 / x86_64 で挙動が違うというのは,いかにもありそうではありますね.

▼
linux-vdso.so.1 =>  (0x00007fffbff0d000)
libboost_system.so.1.46.1 => /usr/lib/libboost_system.so.1.46.1
(0x00007f32db1ed000)
libboost_filesystem.so.1.46.1 =>
/usr/lib/libboost_filesystem.so.1.46.1 (0x00007f32dafcf000)
libboost_program_options.so.1.46.1 =>
/usr/lib/libboost_program_options.so.1.46.1 (0x00007f32dad69000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f32daa69000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f32da853000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f32da493000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f32da276000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f32d9f7a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f32db404000)
▲

手元環境での gdb の出力は,こんな感じです.

▼
Breakpoint 1, 0x0000000000417870 in cfg2_main() ()
(gdb) list
1 in ../sysdeps/unix/syscall-template.S
(gdb) s
Single stepping until exit from function _Z9cfg2_mainv,
which has no line number information.

Program received signal SIGSEGV, Segmentation fault.
0x000000000056ecf9 in free ()
(gdb) where
#0  0x000000000056ecf9 in free ()
#1  0x000000000040b689 in boost::detail::shared_count::~shared_count() ()
#2  0x000000000049c40d in toppers::(anonymous
namespace)::parser::definition<boost::spirit::classic::scanner<toppers::basic_text<std::vector,
char, std::char_traits<char>, std::allocator<char> >::const_iterator,
boost::spirit::classic::scanner_policies<boost::spirit::classic::skip_parser_iteration_policy<boost::spirit::classic::space_parser,
boost::spirit::classic::iteration_policy>,
boost::spirit::classic::pt_match_policy<toppers::basic_text<std::vector,
char, std::char_traits<char>, std::allocator<char> >::const_iterator,
boost::spirit::classic::node_iter_data_factory<boost::spirit::classic::nil_t>,
boost::spirit::classic::nil_t>, boost::spirit::classic::action_policy>
> >::definition(toppers::(anonymous namespace)::parser const&) [clone
.isra.907] ()
#3  0x00000000004ac5c9 in
toppers::macro_processor::evaluate(toppers::basic_text<std::vector,
char, std::char_traits<char>, std::allocator<char> > const&) ()
#4  0x0000000000417f8e in cfg2_main() ()
#5  0x0000000000406fe8 in cfg_main(int, char**) ()
#6  0x00000000004017ef in main ()
(gdb) quit
▲

2013年12月3日 23:05 Shinya Honda <honda @ ertl.jp>:
> 本田です.
>
> 確認ありがとうございます.こちらのでもほぼ同様の環境でビルドしてみました
> が,cfgをスタティックリンクすることなく,スクリプトの実行が成功しました.
>
> ・ホスト
>   Ubuntu 12.04 LTS 32bit
> ・コンパイラ
>   https://launchpad.net/~terry.guo/+archive/gcc-arm-embedded
>   に従ってapt-get でインストール
>
> 何が違うんですかね.可能ならそちらでビルドしたcfgを送ってもらえないで
> しょうか.
>
> 以上,よろしくお願いします.
>
> (2013/12/03 22:32), Masaki Muranaka wrote:
>> こんにちは.
>>
>> 手元(…とはいっても雲の向こうのAWS EC2インスタンスですが)の Ubuntu 12.04.3 LTS でも下記の通り SEGV が出ました.
>> safeg-0.5-armadillo-800-eva-6mar2013/tools/auto_build にあるシェルスクリプトを順に実行しただけです.
>> GCC は https://launchpad.net/~terry.guo/+archive/gcc-arm-embedded にあったものを使っています.
>> safeg-0.5-armadillo-800-eva-6mar2013/asp/cfg/cfg/cfg
>> をスタティックリンクしましたが,同様の SEGV が出ます.
>>
>> もしかしたら,Debian or Ubuntu で簡単に切り分けられる話でも,ないかもしれません.
>>
>>>> arm-none-eabi-nm -C cfg1_out.elf > cfg1_out.syms
>> arm-none-eabi-objcopy -O srec -S cfg1_out.elf cfg1_out.srec
>> ../../asp/cfg/cfg/cfg --pass 2 --kernel asp -I. -I../../asp/include
>> -I../../asp/arch -I../../asp  -I../../asp/target/armadillo-800-eva_gcc
>> -I../../asp/arch/arm_gcc/safeg -I../../asp/arch/arm_gcc/rma1
>> -I../../asp/arch/arm_gcc/common -I../../asp/arch/gcc \
>> -T ../../asp/target/armadillo-800-eva_gcc/target.tf --api-table
>> ../../asp/kernel/kernel_api.csv --cfg1-def-table
>> ../../asp/kernel/kernel_def.csv  --cfg1-def-table
>> ../../asp/arch/arm_gcc/common/core_def.csv  sample1.cfg
>> make: *** [kernel_cfg.timestamp] Segmentation fault (core dumped)
>> arm-none-eabi-gcc  -mlittle-endian -mcpu=cortex-a9 -g -Wall -O2
>> -DTOPPERS_SAFEG_SECURE -DTOPPERS_SAFEG_COM -DTOPPERS_SAFEG_LOAD
>> -D__TARGET_ARCH_ARM=7 -I. -I../../asp/include -I../../asp/arch
>> -I../../asp  -I../../asp/target/armadillo-800-eva_gcc
>> -I../../asp/arch/arm_gcc/safeg -I../../asp/arch/arm_gcc/rma1
>> -I../../asp/arch/arm_gcc/common -I../../asp/arch/gcc  -nostdlib
>> -mlittle-endian -N -mcpu=cortex-a9 -Wl,-Ttext,0x5f000000 -T
>> ../../asp/target/armadillo-800-eva_gcc/armadillo-800-eva.ld  -o
>> cfg1_out.elf \
>> cfg1_out.o
>> arm-none-eabi-nm -C cfg1_out.elf > cfg1_out.syms
>> arm-none-eabi-objcopy -O srec -S cfg1_out.elf cfg1_out.srec
>> ../../asp/cfg/cfg/cfg --pass 2 --kernel asp -I. -I../../asp/include
>> -I../../asp/arch -I../../asp  -I../../asp/target/armadillo-800-eva_gcc
>> -I../../asp/arch/arm_gcc/safeg -I../../asp/arch/arm_gcc/rma1
>> -I../../asp/arch/arm_gcc/common -I../../asp/arch/gcc \
>> -T ../../asp/target/armadillo-800-eva_gcc/target.tf --api-table
>> ../../asp/kernel/kernel_api.csv --cfg1-def-table
>> ../../asp/kernel/kernel_def.csv  --cfg1-def-table
>> ../../asp/arch/arm_gcc/common/core_def.csv  sample1.cfg
>> make: *** [kernel_cfg.timestamp] Segmentation fault (core dumped)
>>>> building SafeG
>>>>
>> 2013年12月3日 13:26 Shinya Honda <honda @ ertl.jp>:
>>> みつさん
>>>
>>> 本田です.
>>>
>>> スタティックリンクですが,最後にcfgを作成するときに-static と -lpthread を付ければリンクできました.
>>>
>>> -----------------------------------------------------------------------
>>>   g++ -static -O2  -o cfg cfg.o cfg0.o cfg1.o cfg2.o cfg3.o cfg4.o
>>> cfg_version.o -L/usr/lib -L/usr/lib ../toppers/itronx/libitronx.a
>>> ../toppers/oil/liboil.a ../toppers/libtoppers.a   -lboost_system
>>> -lboost_filesystem -lboost_program_options -lboost_regex -lpthread
>>> -----------------------------------------------------------------------
>>>
>>> スタティックリンクしたものでも同じエラーとなりました.
>>>
>>> UbuntuでスタティックリンクしたcfgをATDEに持ってきたら動作しました.
>>>
>>> 以上,よろしくお願いします.
>>>
>>> (2013/12/03 12:45), mitsu.takada @ nifty.ne.jp wrote:
>>>>
>>>> 本田さん
>>>>
>>>> みつです。
>>>> 全部エラーになるのはおかしいですね。
>>>> ATDEのコンパイル環境とホスト環境のライブラリがずれているような気もします。
>>>>
>>>> いまのmsysと同様にスタティックリンクで作成されるとどうでしょうか。
>>>> #アットマークテクノさんがどう検証されたのかわかりませんが。
>>>>
>>>> 2013/12/03 11:35、Shinya Honda <honda @ ertl.jp> のメール:
>>>>
>>>>> みつさん
>>>>>
>>>>> 本田です.
>>>>>
>>>>> cfg1_out::~cfg1_out() のコメントアウトを試してみましたが駄目でし た.1.7,1.8,1.9共にエラーになります.
>>>>>
>>>>> どうやらATDE上でビルドしたcfgは軒並みエラーとなるようです.
>>>>>
>>>>> 以上,よろしくお願いします.
>>>>>
>>>>> (2013/12/03 10:53), mitsu.takada @ nifty.ne.jp wrote:
>>>>>>
>>>>>> 鈴木さん
>>>>>>
>>>>>> こんにちは,みつといいます。
>>>>>> メッセージをみるとcfgがpass2の実行時に落ちているのだと思います。
>>>>>> ATDEは使ったことがないのですが,ホスト環境はDebianなのですね。
>>>>>>
>>>>>> cfgはDebianの中で作成されていると思うのですが,
>>>>>> toppers/itronx/cfg1_out.c にある cfg1_out::~cfg1_out() の「delete
>>>>>> pimpl_」をコメントアウトしてcfgを再ビルドされるとどうでしょうか。
>>>>>>
>>>>>> 2013/12/03 2:39、Juggler Shu <shu @ jugglershu.net> のメール:
>>>>>>
>>>>>>> 返信ありがとうございます。
>>>>>>>
>>>>>>> 利用しているsafegのバージョンは以下のものです。
>>>>>>> - safeg-0.5-armadillo-800-eva-6mar2013
>>>>>>>
>>>>>>> ログを見る限り、以下のバージョンのソースコードをfetch_sources.shは取って きているようです。
>>>>>>> - linux-2.6.35-a800eva-at3.tar.gz
>>>>>>> - asp_armadillo-800-eva_gcc-20130221.tar.gz
>>>>>>> - cfg-1.8.0.tar.gz
>>>>>>>
>>>>>>> なお、コンパイラはATDE4に追加で
>>>>>>> gcc-arm-none-eabi-4_7-2013q3
>>>>>>> をダウンロードし、コンパイルしてインストールしました。
>>>>>>>
>>>>>>> 以下に、build_all.shスクリプトでエラーが起きた箇所のビルドログを貼り付け ます。
>>>>>>> 何か環境等、確認すべきものがあればお教え下さい。
>>>>>>> よろしくお願い致します。
>>>>>>>
>>>>>>> ----BEGIN----
>>>>>>> LIBBOOST_SUFFIX=
>>>>>>> BOOST_VERSION=1_55
>>>>>>> BOOST_DIR=/usr/local/include
>>>>>>> LIBBOOST_DIR=/usr/local/lib
>>>>>>> OPTIONS=
>>>>>>> make BOOST_DIR="/usr/local/include" LIBBOOST_SUFFIX="" CXXFLAGS="-O2 "
>>>>>>> -C toppers
>>>>>>> make[1]: ディレクトリ
>>>>>>> `/home/atmark/Downloads/safeg/safeg-0.5-armadillo-800-eva-6mar2013/asp/cfg/toppers'
>>>>>>> に入ります
>>>>>>> make[1]: `all' に対して行うべき事はありません.
>>>>>>> make[1]: ディレクトリ
>>>>>>> `/home/atmark/Downloads/safeg/safeg-0.5-armadillo-800-eva-6mar2013/asp/cfg/toppers'
>>>>>>> から出ます
>>>>>>> make BOOST_DIR="/usr/local/include" LIBBOOST_SUFFIX="" CXXFLAGS="-O2 "
>>>>>>> -C toppers/itronx
>>>>>>> make[1]: ディレクトリ
>>>>>>> `/home/atmark/Downloads/safeg/safeg-0.5-armadillo-800-eva-6mar2013/asp/cfg/toppers/itronx'
>>>>>>> に入ります
>>>>>>> make[1]: `all' に対して行うべき事はありません.
>>>>>>> make[1]: ディレクトリ
>>>>>>> `/home/atmark/Downloads/safeg/safeg-0.5-armadillo-800-eva-6mar2013/asp/cfg/toppers/itronx'
>>>>>>> から出ます
>>>>>>> make BOOST_DIR="/usr/local/include" LIBBOOST_SUFFIX="" CXXFLAGS="-O2 "
>>>>>>> -C cfg
>>>>>>> make[1]: ディレクトリ
>>>>>>> `/home/atmark/Downloads/safeg/safeg-0.5-armadillo-800-eva-6mar2013/asp/cfg/cfg'
>>>>>>> に入ります
>>>>>>> make[1]: `all' に対して行うべき事はありません.
>>>>>>> make[1]: ディレクトリ
>>>>>>> `/home/atmark/Downloads/safeg/safeg-0.5-armadillo-800-eva-6mar2013/asp/cfg/cfg'
>>>>>>> から出ます
>>>>>>> if ! [ -f Makefile.depend ]; then \
>>>>>>>          rm -f kernel_cfg.timestamp kernel_cfg.c kernel_cfg.h ; \
>>>>>>>          rm -f cfg1_out.c cfg1_out.o cfg1_out.elf cfg1_out.syms
>>>>>>> cfg1_out.srec; \
>>>>>>>          rm -f makeoffset.s offset.h; \
>>>>>>>      fi
>>>>>>> rm -f Makefile.depend
>>>>>>> ../../asp/cfg/cfg/cfg --pass 1 --kernel asp -I. -I../../asp/include
>>>>>>> -I../../asp/arch -I../../asp -I../../asp/target/armadillo-800-eva_gcc
>>>>>>> -I../../asp/arch/arm_gcc/safeg -I../../asp/arch/arm_gcc/rma1
>>>>>>> -I../../asp/arch/arm_gcc/common -I../../asp/arch/gcc --api-table
>>>>>>> ../../asp/kernel/kernel_api.csv --cfg1-def-table
>>>>>>> ../../asp/kernel/kernel_def.csv  --cfg1-def-table
>>>>>>> ../../asp/arch/arm_gcc/common/core_def.csv  sample1.cfg
>>>>>>> arm-none-eabi-gcc -c  -mlittle-endian -mcpu=cortex-a9 -g -Wall -O2
>>>>>>> -DTOPPERS_SAFEG_SECURE -DTOPPERS_SAFEG_COM -DTOPPERS_SAFEG_LOAD
>>>>>>> -D__TARGET_ARCH_ARM=7 -I. -I../../asp/include -I../../asp/arch -I../../asp
>>>>>>> -I../../asp/target/armadillo-800-eva_gcc -I../../asp/arch/arm_gcc/safeg
>>>>>>> -I../../asp/arch/arm_gcc/rma1 -I../../asp/arch/arm_gcc/common
>>>>>>> -I../../asp/arch/gcc   -DALLFUNC -I../../asp/kernel cfg1_out.c
>>>>>>> arm-none-eabi-gcc  -mlittle-endian -mcpu=cortex-a9 -g -Wall -O2
>>>>>>> -DTOPPERS_SAFEG_SECURE -DTOPPERS_SAFEG_COM -DTOPPERS_SAFEG_LOAD
>>>>>>> -D__TARGET_ARCH_ARM=7 -I. -I../../asp/include -I../../asp/arch -I../../asp
>>>>>>> -I../../asp/target/armadillo-800-eva_gcc -I../../asp/arch/arm_gcc/safeg
>>>>>>> -I../../asp/arch/arm_gcc/rma1 -I../../asp/arch/arm_gcc/common
>>>>>>> -I../../asp/arch/gcc  -nostdlib -mlittle-endian -N -mcpu=cortex-a9
>>>>>>> -Wl,-Ttext,0x5f000000 -T
>>>>>>> ../../asp/target/armadillo-800-eva_gcc/armadillo-800-eva.ld  -o cfg1_out.elf
>>>>>>> \
>>>>>>>                           cfg1_out.o
>>>>>>> arm-none-eabi-nm -C cfg1_out.elf > cfg1_out.syms
>>>>>>> arm-none-eabi-objcopy -O srec -S cfg1_out.elf cfg1_out.srec
>>>>>>> ../../asp/cfg/cfg/cfg --pass 2 --kernel asp -I. -I../../asp/include
>>>>>>> -I../../asp/arch -I../../asp -I../../asp/target/armadillo-800-eva_gcc
>>>>>>> -I../../asp/arch/arm_gcc/safeg -I../../asp/arch/arm_gcc/rma1
>>>>>>> -I../../asp/arch/arm_gcc/common -I../../asp/arch/gcc \
>>>>>>>                  -T ../../asp/target/armadillo-800-eva_gcc/target.tf
>>>>>>> --api-table ../../asp/kernel/kernel_api.csv --cfg1-def-table
>>>>>>> ../../asp/kernel/kernel_def.csv  --cfg1-def-table
>>>>>>> ../../asp/arch/arm_gcc/common/core_def.csv  sample1.cfg
>>>>>>> make: *** [kernel_cfg.timestamp] セグメンテーション違反です
>>>>>>> arm-none-eabi-gcc  -mlittle-endian -mcpu=cortex-a9 -g -Wall -O2
>>>>>>> -DTOPPERS_SAFEG_SECURE -DTOPPERS_SAFEG_COM -DTOPPERS_SAFEG_LOAD
>>>>>>> -D__TARGET_ARCH_ARM=7 -I. -I../../asp/include -I../../asp/arch -I../../asp
>>>>>>> -I../../asp/target/armadillo-800-eva_gcc -I../../asp/arch/arm_gcc/safeg
>>>>>>> -I../../asp/arch/arm_gcc/rma1 -I../../asp/arch/arm_gcc/common
>>>>>>> -I../../asp/arch/gcc  -nostdlib -mlittle-endian -N -mcpu=cortex-a9
>>>>>>> -Wl,-Ttext,0x5f000000 -T
>>>>>>> ../../asp/target/armadillo-800-eva_gcc/armadillo-800-eva.ld  -o cfg1_out.elf
>>>>>>> \
>>>>>>>                           cfg1_out.o
>>>>>>> arm-none-eabi-nm -C cfg1_out.elf > cfg1_out.syms
>>>>>>> arm-none-eabi-objcopy -O srec -S cfg1_out.elf cfg1_out.srec
>>>>>>> ../../asp/cfg/cfg/cfg --pass 2 --kernel asp -I. -I../../asp/include
>>>>>>> -I../../asp/arch -I../../asp -I../../asp/target/armadillo-800-eva_gcc
>>>>>>> -I../../asp/arch/arm_gcc/safeg -I../../asp/arch/arm_gcc/rma1
>>>>>>> -I../../asp/arch/arm_gcc/common -I../../asp/arch/gcc \
>>>>>>>                  -T ../../asp/target/armadillo-800-eva_gcc/target.tf
>>>>>>> --api-table ../../asp/kernel/kernel_api.csv --cfg1-def-table
>>>>>>> ../../asp/kernel/kernel_def.csv  --cfg1-def-table
>>>>>>> ../../asp/arch/arm_gcc/common/core_def.csv  sample1.cfg
>>>>>>> make: *** [kernel_cfg.timestamp] セグメンテーション違反です
>>>>>>>>>
>>>>>>>>> building SafeG
>>>>>>>
>>>>>>> arm-none-eabi-gcc -c -DSAFEG_RMA1 -DPROF_SUPPORT
>>>>>>> -DDUALOS_DEVICE_SHARING -mcpu=cortex-a9 -msoft-float -g -Wall -Wextra
>>>>>>> -Werror -I . -DSECURE_START_ADDRESS=0x5f000000
>>>>>>> -DNORMAL_START_ADDRESS=0xe80c0000 -D__TARGET_ARCH_ARM=7 -O2 safeg.S
>>>>>>> arm-none-eabi-gcc -c -DSAFEG_RMA1 -DPROF_SUPPORT
>>>>>>> -DDUALOS_DEVICE_SHARING -mcpu=cortex-a9 -msoft-float -g -Wall -Wextra
>>>>>>> -Werror -I . -DSECURE_START_ADDRESS=0x5f000000
>>>>>>> -DNORMAL_START_ADDRESS=0xe80c0000 -D__TARGET_ARCH_ARM=7 -O2 crt0-safeg.S
>>>>>>> arm-none-eabi-gcc -mcpu=cortex-a9 -msoft-float -static -nostdlib -lgcc
>>>>>>> -Wl,-Ttext,0x5f800000 -T safeg.lds safeg_start.o safeg.o crt0-safeg.o -o
>>>>>>> safeg.elf
>>>>>>> arm-none-eabi-objcopy -O binary -S safeg.elf safeg.bin
>>>>>>>>>
>>>>>>>>> copying binary files
>>>>>>>
>>>>>>> mkdir: ディレクトリ `./tools/auto_build/output' を作成できません: ファイ ルが存在します
>>>>>>> cp: `./app/sample1_s/asp.elf' を stat できません: そのようなファイルや ディレクト
>>>>>>> ----END----
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 12/2/13 2:32 PM, Shinya Honda wrote:
>>>>>>>>
>>>>>>>> 鈴木さん
>>>>>>>>
>>>>>>>> 本田です.
>>>>>>>>
>>>>>>>> こちらでは,ATDE4でビルド出来ています.
>>>>>>>>
>>>>>>>> 下記の情報だけでは判断できないので,ビルドログや使われたソースのバー ジョ ンを提示頂けないでしょうか.
>>>>>>>>
>>>>>>>> 以上,よろしくお願いします.
>>>>>>>>
>>>>>>>> (2013/12/01 18:22), Juggler Shu wrote:
>>>>>>>>>
>>>>>>>>> はじめまして。現在TrustZone関連の技術について調べておりまして、
>>>>>>>>> safegをArmadillo-800evaで動作させたいと考えているものです。
>>>>>>>>> プリビルド版に関しては問題なく動作しているようなのですが、コードの変更な
>>>>>>>>> どを入れたいと考え
>>>>>>>>> ソースコードからビルドしようとしました。
>>>>>>>>>
>>>>>>>>> そうしたところ、ASPのsample1をビルドしようとしたところで以下のエラーと
>>>>>>>>> なってしまいました。
>>>>>>>>>
>>>>>>>>> make: *** [kernel_cfg.timestamp] セグメンテーション違反です
>>>>>>>>>
>>>>>>>>> 1つずつ手動でビルドした場合でも、build_all.shスクリプトを用いた場合でも
>>>>>>>>> 同様のようでした。
>>>>>>>>> バイナリは出来上がっているようなのですが。
>>>>>>>>>
>>>>>>>>> ビルド環境はArmadilloで提供されているATDE4を用いています。
>>>>>>>>>
>>>>>>>>> このエラーを修正する方法がありましたら、お教えいただきたいです。
>>>>>>>>> よろしくお願い致します。
>>>>>>>>>
>>>>>>>>> 鈴木秀一郎
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>
>