构建和使用包含覆盖功能的pnacl-compiler-rt



我目前在使用pnacl-compiler-rt方面遇到了一些严重的麻烦,因为我没有成功地找到任何关于让它构建(在Mac上,在NaCl的情况下可能相关也可能不相关)的信息(例如包括GCDAProfiling)。我最近的尝试是修改make/options.mk:

#Added this
FUNCTIONS := GCDAProfiling

我检查了库,看看它是否在那里使用ar -t libcompiler_rt.a:

__.SYMDEF SORTED
GCDAProfiling.o  ------------- Here it is
clzti2.o
compilerrt_fmax.o
compilerrt_fmaxf.o
compilerrt_logb.o
compilerrt_logbf.o
ctzti2.o
divdc3.o
divdi3.o
divmoddi4.o
divmodsi4.o
divsc3.o
divsi3.o
divti3.o
fixdfdi.o
fixdfsi.o
fixdfti.o
fixsfdi.o
fixsfsi.o
fixsfti.o
fixunsdfdi.o
fixunsdfsi.o
fixunsdfti.o
fixunssfdi.o
fixunssfsi.o
fixunssfti.o
floatdidf.o
floatdisf.o
floatsidf.o
floatsisf.o
floattidf.o
floattisf.o
floatundidf.o
floatundisf.o
floatunsidf.o
floatunsisf.o
floatuntidf.o
floatuntisf.o
int_util.o
moddi3.o
modsi3.o
modti3.o
muldc3.o
muloti4.o
mulsc3.o
multi3.o
popcountdi2.o
popcountsi2.o
popcountti2.o
powidf2.o
powisf2.o
udivdi3.o
udivmoddi4.o
udivmodsi4.o
udivmodti4.o
udivsi3.o
udivti3.o
umoddi3.o
umodsi3.o
umodti3.o

我已经把这个库复制到pepper_49/lib/clang-newlib_x86_64/[Debug|Release]文件夹。

我还更新了pepper_49 earth示例的Makefile,以便尝试获得一些代码覆盖率数据,仅更改以下行:

VALID_TOOLCHAINS := clang-newlib
...
LIBS = ppapi_simple_cpp nacl_io sdk_util ppapi_cpp ppapi pthread compiler_rt
...
CFLAGS = --coverage -Wall

当我尝试构建时,我得到以下内容(请注意,我也尝试过64位链接,但附加了错误的输出,目前没有方法将其替换为正确的输出…):

  CXX  clang-newlib/Release/earth_x86_32.o
  LINK clang-newlib/Release/earth_unstripped_x86_32.nexe
clang-newlib/Release/earth_x86_32.o: In function `__llvm_gcov_writeout':
earth.cc:(.text+0xb53c): undefined reference to `llvm_gcda_start_file'
earth.cc:(.text+0xb57c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb59c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb5dc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb5fc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb63c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb65c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb69c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb6bc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb6fc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb71c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb75c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb77c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb7bc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb7dc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb81c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb83c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb87c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb89c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb8dc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb8fc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb93c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb95c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb99c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xb9bc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xb9fc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xba1c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xba5c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xba7c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbabc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbadc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbb1c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbb3c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbb7c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbb9c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbbdc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbbfc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbc3c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbc5c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbc9c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbcbc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbcfc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbd1c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbd5c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbd7c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbdbc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbddc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbe1c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbe3c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbe7c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbe9c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbedc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbefc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbf3c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbf5c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbf9c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xbfbc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xbffc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc01c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc05c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc07c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc0bc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc0dc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc11c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc13c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc17c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc19c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc1dc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc1fc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc23c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc25c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc29c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc2bc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc2fc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc31c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc35c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc37c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc3bc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc3dc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc41c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc43c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc47c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc49c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc4dc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc4fc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc53c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc55c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc59c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc5bc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc5fc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc61c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc65c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc67c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc6bc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc6dc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc71c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc73c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc77c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc79c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc7dc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc7fc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc83c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc85c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc89c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc8bc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc8fc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc91c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc95c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc97c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xc9bc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xc9dc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xca1c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xca3c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xca7c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xca9c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcadc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcafc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcb3c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcb5c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcb9c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcbbc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcbfc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcc1c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcc5c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcc7c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xccbc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xccdc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcd1c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcd3c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcd7c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcd9c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcddc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcdfc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xce3c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xce5c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xce9c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcebc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcefc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcf1c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcf5c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcf7c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xcfbc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xcfdc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd01c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd03c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd07c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd09c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd0dc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd0fc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd13c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd15c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd19c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd1bc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd1fc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd21c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd25c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd27c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd2bc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd2dc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd31c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd33c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd37c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd39c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd3dc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd3fc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd43c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd45c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd49c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd4bc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd4fc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd51c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd55c): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd57c): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd5bc): undefined reference to `llvm_gcda_emit_function'
earth.cc:(.text+0xd5dc): undefined reference to `llvm_gcda_emit_arcs'
earth.cc:(.text+0xd5fc): undefined reference to `llvm_gcda_summary_info'
clang-newlib/Release/earth_x86_32.o: In function `__llvm_gcov_init':
earth.cc:(.text+0x1127c): undefined reference to `llvm_gcov_init'
clang-newlib/Release/earth_x86_32.o: In function `__llvm_gcov_writeout':
earth.cc:(.text+0xd605): undefined reference to `llvm_gcda_end_file'
i686-nacl-clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [clang-newlib/Release/earth_unstripped_x86_32.nexe] Error 1

我在这里做了一些(可能是几个)令人难以置信的基本错误,但是没有任何文档,我不知道如何:

  1. 正确构建pnacl-compiler-rt
  2. 把它链接起来,这样我就可以检测我的。nexe文件并获得一些覆盖数据。

  1. 要正确构建,您需要使用NaCl工具链编译器构建(假设您只使用主机编译器构建,即Mac)
  2. 链接,一旦用NaCl工具链构建链接应该工作良好。虽然注意在你的例子中,你已经把库在64位文件夹,你试图建立一个32位的例子。

最新更新