Включить AddressSanitizer по умолчанию в gcc

Чтобы иметь возможность отлаживать и использовать весь дистрибутив Linux, я хотел бы установить ASAN (AddressSanitizer, https://en.wikipedia.org/wiki/AddressSanitizer) в качестве опции по умолчанию для gcc. Поэтому обычно для достижения того, чего я хочу, обычно я устанавливаю следующие переменные перед тем, как скомпилировать пакет linux:

CFLAGS="-fsanitize=address,undefined -Wformat -Werror=format-security -Werror=array-bounds -g" 
CXXFLAGS="-fsanitize=address,undefined -Wformat -Werror=format-security -Werror=array-bounds -g" 
LDFLAGS="-fsanitize=address,undefined"

и попробуйте скомпилировать и запустить мой код. Я хотел бы иметь его по умолчанию для GCC.

Для этого можно использовать файлы спецификаций: https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html. Однако я не нашел способа установить "все правила" для компиляции и связывания всего моего кода на c / C++ с AddressSanitizer.

Мои вопросы:

  • Любой пример, как это сделать, используя спецификации файлов?
  • Это лучший подход для этого?
  • Любой другой альтернативный подход?

1 ответ

Решение

Прежде всего, обязательно взгляните на существующие целые дистрибутивы Asan в Tizen (также здесь) и Gentoo.

В целом существует два основных подхода:

  • настройте свою систему сборки так, чтобы она включала Asan по умолчанию, обычно используя CFLAGS а также CXXFLAGS; это не всегда будет работать, потому что многие пакеты игнорируют их (я думаю, это то, что Ханно Бек сделал в Gentoo)
  • замещать /usr/bin/gcc, /usr/bin/g++ а также /usr/bin/cc (и может x86_64-linux-gnu-gcc, x86_64-linux-gnu-g++) с обертками, которые добавят флаги Asan и перенаправят вызовы к исходным исполняемым файлам (это подход, который мы в конечном итоге использовали в Tizen и нашли его очень успешным)

Как примечание, я бы предложил добавить следующие параметры

CFLAGS += -fsanitize-recover=address,undefined

в противном случае загрузка завершится неудачно на слишком ранних этапах. Также посмотрите на предлагаемые настройки ASAN_OPTIONS в приведенных выше ссылках людям потребовалось много времени, чтобы понять их.

Другие вопросы по тегам