splrs
splrs

Reputation: 2432

Building and using pnacl-compiler-rt with coverage functionality included

I'm currently having some serious trouble with making use of pnacl-compiler-rt, as I've had no success in finding any info on getting it to build (on Mac, which may or may not be relevant in the case of NaCl) with the instrumentation stuff (e.g. to include GCDAProfiling). My most recent attempt was to modify make/options.mk:

#Added this
FUNCTIONS := GCDAProfiling

I checked the library to see whether it was in there using 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

I've copied this library into the pepper_49/lib/clang-newlib_x86_64/[Debug|Release] folders.

I've also updated the pepper_49 earth example's Makefile in order to attempt to get some code coverage data, changing only the following lines:

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

When I attempt to build, I get the following (please note that I have also attempted 64-bit linking but attached the wrong output, with no current means to replace it with the correct output...):

  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

I'm doing something (probably several) incredibly basic wrong here, but without any documentation I'm at a loss as to how to:

  1. Build pnacl-compiler-rt correctly
  2. Get it to link so that I can instrument my .nexe files and get some coverage data.

Any help is greatly appreciated.

Upvotes: 0

Views: 458

Answers (1)

eggbomb
eggbomb

Reputation: 11

  1. To build correctly you need to build with the NaCl toolchain compiler (Assumption, you have only built with you host compiler i.e. Mac)
  2. To link, once built with the NaCl toolchain linking should work fine. Although note in your example you have put the library in the 64bit folder and you are trying to build a 32bit example.

Upvotes: 1

Related Questions