Asan: проблема с загрузкой библиотеки asan - PullRequest
0 голосов
/ 22 января 2020

В нашей системе сборки мы недавно интегрировали инструмент ASAN (добавление -fsanitize = address) к CFLAGS, а также при компоновке, создавая файлы библиотеки .so. Примечание: - Мы используем компилятор G CC 6.3.

Мы можем успешно построить наш код. Но во время работы происходит сбой со следующей проблемой:

==52215==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.

Вот моя команда g cc: -

/local/common/pkgs/gcc/v6.3.0/bin/gcc -m32 -shared -o /local/testing/build/new_tool/asan_build/syn/verilog/libspd.so  -Wl,-rpath=\$ORIGIN/lib -Wl,-rpath=\$ORIGIN/../lib -W1,-rpath=/local/common/gcc/v6.3.0/lib  -fsanitize=address -L/local/testing/build/new_tool/asan_build/modules /local/testing/build/new_tool/asan_build/modules/silvpi.o /local/testing/build/new_tool/asan_build/modules/sypsv.o /local/testing/build/new_tool/asan_build/modules/cdnsv_tfs.o /local/testing/build/new_tool/asan_build/modules/libcore.o /local/testing/build/new_tool/asan_build/modules/vpi_user.o /local/testing/build/new_tool/asan_build/modules/libdenbase.a /local/testing/build/new_tool/asan_build/modules/libbdd.a  -L/local/testing/build/new_tool/asan_build/syn/lib -L/local/testing/build/new_tool/asan_build/modules -L/home/local/outer/Linux/lib /local/testing/build/new_tool/asan_build/modules/vhpimodelfunc.o /local/testing/build/new_tool/asan_build/modules/vipcommonlib.a  -lm -lc -ldenbase -lbdd -ldenbase -lviputil -llocalCommonMT_sh

Я могу успешно собрать библиотеку libspd.so. Но когда мы пытаемся запустить его, происходит сбой с упомянутой выше ошибкой.

я вижу список зависимых библиотек libspd.so

ldd /local/testing/build/new_tool/asan_build/syn/verilog/libspd.so
    linux-gate.so.1 =>  (0x00279000)
    libasan.so.3 => /local/pkgs/gcc/v6.3.0/lib/libasan.so.3 (0xf7175000)
    libm.so.6 => /lib/libm.so.6 (0x0014e000)
    libc.so.6 => /lib/libc.so.6 (0xf6f83000)
    libcdsCommonMT_sh.so => /local/testing/build/new_tool/asan_build/verilog/../lib/liblocalCommonMT_sh.so (0x00178000)
    libdl.so.2 => /lib/libdl.so.2 (0x00197000)

Мы пытаемся запустить наше приложение с помощью 'xrun 'где он запускает симуляцию поверх моей сборки, которая была построена с помощью асана. Как говорит ошибка: you should either link runtime to your application я пытался добавить свой полный путь к библиотеке asan в LD_LIBRARY_PATH, все еще сталкиваясь с той же проблемой.

Не уверен, что здесь происходит не так. Как я могу решить эту проблему?

Есть идеи? Спасибо и всего наилучшего!

1 Ответ

2 голосов
/ 24 января 2020

У вас есть несколько способов обойти это:

  • построить основной исполняемый файл с -fsanitize=address
  • избавиться от /etc/ld.so.preload на тестовой машине
  • отключить проверку (нужен последний G CC) с помощью export ASAN_OPTIONS=verify_asan_link_order=0; но вы должны быть уверены, что библиотеки из /etc/ld.so.preload не перехватывают символы, важные для Асана, например, mallo c, free, et c., иначе все начнет ломаться
...