iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
自我挑戰組

System Software Introduction系列 第 18

The Verification of System Software​ - Compiler Toolchain Correctness Verification​

  • 分享至 

  • xImage
  •  

從今天開始,我們會介紹system software verification,compiler toolchain是build verification的必要工具,所以我們會先驗證compiler toolchain correctness。因為verification需要運行在kernel之上,所以需要驗證kernel booting flow。當kernel booting完成後,會對hardware做DVT、對device driver做device driver test、對kernel做kernel test,最後則是敘述方便進行驗證的test framework。

What is the Compiler Toolchain Correctness Verification

Compiler toolchain會將source code轉換成executable file,compiler toolchain correctness verification會確認compiler toolchain是否依照語言標準與source code的邏輯進行正確轉換。

Why Compiler Toolchain Correctness Verification is Needed

Compiler toolchain是build system software的tools,因此它是一切的源頭,所以我們需要進行compiler toolchain的正確性測試,提早檢測出隱藏的bugs。

The Flow of Compiler Toolchain Correctness Verification

Compiler toolchain correctness verification由數值運算組成而不需要控制hardware,所以能利用CPU simuator執行。

標準測試

每種語言都有自己的語法語義規範 (specification) ,compiler需要依照程式語言的規範處理輸入的source code,標準測試目的在驗證compiler是否遵循標準對程式進行解讀。 例如: GCC在執行時,可以指定遵循的C語言標準(C90, C99, C11, …),所以對GCC做標準測試時會依照指定的標準給予對應的測項,以確定GCC可以正確支援每一種宣稱支援的標準。

最佳化測試

Compiler toolchain會針對程式做最佳化,讓程式的執行時間或容量減少。而compiler的最佳化有很多技術,也有讓user手動開啟的最佳化選項,但compiler需要確保最佳化開啟後除了有效果,也不能影響software的正確性。 例如: 我們可以在在gcc開啟-Os最佳化軟體容量,再加上-flto開啟連結時的最佳化,但編譯出來的軟體,最終的執行結果上還是必須和沒有開啟任何最佳化相同。

一致性測試

Compiler toolchain需要保證同樣一份source code在同一個compiler toolchain上面要build兩次要得到完全相同的結果。例如: 同樣的hello world程式,用同一套compiler toolchain來build兩次,使用binary diff工具比較會發現兩次build得到的執行檔binary一模一樣。

Compiler Test Suites

Compiler toolchain正確性驗證的測項種類驗種項目、種類、組合繁多,可以透過工具產生programs來驗證compiler的正確性。

  • Csmith
    Csmith是一個可以隨機產生C programs的工具,他主要目的是利用差異測試作為測試預言,使用隨機C programs查找compiler錯誤。

  • SuperTest
    進階的工具可以配合C語言的標準生成或提供人工事先設計好的C programs作為測試的對象。

  • 驗證方法
    測項的最尾端可以將執行結果輸出(例如文字檔),C source使用多套compiler toolchain編譯同一份source code,再把執行的結果做對比。

  • 驗證平台
    Compiler toolchain正確性驗證可以使用CPU模擬器執行,不需要完整硬體平台。

The Issues in Compiler Toolchain Correctness Verification

  • Testcase不合語言規範導致compiler toolchain無法正確處理
    需調整測項,以免誤判測試結果。
  • Compiler toolchain bugs
    發現compiler toolchain bug後可以先從upstream查詢是否已有相關的bug可以找到patch修復問題,若是全新的compiler toolchain bug,可以嘗試自行修復,再把patch回報給upstream。

上一篇
The Hardware Platform of System Software – Real Target
下一篇
The Verification of System Software​ - Bring-up
系列文
System Software Introduction30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言