アプリケーションをコンパイルしましたが、.bss セクション内のオブジェクトの位置がずれています。比較提案のために、同じツールチェーンを使用して CppUTest フレームワーク内に同じコードを作成しました。これにより、アプリの位置がずれている同じ場所に塗りつぶしが表示されます。
アプリ マップ ファイル (位置がずれています):
.bss 0x000132a0 0x3c
*(.dynbss)
.dynbss 0x000132a0 0x4 /home/fanl/re8kkernel/tools/linux-devkit/bin/../arm-arago-linux-gnueabi/usr/lib/crti.o
0x000132a0 stdout@@GLIBC_2.4
*(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x000132a4 0x0 /home/fanl/re8kkernel/tools/linux-devkit/bin/../arm-arago-linux-gnueabi/usr/lib/crt1.o
.bss 0x000132a4 0x0 /home/fanl/re8kkernel/tools/linux-devkit/bin/../arm-arago-linux-gnueabi/usr/lib/crti.o
.bss 0x000132a4 0x1 /home/fanl/re8kkernel/tools/linux-devkit/bin/../lib/gcc/arm-arago-linux-gnueabi/4.3.3/crtbegin.o
####(MISSALIGN)####
.bss 0x000132a5 0x0 obj_tgt/main.o
.bss 0x000132a5 0x0 ../../common/lib/libhal-tgt.a(hal_app.o)
.bss 0x000132a5 0x0 ../../common/lib/libhal-tgt.a(helper.o)
.bss 0x000132a5 0x0 ../../common/lib/libhal-tgt.a(requirer.o)
.bss 0x000132a5 0x0 ../../common/lib/libchelper-tgt.a(log.o)
.bss 0x000132a5 0x0 ../../common/lib/libchelper-tgt.a(number.o)
CppUTest フレームワークのコンパイル (ミスアラインなし)
.bss 0x00020230 0x3190
*(.dynbss)
.dynbss 0x00020230 0x9c /home/fanl/re8kkernel/tools/linux-devkit/bin/../arm-arago-linux-gnueabi/usr/lib/crti.o
0x00020230 _ZTVSt9exception@@GLIBCXX_3.4
0x00020248 _ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
0x00020278 _ZTVSt9bad_alloc@@GLIBCXX_3.4
0x00020290 _ZTVN10__cxxabiv120__si_class_type_infoE@@CXXABI_1.3
0x000202bc stdout@@GLIBC_2.4
0x000202c0 _ZTISt9bad_alloc@@GLIBCXX_3.4
*(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x000202cc 0x0 /home/fanl/re8kkernel/tools/linux-devkit/bin/../arm-arago-linux-gnueabi/usr/lib/crt1.o
.bss 0x000202cc 0x0 /home/fanl/re8kkernel/tools/linux-devkit/bin/../arm-arago-linux-gnueabi/usr/lib/crti.o
.bss 0x000202cc 0x1 /home/fanl/re8kkernel/tools/linux-devkit/bin/../lib/gcc/arm-arago-linux-gnueabi/4.3.3/crtbegin.o
####(FILL HERE! NO MISSALIGN! I NEED THIS FILL TOO)####
*fill* 0x000202cd 0x3 00
.bss 0x000202d0 0x4 obj_tgt_test/test/mocks/call_counter.o
.bss 0x000202d4 0x28 obj_tgt_test/test/mocks/terminal_intercepter.o
0x000202d4 intercepted_output
.bss 0x000202fc 0x0 obj_tgt_test/test/test_main.o
以下に、CppUTest フレームワークでのコンパイルに使用されるフラグを示します。
OS Linux
Compile C and C++ source with CPPFLAGS:
-I
../../common/CppUTest/include/
-Isrc
-g
-I
../../common/include
-D
AUTO_GEN_BUILD_TAG='0-g1db06ad'
-D
AUTO_GEN_FIRWMARE_VERSION='0.00-re8k-app-2013-09-16'
-D
SYSTEM_UNIT_TEST
-DCPPUTEST_COMPILATION
-Iinclude/CppUTestExt/CppUTestGMock
-Iinclude/CppUTestExt/CppUTestGTest
-Wall
-include
../../common/CppUTest/include/CppUTest/MemoryLeakDetectorMallocMacros.h
Compile C++ source with CXXFLAGS:
-g
-Wall
-include
../../common/CppUTest/include/CppUTest/MemoryLeakDetectorNewMacros.h
Compile C source with CFLAGS:
-Wextra
-pedantic
-Wstrict-prototypes
-g
Link with LDFLAGS:
-Wl,-Map=app-tgt-test.map
-g
Link with LD_LIBRARIES:
../../common/lib/libhal-tgt-test.a
../../common/lib/libchelper-tgt-test.a
-L
../../common/shared-lib/
-lzmq
-lrt
-lpthread
-lm
-lrt
-lpthread
-lm
-lstdc++
Create libraries with ARFLAGS:
rv
最後に、これはミスアラインされた実行可能ファイルを作成するビルド手順です。
arm-arago-linux-gnueabi-gcc -I. -Isrc -g -I ../../common/include -D AUTO_GEN_BUILD_TAG='"0-g1db06ad"' -D AUTO_GEN_FIRWMARE_VERSION='"0.00-re8k-app-2013-09-16"' -Wall src/main.c -c -o obj_tgt/main.o
arm-arago-linux-gnueabi-gcc obj_tgt/main.o ../../common/lib/libhal-tgt.a ../../common/lib/libchelper-tgt.a -L ../../common/shared-lib/ -lzmq -lrt -lpthread -lm -o app-tgt -Wl,-Map=app-tgt.map
どうぞ、どんな助けでも大歓迎です。このミスアライメントをコードから取り除く必要があります。