swipl-devel icon indicating copy to clipboard operation
swipl-devel copied to clipboard

Build failed with address sanitizer

Open spl opened this issue 4 years ago • 2 comments
trafficstars

I successfully built SWI-Prolog/swipl:

cmake -G Ninja ..
ninja
ctest -j8

However, I cannot build it with the address sanitizer (ASAN):

cmake -DCMAKE_BUILD_TYPE=Sanitize -G Ninja ..
ninja

The cmake log is cmake-log.txt.

The ninja log is:

~/projects/swipl $ ninja
[589/2446] Linking C shared library src/libswipl.8.4.0.dylib
FAILED: src/libswipl.8.4.0.dylib 
: && /Library/Developer/CommandLineTools/usr/bin/cc  -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -dynamiclib -Wl,-headerpad_max_install_names -compatibility_version 8.0.0 -current_version 8.4.0 -o src/libswipl.8.4.0.dylib -install_name @rpath/libswipl.8.dylib src/CMakeFiles/swiplobjs.dir/pl-atom.c.o src/CMakeFiles/swiplobjs.dir/pl-wam.c.o src/CMakeFiles/swiplobjs.dir/pl-arith.c.o src/CMakeFiles/swiplobjs.dir/pl-bag.c.o src/CMakeFiles/swiplobjs.dir/pl-error.c.o src/CMakeFiles/swiplobjs.dir/pl-comp.c.o src/CMakeFiles/swiplobjs.dir/pl-zip.c.o src/CMakeFiles/swiplobjs.dir/pl-dwim.c.o src/CMakeFiles/swiplobjs.dir/pl-ext.c.o src/CMakeFiles/swiplobjs.dir/pl-flag.c.o src/CMakeFiles/swiplobjs.dir/pl-funct.c.o src/CMakeFiles/swiplobjs.dir/pl-gc.c.o src/CMakeFiles/swiplobjs.dir/pl-privitf.c.o src/CMakeFiles/swiplobjs.dir/pl-list.c.o src/CMakeFiles/swiplobjs.dir/pl-string.c.o src/CMakeFiles/swiplobjs.dir/pl-load.c.o src/CMakeFiles/swiplobjs.dir/pl-modul.c.o src/CMakeFiles/swiplobjs.dir/pl-op.c.o src/CMakeFiles/swiplobjs.dir/pl-prims.c.o src/CMakeFiles/swiplobjs.dir/pl-pro.c.o src/CMakeFiles/swiplobjs.dir/pl-proc.c.o src/CMakeFiles/swiplobjs.dir/pl-prof.c.o src/CMakeFiles/swiplobjs.dir/pl-read.c.o src/CMakeFiles/swiplobjs.dir/pl-rec.c.o src/CMakeFiles/swiplobjs.dir/pl-setup.c.o src/CMakeFiles/swiplobjs.dir/pl-sys.c.o src/CMakeFiles/swiplobjs.dir/pl-trace.c.o src/CMakeFiles/swiplobjs.dir/pl-util.c.o src/CMakeFiles/swiplobjs.dir/pl-wic.c.o src/CMakeFiles/swiplobjs.dir/pl-write.c.o src/CMakeFiles/swiplobjs.dir/pl-term.c.o src/CMakeFiles/swiplobjs.dir/pl-thread.c.o src/CMakeFiles/swiplobjs.dir/pl-xterm.c.o src/CMakeFiles/swiplobjs.dir/pl-srcfile.c.o src/CMakeFiles/swiplobjs.dir/pl-beos.c.o src/CMakeFiles/swiplobjs.dir/pl-attvar.c.o src/CMakeFiles/swiplobjs.dir/pl-gvar.c.o src/CMakeFiles/swiplobjs.dir/pl-btree.c.o src/CMakeFiles/swiplobjs.dir/pl-init.c.o src/CMakeFiles/swiplobjs.dir/pl-gmp.c.o src/CMakeFiles/swiplobjs.dir/pl-segstack.c.o src/CMakeFiles/swiplobjs.dir/pl-hash.c.o src/CMakeFiles/swiplobjs.dir/pl-version.c.o src/CMakeFiles/swiplobjs.dir/pl-codetable.c.o src/CMakeFiles/swiplobjs.dir/pl-supervisor.c.o src/CMakeFiles/swiplobjs.dir/pl-dbref.c.o src/CMakeFiles/swiplobjs.dir/pl-termhash.c.o src/CMakeFiles/swiplobjs.dir/pl-variant.c.o src/CMakeFiles/swiplobjs.dir/pl-assert.c.o src/CMakeFiles/swiplobjs.dir/pl-copyterm.c.o src/CMakeFiles/swiplobjs.dir/pl-debug.c.o src/CMakeFiles/swiplobjs.dir/pl-cont.c.o src/CMakeFiles/swiplobjs.dir/pl-ressymbol.c.o src/CMakeFiles/swiplobjs.dir/pl-dict.c.o src/CMakeFiles/swiplobjs.dir/pl-trie.c.o src/CMakeFiles/swiplobjs.dir/pl-indirect.c.o src/CMakeFiles/swiplobjs.dir/pl-tabling.c.o src/CMakeFiles/swiplobjs.dir/pl-rsort.c.o src/CMakeFiles/swiplobjs.dir/pl-mutex.c.o src/CMakeFiles/swiplobjs.dir/pl-allocpool.c.o src/CMakeFiles/swiplobjs.dir/pl-wrap.c.o src/CMakeFiles/swiplobjs.dir/pl-event.c.o src/CMakeFiles/swiplobjs.dir/pl-transaction.c.o src/CMakeFiles/swiplobjs.dir/pl-undo.c.o src/CMakeFiles/swiplobjs.dir/pl-alloc.c.o src/CMakeFiles/swiplobjs.dir/pl-index.c.o src/CMakeFiles/swiplobjs.dir/pl-fli.c.o src/CMakeFiles/swiplobjs.dir/os/pl-buffer.c.o src/CMakeFiles/swiplobjs.dir/os/pl-ctype.c.o src/CMakeFiles/swiplobjs.dir/os/pl-file.c.o src/CMakeFiles/swiplobjs.dir/os/pl-files.c.o src/CMakeFiles/swiplobjs.dir/os/pl-glob.c.o src/CMakeFiles/swiplobjs.dir/os/pl-os.c.o src/CMakeFiles/swiplobjs.dir/os/pl-stream.c.o src/CMakeFiles/swiplobjs.dir/os/pl-string.c.o src/CMakeFiles/swiplobjs.dir/os/pl-table.c.o src/CMakeFiles/swiplobjs.dir/os/pl-text.c.o src/CMakeFiles/swiplobjs.dir/os/pl-utf8.c.o src/CMakeFiles/swiplobjs.dir/os/pl-fmt.c.o src/CMakeFiles/swiplobjs.dir/os/pl-dtoa.c.o src/CMakeFiles/swiplobjs.dir/os/pl-option.c.o src/CMakeFiles/swiplobjs.dir/os/pl-cstack.c.o src/CMakeFiles/swiplobjs.dir/os/pl-codelist.c.o src/CMakeFiles/swiplobjs.dir/os/pl-prologflag.c.o src/CMakeFiles/swiplobjs.dir/os/pl-tai.c.o src/CMakeFiles/swiplobjs.dir/os/pl-locale.c.o src/CMakeFiles/swiplobjs.dir/libtai/caltime_utc.c.o src/CMakeFiles/swiplobjs.dir/libtai/caltime_tai.c.o src/CMakeFiles/swiplobjs.dir/libtai/leapsecs_sub.c.o src/CMakeFiles/swiplobjs.dir/libtai/leapsecs_add.c.o src/CMakeFiles/swiplobjs.dir/libtai/caldate_fmjd.c.o src/CMakeFiles/swiplobjs.dir/libtai/caldate_mjd.c.o src/CMakeFiles/swiplobjs.dir/libtai/leapsecs_init.c.o src/CMakeFiles/swiplobjs.dir/libtai/leapsecs_read.c.o src/CMakeFiles/swiplobjs.dir/libtai/tai_pack.c.o src/CMakeFiles/swiplobjs.dir/libtai/tai_unpack.c.o src/CMakeFiles/swiplobjs.dir/minizip/zip.c.o src/CMakeFiles/swiplobjs.dir/minizip/unzip.c.o src/CMakeFiles/swiplobjs.dir/minizip/ioapi.c.o  /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libcurses.tbd  /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libform.tbd  /usr/local/lib/libgmp.dylib  /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libz.tbd  -ldl  -lm && :
Undefined symbols for architecture x86_64:
  "_PL__ctx", referenced from:
      _atom_generator in pl-atom.c.o
      _unallocModule in pl-modul.c.o
      _stopProfiler in pl-prof.c.o
      _sig_profile in pl-prof.c.o
      _dispatch_signal in pl-setup.c.o
      _interruptHandler in pl-trace.c.o
      _PL_thread_raise in pl-thread.c.o
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[598/2446] Building C object packages/ssl/CMakeFiles/plugin_ssl4pl.dir/ssl4pl.c.o
ninja: build stopped: subcommand failed.

I'm on macOS 10.14.6 (Mojave).

spl avatar Oct 07 '21 06:10 spl

:cry: Seems a bug in the MacOS toolchain. Building with ASAN compiles exactly the same code as without, so if it compiles without it should compile with. Best I can suggest is to either try GCC or use a Linux machine. If it is really a memory error that is detectable by AddressSanitizer it is probably platform independent.

JanWielemaker avatar Oct 07 '21 07:10 JanWielemaker

I get the same error with cmake -DCMAKE_BUILD_TYPE=Debug + make builds for macOS. I have seen this via GitHub Actions runners for both macos-latest and macos-11.

zmughal avatar Nov 15 '21 05:11 zmughal