The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Версия компилятора Clang с поддержкой SAFECode для выявления ошибок при работе с памятью

18.08.2011 21:22

Анонсирован выпуск компилятора Clang, разрабатываемого в рамках проекта LLVM, отличающийся добавлением поддержки технологии SAFECode, позволяющей автоматизировать выявление ошибок, связанных с некорректной работой с памятью. Поддержка SAFECode включается через указание специальной опции и никак не влияет на поведение компилятора, когда данная опция не активна, т.е. представленный выпуск может быть использован в роли полной замены классической сборке clang/clang++. Для загрузки доступны как исходные тексты, так и готовые сборки для Linux и Mac OS X.

В отличие от инструментов подобных Valgrind, Clang с поддержкой SAFECode обладает следующими преимуществами:

  • Он быстрее, так как не использует динамической трансляции исполняемого файла и может оптимизировать некоторые runtime-проверки;
  • Он более точен, так как знает расположение границ отдельного стека и глобальных объектов (для поиска данных границ Valgrind использует эвристические методы);
  • Он обеспечивает более полную диагностику ошибок, выдавая больше полезной информации о каждой выявленной проблеме.

Текущий выпуск ориентирован в первую очередь на определение фактов разыменования указателей, которые могут привести к переполнению буфера. В будущем из основного экспериментального проекта SAFECode, поддерживаемого сообществом разработчиков LLVM, в Clang будут перенесены некоторые дополнительные функции. Из ожидаемых в будущем улучшений можно отметить:

  • Выявление некорректного доступа к памяти (указатели, указывающие на несуществующий или удаленный объект);
  • Определение неправильных вызовов функции free(), например, двойное освобождение выделенной памяти;
  • Определение использования неинициализированных указателей;
  • Выявление ошибок при работе с памятью, вызванных неправильным использованием функций стандартной библиотеки;
  • Дополнительные оптимизации, включая удаление проверок корректности типов на этапе загрузки/сохранения и вынос за пределы циклов.

Clang представляет собой LLVM фронтенд для языков C, С++ и Objective-C, который можно использовать вместо GCC. Исходные тексты Clang распространяются в рамках лицензии BSD, что делает этот компилятор интересным решением для замены GCC в BSD-подобных ОС. В настоящее время активно развивается проект адаптации данного компилятора для сборки базовой системы и портов FreeBSD. Начиная с FreeBSD 9 код Clang будет включен в состав базовой системы и может быть использован вместо GCC в качестве системного компилятора FreeBSD. Используя Clang уже удалось обеспечить сборку таких значительных проектов, как ядро Linux и фреймворк Qt.

  1. Главная ссылка к новости (http://lists.cs.uiuc.edu/piper...)
  2. OpenNews: Компания Google подключилась к работе по улучшению поддержки C++ в Clang
  3. OpenNews: Прогресс в сборке Qt с использованием Clang
  4. OpenNews: В Clang обеспечена возможность сборки Linux-ядра 2.6.36
  5. OpenNews: Clang достиг уровня успешной пересборки комплекта C++-библиотек Boost
  6. OpenNews: Компания PathScale открыла под лицензией GPL высокопроизводительные GCC-совместимые компиляторы EKOPath
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/31533-clang
Ключевые слова: clang, gcc, optimization, memory, debug
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, XVilka (ok), 21:54, 18/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Вот это замечательно! Clang - отличная штука. Теперь все свое стараюсь собирать им и gcc - очень много потенциальных ошибок выявляет.
     
     
  • 2.14, fyfybgv (?), 02:59, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А ты тоже "указатели инициализируешь", или даже не знаешь зачем это нужно (или не нужно)?

     
     
  • 3.32, Аноним (-), 05:46, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > (или не нужно)?

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

     
     
  • 4.73, pavlinux (ok), 19:11, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А где было написано про IDA и дизассмы? :)

    ---

    Я тоже немного не врубися... Накой инициализировать указатели?
    Ну объявил я его, ну есть такой... а в нужном месте я ему чё-нить присвою.
    В первом случае gcc матернётся, что есть не используемая переменная, а так,
    забуду и появиться висячий. Хотя, gcc 4.6 тоже орёт, что переменная
    инициализирована, но не используется.


     
     
  • 5.82, Аноним (-), 20:19, 24/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > А где было написано про IDA и дизассмы? :)

    Этот человек замечен в ковырянии огороженных мотороло-техасских загрузчиков идой.
    И вообще, ну что ты как маленький? Тынц: http://www.opennet.me/~XVilka

     

  • 1.8, Аноним (-), 23:18, 18/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    старичку gcc потихоньку приходится уходить на покой, еще лет пять и будет нормальный, прогрессивный компилятор, под нормальной лицензией. ура, елки-палки!
     
     
  • 2.9, Аноним (-), 23:41, 18/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    _нормальный_ компилятор на базе clang будет разве что под проприетарной лицензией, либо вообще не выйдет за пределы Apple.
    Поэтому альтернативы gcc в ближайшие годы не видать :(
     
     
  • 3.12, an (??), 01:07, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Поэтому альтернативы gcc в ближайшие годы не видать :(

    Так обычно пытаются утешать себя те, кто с большим трудом в свое время кое-как освоили gcc, и уже не в состоянии переучиваться.

    Скажем так, gcc будет жив до тех пор, пока живы люди, для которых альтернативы gcc действительно нет.

    Ведь еще живы те, например, для которых нет альтернативы COBOL'у, fortran'у или DOS'овскому FoxPro.

    Так что можете спать спокойно дальше.

     
     
  • 4.16, Аноним (-), 03:03, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    clang - это внутренняя разработка Apple, и наружу выставляется лишь ее огрызок (в лучший традициях данной компании). Именно поэтому и выбрана такая лицензия (по аналогии с проприетарным андроидом, который якобы "открыт под лицензией Apache").

    А открытое сообщество по-прежнему будет довольствоваться этим чудом, которое даже бутстрапиться толком не умеет. А когда им пересоберут Фрю, с нее сбегут не только Яндекс и Рамблер.

    Поэтому среди _открытых_ компиляторов альтернативы gcc нет и не будет. Есть лишь проприетарные нишевые решения, вроде icc.

     
     
  • 5.19, fyfybgv (?), 03:07, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >  Есть лишь проприетарные нишевые решения, вроде icc.

    PathScale


     
     
  • 6.21, Аноним (-), 03:16, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Да, зря я за новостями не следил. Пропустил много интересного.
     
  • 6.55, alexxy (ok), 13:57, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это тоже не альтернатива. Он не понимает всего спектра платформ на которых работает gcc. Где там в pathcc arm mips ppc64 ia64? не говоря уже о microblaze tile и тп? нэту так что не альтернатива а нишевое решение которое еще и тупить ацки
     
     
  • 7.61, Аноним (-), 16:23, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > говоря уже о microblaze tile и тп?

    А как насчет MSP430, AVR, ARM и OpenRISC? Или мы должны выбирать альтернативы аж из целого х86 на все задачи, от мигания светодиодом в брелке до суперкомпьютеров?

     
  • 5.47, arcade (ok), 10:37, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    1. Если clang это закрытая разработка представьте доказательства скрытия кода.
    2. Если факт выбора лицензии свидетельствует о желании разработчика скрыть код - сажайте меня за изначилование, орган имеется.
    3. Оно уже год как бутстрапится.
    4. Фрю им уже пересобрали. Основная причина ухода с фри Рамблера не компилятор.
    5. Среди открытых компиляторов уже есть целая куча альтернатив gcc: tcc, pcc.

    Хотя бы не передёргивайте.

     
     
  • 6.60, Аноним (-), 16:20, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Эпплу все это надо сугубо для их xcode И практически все разработчики шланга в ... большой текст свёрнут, показать
     
  • 6.67, Аноним (-), 17:48, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >2. Если факт выбора лицензии свидетельствует о желании разработчика скрыть код - сажайте меня за изначилование, орган имеется.

    Аналогия некорректна.
    Более корректная: возьмем два условных фаллоимитатора. Один можно использовать любых целях, включая изнасилование, другой - в любых целях, кроме изнасилования (механизм ограничения, допустим, предельно прозрачен). Цена и прочие характеристики одинаковы. Если человек приходит в секс-шоп и из этих двух выбирает первый, то его намерения вполне очевидны. Точно так же очевидны намерения гугла и яббла.

     
  • 6.68, Аноним (-), 17:51, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >4. Фрю им уже пересобрали. Основная причина ухода с фри Рамблера не компилятор.

    А никто и не говорил, что дело в компиляторе (сейчас там gcc по умолчанию, так что clang ни при чем).
    Просто после перехода фри на clang там наверняка появится еще туева хуча проблем, начиная от множества хаков при make world и заканчивая кучей внезапных сегфолтов от разных программ.

    >5. Среди открытых компиляторов уже есть целая куча альтернатив gcc: tcc, pcc.

    А запорожец - реальная альтернатива 911 поршу, да.

     
     
  • 7.76, samm (ok), 21:44, 20/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вы говорите о том, в чем ничего не понимаете. Пересобрал все свои проекты clangom без проблем. В некоторых с++ файлах получил вполне справедливые замечания о том, что негоже возвращать false где прототип int. Никаких "жутких проблем" не получил. Ну и опыт гугла мне как-то более показателен чем красноглазые форумные ламеры - http://blog.llvm.org/2011/05/c-at-google-here-be-dragons.html
     
  • 4.40, Аноним (-), 06:06, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Так обычно пытаются утешать себя те, кто с большим трудом в свое
    > время кое-как освоили gcc, и уже не в состоянии переучиваться.

    А чтобы переучиваться - через сколько лет он начнет генерить код под MSP430 допустим? Или там AVR? Или на кой черт переучиваться? GCC поддерживает больше архитектур и генерит более оптимизированный код как правило. А на архитектуру пусть бсдуны наяривают, как обычно.

     
     
  • 5.58, z (??), 16:13, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >GCC поддерживает больше архитектур и генерит более оптимизированный код как правило

    взаимоисключающие понятия

     
     
  • 6.62, Аноним (-), 16:27, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > взаимоисключающие понятия

    Что значит - взаимоисключающие? Есть бенчи от того же фороникса и прочих, и в почти всех из них шланг радостно сливает. Почему-то он чаще сливает в разы чем сколь-нибудь заметно обгоняет гцц, как ни странно. А генерить код для всяких там армов и мипсов он вообще умеет только на бумаге похоже. Про всякие там аврки и вовсе даже речи не идет.

    Остается вопрос: да напуркуа б осваивать компилер понимающий полторы архитектуры и с более плохой оптимизацией? И почему это надо засчитать за epic win?

     
     
  • 7.65, Аноним (-), 16:48, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    оптимизация у clang лучше.

    А вобще хватит кормить троля - пошел бы ты почитал что ли документацию.

     
     
  • 8.66, Аноним (-), 17:43, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Нет, оптимизация лучше у gcc clang и компилировать-то толком не умеет, куда уж ... текст свёрнут, показать
     
  • 7.78, nagual (ok), 18:16, 23/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> взаимоисключающие понятия
    > ... Есть бенчи от того же фороникса ...

    О да :-)) это это крутые бенчи :-)) круче тока бенчи от intel :-))


     
     
  • 8.84, Аноним (-), 14:35, 30/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Если вы считаете что такие-то бенчи плохие, ну ок произведите бенчи лучше, кото... текст свёрнут, показать
     
  • 4.75, ibat (??), 01:13, 20/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    FORTRAN не трогать, а если трогать, тогда объяснте и что лутше для научных рассчетов?
     
     
  • 5.77, qwe (??), 17:01, 21/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Haskell?
     
  • 3.28, Аноним (-), 04:01, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    clang уже есть и он более чем нормальный. Когда в gcc будет статический анализ, нормальное LTO, да просто хотя бы нормальные сообщения об ошибках, можно будет говорить, а пока clang его заруливает.
     
     
  • 4.30, ананим (?), 04:19, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    угу заруливает особенно если смело написать а чуть капнёшь по ссылке, и не к... большой текст свёрнут, показать
     
     
  • 5.31, G0Dzilla (ok), 05:28, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В данном случае речь идет о gcc-змах А раз clang не gcc, то и обработать его пр... большой текст свёрнут, показать
     
     
  • 6.42, Аноним (-), 06:13, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > суметь понять.

    Не очень понятно: какой-то закон запрещает реализовать расширения от гцц? Некоторые из них достаточно удобны, вообще-то. По-моему, для всех будет лучше если вместо воплей "не нужно" вы лучше заткнетесь и просто реализуете фичи. И вам проще и всем остальным. Правильное решение конечно в стандарт втолкать, но ждать еще 10 лет очередной стандарт - как-то слишком уж геморройно (вспомним C++ 0x ставший C++ 11 в результате?!)

     
     
  • 7.48, arcade (ok), 11:06, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> суметь понять.
    > Не очень понятно: какой-то закон запрещает реализовать расширения от гцц? Некоторые из
    > них достаточно удобны, вообще-то. По-моему, для всех будет лучше если вместо
    > воплей "не нужно" вы лучше заткнетесь и просто реализуете фичи. И
    > вам проще и всем остальным. Правильное решение конечно в стандарт втолкать,
    > но ждать еще 10 лет очередной стандарт - как-то слишком уж
    > геморройно (вспомним C++ 0x ставший C++ 11 в результате?!)

    А вопрос не в фичах, а "упрощённой модели" реализации. Взять например наследование темплейтов: "http://stackoverflow.com/questions/3829040/scope-problems-in-template-c" В clang-е эта хрень реализована верно и он ошибку видел, а gcc компилил как есть и не заморачивался.

     
     
  • 8.50, ананим (?), 12:38, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    а вопрос не в фичах и упрощённой модели реализации вопрос в сборке всего того... текст свёрнут, показать
     
     
  • 9.80, Аноним (-), 19:12, 24/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    да да есть идиоты которые пишут код под конкретный компилятор и удивляются поче... текст свёрнут, показать
     
     
  • 10.81, AlexAT (ok), 19:47, 24/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вам к жабистам Хотя и у них переносимость не всегда возможна ... текст свёрнут, показать
     
  • 8.53, anonymous (??), 12:57, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    в C, ага ... текст свёрнут, показать
     
  • 7.70, G0Dzilla (ok), 18:39, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> суметь понять.
    > Не очень понятно: какой-то закон запрещает реализовать расширения от гцц? Некоторые из
    > них достаточно удобны, вообще-то. По-моему, для всех будет лучше если вместо
    > воплей "не нужно" вы лучше заткнетесь и просто реализуете фичи. И
    > вам проще и всем остальным. Правильное решение конечно в стандарт втолкать,
    > но ждать еще 10 лет очередной стандарт - как-то слишком уж
    > геморройно (вспомним C++ 0x ставший C++ 11 в результате?!)

    Закон не запрещает. Но зачем, если есть стандарт, который надо придерживаться. Или Вы хотите сказать, что хаки под IE - тоже хорошо?

     
     
  • 8.74, anonymous (??), 19:19, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    если gcc добавляет к стандарту удобные плюшки 8212 я лично буду использовать ... текст свёрнут, показать
     
     
  • 9.83, Аноним (-), 23:00, 24/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален вот IE просто дополняет стандарт удобными ему вещами, за... большой текст свёрнут, показать
     
     
  • 10.85, Аноним (-), 14:40, 30/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    gcc довольно неплохо реализует стандарты, что c99, что C 11 А то что он реали... текст свёрнут, показать
     
  • 6.71, Аноним (-), 18:40, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >В данном случае речь идет о gcc-змах.

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

     
  • 5.79, nagual (ok), 18:21, 23/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > угу. заруливает. особенно если смело написать:
    >>Используя Clang уже удалось обеспечить сборку таких значительных проектов, как ядро Linux
    > а чуть капнёшь по ссылке, и:
    >>К сожалению не все проблемы еще решены и для того чтобы добиться загрузки системы приходится использовать некоторые компоненты, собранные при помощи GCC. В частности, из-за возникновения внутренних ошибок компилятора и проблем c обработкой массивов переменной длины, пока не удается собрать код SELinux, Posix ACL, IPSec, eCrypt и других подсистем, использующих Crypto API. Разработчики Clang надеются, что код Crypto API не фундаментально завязан на специфичных GNU-расширениях GCC и решить возникшие проблемы удастся незначительными правками. Кроме того, незначительные проблемы наблюдаются при сборке кода, связанного с Xen, IPv6 и Netfilters/Router, не работает код загрузки модулей ядра.
    > не каждый хеловорд, но заруливает адназначна. особенно если гцц поможет. :D

    Вообще то ядро линукса это огромная куча кода драйверов написанного непонятно кем. Многое железо уже умерло  и так так девайсов тех уже нет переписывать это непланируется ...

     
  • 4.41, Аноним (-), 06:09, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > статический анализ, нормальное LTO,

    Блин, почему-то в целом оптимизация гцц - лучше. Как именно это достигнуто, мне как программисту вообще до лампочки, LTO там это сделает или что-то еще.

    > да просто хотя бы нормальные сообщения об
    > ошибках, можно будет говорить, а пока clang его заруливает.

    Не хочу ничего сказать, но у меня почему-то нет проблем с пониманием ошибок и варнингов выдаваемых gcc. Наверное я что-то делаю не так. Может, надо потупеть на 20 пунктов?!

     
     
  • 5.49, Аноним (-), 11:12, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > у меня почему-то нет проблем с пониманием ошибок и варнингов выдаваемых gcc

    boost'ом давно пользовался? Что-нибудь серьезное на плюсах вообще писал (на плюсах, а не на C с классами)?

     
     
  • 6.51, ананим (?), 12:40, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    qt, кеды и тд.
    они вообще ещё не собираются толком шлангом.
     
  • 6.52, ананим (?), 12:46, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    зыж
    и тут же вдогонку:
    >При оценке производительности демонстрационного браузера на основе Qt и QtWebKit, собранного при помощи Clang, на выполнение тестов SunSpider ушло 415.4мс, в то время как QtSDK/64bit в сборке Nokia выполняется за 360.0 мс (замедление на 13%).

    и
    >Последняя версия Clang успешно собирает Boost и проходит большинство тестов.

    а меньшинство видимо вообще не проходит?
    и как, опять без пруфов будете кидаться словами?

     
  • 6.54, anonymous (??), 13:00, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > boost'ом давно пользовался?

    я вот, к счастью, никогда.

    > Что-нибудь серьезное на плюсах вообще писал (на плюсах, а не на C с классами)?

    а что, на плюсах «пишут серьёзное»? в *серьёзных* проектах гайдлайнами цпп обрезан как раз до «сей с классами».

     
  • 6.64, Аноним (-), 16:41, 19/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > boost'ом давно пользовался?

    Не, спасибо, не люблю переростков. Но вообще-то у шланга проблем с сборкой плюсатого софта выше крыши, если уж на то пошло.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру