0

アプリケーションをコンパイルしましたが、.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

どうぞ、どんな助けでも大歓迎です。このミスアライメントをコードから取り除く必要があります。

4

0 に答える 0