Перейти к содержимому

На пути к обеспечению совместимости ABI в реальном времени с libctf – Ник Алкок

GNU Tools Cauldron

0:00 / 0:00

На пути к обеспечению совместимости ABI в реальном времени с libctf – Ник Алкок

25 просмотров · 5 дн. назад
GNU Tools Cauldron
577 подписчиков
25 просмотров · 5 дн. назад
Расширение формата CTFv4 для файлов CTF в надмножество BTF практически завершено. После того, как оно заработает, что мы сможем сделать с общесистемной информацией о типах для всех программ на C? Один из вариантов, который мы рассмотрим в этом докладе, — использовать простые расширения компоновщика для проверки ABI в реальном времени и линейном времени в ld.so, чтобы определить для каждой запущенной программы, изменилась ли какая-либо из используемых ею библиотек C несовместимым образом с момента компоновки программы, что приводит к сбою программы, без компоновки ld.so с libctf или необходимости выполнять что-либо более сложное, чем несколько сравнений на равенство и strcmps. Конечная цель — увидеть что-то подобное: $ emacs warning: libxml.so.2.13.9: incompatible symbol: linked against xmlDocPtr xmlReadMemory (const char *, int, const char *, const char *, int) but running against xmlDocPtr xmlReadMemory (const char *, int, const char *, const char *) (надуманный пример: xmlReadMemory на самом деле не нарушает ABI. ld.so вызывает вспомогательную программу, которая использует libctf для вывода этого результата, но сама не нуждается в использовании libctf.) Пока это написано лишь частично (я надеюсь завершить части, не относящиеся к glibc, до доклада, а это почти всё): мы изучаем дизайн этой схемы отчасти для того, чтобы аудитория могла выявить любые серьёзные ошибки до того, как они приведут к широкомасштабным сбоям, и чтобы посмотреть, могут ли люди предложить улучшения общий дизайн.