کوکینل (به انگلیسی Coccinelle) که به معنای کفشدوزک در زبان فرانسوی است، یک ابزار متنباز برای مطابقت و تبدیل کد منبع برنامههای نوشته شده به زبان برنامهنویسی C است.
انتشار پایدار | 1.1.0[۱]
/ ۲۵ فوریه ۲۰۲۱ |
---|---|
مخزن | |
نوشتهشده با | OCaml and Python |
نوع | Static program analysis |
مجوز | GPLv2 |
وبگاه |
کوکینل ابتدا برای کمک به تکامل هسته لینوکس مورد استفاده قرار گرفت و پشتیبانی برای تغییرات در واسطهای برنامهنویسی کتابخانه (APIها) مانند تغییر نام یک تابع، افزودن آرگومان تابعی که مقدار آن به نوعی وابسته به زمینه است، و سازماندهی مجدد یک ساختار داده را فراهم میکند.
این ابزار همچنین میتواند برای یافتن الگوهای برنامهنویسی معیوب در کد (یعنی بخشهای کدی که با احتمال بالا اشتباه هستند مانند اشارهگر NULL ممکن است) بدون تبدیل آنها استفاده شود. بنابراین نقش کوکینل به ابزارهای تحلیل ایستای کد نزدیک است. نمونههایی از این کاربرد توسط ابزار Herodotos که پیگیری هشدارهای تولید شده توسط کوکینل را انجام میدهد، ارائه شدهاند.
پشتیبانی برای کوکینل توسط IRILL فراهم شده است. تأمین مالی توسعه این ابزار توسط آژانس ملی تحقیقات فرانسه (ANR)، شورای تحقیقات فناوری و علوم تولید دانمارک، و INRIA انجام شده است.
کد منبع کوکینل تحت نسخه 2 مجوز عمومی همگانی گنو (GPL) منتشر شده است.
کد منبعی که قرار است تطبیق داده شود یا جایگزین شود، با استفاده از سینتکس "وصله معنایی" که بر اساس سینتکس وصله است، مشخص میشود. الگوی زبان وصله معنایی (SmPL) به یک تفاوت متحد با اعلانهای شبیه به زبان C شباهت دارد.
@@
expression lock, flags;
expression urb;
@@
spin_lock_irqsave(lock, flags);
<...
- usb_submit_urb(urb)
+ usb_submit_urb(urb, GFP_ATOMIC)
...>
spin_unlock_irqrestore(lock, flags);
@@
expression urb;
@@
- usb_submit_urb(urb)
+ usb_submit_urb(urb, GFP_KERNEL)