LLVM學習-DragonEgg工具

2.2.2 使用DragonEggLLVM工具了解編譯流程

如果希望看到前端運行情況使用-S -fplugin-arg-dragonegg-emit-ir標志標志產生LLVM IR代碼表示人工可讀文件

一旦編譯器程序轉換為IR停止編譯內存中的表示內容寫入磁盤能力LLVM一個獨有特征大多數其他編譯器無法做到這一點欣賞LLVM IR如何表示源程序之后可以手動使用多個LLVM工具繼續完成編譯過程以下命令調用一個特殊匯編程序LLVM文本形式轉換二進制形式保存磁盤上

llvm-as hello.11 -o hello.bc

如果愿意可以一個特殊IR反匯編(llvm-dis) 把它翻譯回可讀的形式以下工具顯示成功完成代碼轉換相關統計信息同時進行獨立編譯目標

opt -stats hello.bc -o hello.bc

強調下,-stats標志可選由于hello.s是一個匯編文件因此可以使用GNU binutiles匯編器也可以使用LLVM匯編器下面命令我們使用LLVM匯編器

llvm-mc -filetype=obj hello.S -o hello.o

因為LLVM鏈接器項目lld目前正在開發中還沒有集成到核心LLVM項目中所以LLVM默認使用你的系統鏈接器因此如果沒有lld可以使用常規編譯器驅動程序完成編譯這會激活你的系統鏈接器

gcc hello.o -c hello

出于性能方面原因除了目標文件之外真正LLVM編譯器驅動程序任何階段都不會程序表示內容寫入磁盤因為仍然缺少集成鏈接器會使用內存中表示內容協調幾個LLVM組件進行編譯

2.2.3 理解LLVM測試套件

LLVM測試套件包括一套用于測試LLVM 編譯器官方基準程序測試套件對于LLVM開發人員非常有用通過編譯運行這些程序驗證優化編譯器改進如果正在使用LLVM非穩定版本或者更改LLVM源代碼懷疑某些功能不能正常工作那么可以自行運行測試套件LLVM源代碼存在簡單的LLVM回歸測試單元測試可以使用make check-all 輕松運行他們測試條件不同傳統回歸測試單元測試因為包含了整個基準程序

必須LLVM測試套件放到LLVM源代碼允許LLVM構建系統識別可以http://llvm.org/release/3.4/test-suite-3.4.src.tar.gz 找到版本3.4資源

要獲取源代碼使用以下命令

wget http://llvm.org/release/3.4/test-suite-3.4.src.tar.gz

如果你喜歡使用GIT請使用以下命令

cd llvm/projects

git clone http://llvm.org/git/llvm-project/test-suite.git

需要重新生成LLVM構建文件才能使用測試套件在此特例不能使用CMake必須使用經典配置腳本構建測試套件讀者可以參考1介紹配置步驟

測試套件有一套Makefile文件用于測試檢查基準也可以提供一個自定義Makefile 評估自定義程序請將自定義Makefile 文件放在測試套件源代碼目錄并使用命名模版llvm/projects/test-suite/TEST.<custom> Makefile命名文件其中

必須<custom>記號替換所需任何名稱比如llvm/projects/test-suite/TEST.example.Makefile

配置期間將在基準測試程序將要運行LLVM對象目錄創建測試套件目錄運行測試示例Makefile文件

cd your-llvm-build-folder/projects/test-suite

2.2.4 使用LLDB

LLDB項目一個LLVM基礎架構構建調試器作為Mac OS XXcode 5調試積極開發出來2011開始開發本書為止LLDB還沒有Xcode范圍之外發布一個穩定版本可以從http://llvm.org/release/3.4/lldb-3.4.src.tar.gz獲取LLDB資源許多依賴LLVM項目一樣可以通過將其集成到LLVM構建系統輕松構建要做到這一點只需將其源代碼放在LLVM toos文件中如下所示

wget http://llvm.org/release/3.4/lldb-3.4.src.tar.gz

tar xvf lldb-3.4.src.tar.gz

也可以使用SVN存儲獲得最新版本

cd llvm/tools

svn checkout http://llvm.org/svn/llvm-project/lldb/trunk lldb

如果你愿意還可以使用GIT鏡像獲取

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73603.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73603.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73603.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于cmd中出現無法識別某某指令的問題

今天來解決以下這個比較常見的問題&#xff0c;安裝各種軟件都可能會發生&#xff0c;一般是安裝時沒勾選注冊環境變量&#xff0c;導致cmd無法識別該指令。例如mysql&#xff0c;git等&#xff0c;一般初學者可能不太清楚。 解決這類問題最主要的是了解環境變量的概念&#x…

ThreadLocal詳解與高頻場景實戰指南

ThreadLocal詳解與高頻場景實戰指南 1. ThreadLocal概述 ThreadLocal是Java提供的線程本地變量機制&#xff0c;用于實現線程級別的數據隔離。每個訪問該變量的線程都會獲得獨立的變量副本&#xff0c;適用于需要避免線程間共享數據的場景。 特點&#xff1a; 線程封閉性&a…

【C++初階】---類和對象(上)

1.類的定義 1.1類的定義格式 ? class為定義類的關鍵字&#xff0c;Data為類的名字&#xff0c;{}中為類的主體&#xff0c;注意類定義結束時后?分號不能省略。類體中內容稱為類的成員&#xff1a;類中的變量稱為類的屬性或成員變量;類中的函數稱為類的?法或者成員函數。 ?…

Rust安裝并配置配置vscode編譯器

一. 下載rustup-init.exe rust下載網址&#xff1a;Getting started - Rust Programming Language 根據系統&#xff0c;選擇適合的exe文件 我選擇的的是右邊64bit的 打開下載的文件 輸入1&#xff0c;回車 二. Visual C 安裝 自動下載安裝vs 等待安裝完畢 三. Rust 安裝…

openGl片段著色器的含義

片段著色器的含義及代碼中的應用說明&#xff1a; 1. 片段著色器的基本概念 片段著色器&#xff08;Fragment Shader&#xff09;是OpenGL著色器管線中的關鍵組件&#xff0c;主要用于計算屏幕空間中每個片段&#xff08;對應像素&#xff09;的最終顏色。它是圖形渲染流程的…

事務的四大特性(ACID)詳解

事務的四大特性&#xff08;ACID&#xff09;詳解 在數據庫管理系統&#xff08;如 MySQL&#xff09;中&#xff0c;事務&#xff08;Transaction&#xff09; 是指一組要么全部執行、要么全部不執行的數據庫操作&#xff0c;通常用于確保數據的完整性和一致性。事務有四大核…

ubuntu設置開機自動運行應用

系統版本&#xff1a;Ubuntu 24.04.1 LTS桌面版 按招網上的資料顯示&#xff0c;當前版本主要的實現方式有以下兩種&#xff0c; 方式1&#xff1a;通過圖形界面的【啟動應用程序】設置開機自啟動&#xff1b;方式2&#xff1a;配置為服務實現開機自啟動。 但是在我的電腦上方…

ECharts各類炫酷圖表/3D柱形圖

一、前言 最近雞米花實現了各類的炫酷的圖表&#xff0c;有3D柱形圖、雙邊柱形圖以及異形柱形圖&#xff0c;好了&#xff0c;直接上圖&#xff1a; 二、效果圖 一個個來吧&#xff0c;下面就是代碼啦&#xff0c;注意&#xff0c;一下圖表展示的寬高均為800px*300px 三、異形橫…

機器人原點丟失后找回原點的解決方案與步驟

機器人原點丟失后找回原點的解決方案與步驟 在機器人運行過程中&#xff0c;原點丟失可能導致定位錯誤、運動失控等問題&#xff0c;常見于機械臂、AGV&#xff08;自動導引車&#xff09;、3D打印機等設備。以下是針對原點丟失問題的系統性解決方案及詳細步驟&#xff0c;涵蓋…

HCIP——園區網、VLAN

園區網 園區網搭建核心思路&#xff1a;冗余&#xff08;備份&#xff09;--- 保證其健壯性 1、設備冗余 2、線路冗余 3、網關冗余 4、ups&#xff08;不間斷電源&#xff09;冗余—— 能不斷電&#xff08;物理層&#xff09; 三層交換機和路由器的選擇&#xff1a; 三層交換…

虛擬機(二):Android 篇

虛擬機&#xff08;一&#xff09;&#xff1a;Java 篇 虛擬機&#xff08;二&#xff09;&#xff1a;Android 篇 Dalvik和JVM區別 Dalvik 基于寄存器&#xff0c;而 JVM 基于棧。 基于棧的架構具有更好的可移植性&#xff0c;因為其實現不依賴于物理寄存器基于棧的架構通常指…

Android Token的原理和本地安全存儲

Android Token的原理和本地安全存儲 前言 在移動應用開發中,Token是實現用戶身份驗證和授權的重要機制。本文將深入介紹Token的原理,以及在Android平臺上如何安全地存儲Token,幫助開發者構建可靠的身份驗證系統。 基礎知識 1. Token概述 1.1 Token的作用 身份驗證授權訪…

Vue Kubernetes項目 局部布局 下拉菜單

下拉菜單 [el-dropdown] 下拉菜單也比較簡單&#xff0c;就是類似于按鈕下面來一個下拉菜單。 示例Demo如下&#xff1a; <template><el-dropdown><span class"el-dropdown-link">下拉菜單<i class"el-icon-arrow-down el-icon--right&q…

Android之卡片式滑動

文章目錄 前言一、效果圖二、實現步驟1.主界面xml2.自定義的viewpage3.卡片接口類4.陰影和縮放變化類5.卡片adapter6.卡片adapter的xml7.style8.CardItem9.activity實現10.指示器drawable 總結 前言 對于這個需求&#xff0c;之前的項目也有做過&#xff0c;但是過于趕項目就沒…

(UI自動化測試web端)第二篇:元素定位的方法_css定位之css選擇器

看代碼里的【find_element_by_css_selector( )】( )里的表達式怎么寫&#xff1f; 文章介紹了第三種寫法css選擇器&#xff0c;你要根據網頁中的實際情況來判斷自己到底要用哪一種方法來進行元素定位。每種方法都要多練習&#xff0c;全都熟了之后你在工作當中使用起來元素定位…

使用vscode搭建pywebview集成vue項目示例

文章目錄 前言環境準備項目源碼下載一、項目說明1 目錄結構2 前端項目3 后端項目獲取python安裝包(選擇對應版本及系統) 三、調試與生成可執行文件1 本地調試2 打包應用 四、核心代碼說明1、package.json2、vite.config.ts設置3、main.py后端入口文件說明 參考文檔 前言 本節我…

C stm32f10x LED亮

#include<stm32f10x.h>int main(){#if 0 //APIOA 時鐘初始化unsigned int * p(unsigned int*)0x40021018;*p | 0x1<<2;//A0 推挽輸出p(unsigned int*)0x40010800;*p *p & ~0xf | 0x1;//A0低電平p(unsigned int*)0x4001080c;*p & ~0x1;#endifRCC->APB2E…

redux ,react-redux,redux-toolkit 簡單總結

Redux、React-Redux 和 Redux Toolkit 是協同工作的三個庫&#xff0c;各自承擔不同角色&#xff0c;相互協同。 Redux&#xff1a;基礎底座 底層狀態管理庫&#xff0c;負責狀態存儲、Action 派發和 Reducer 執行 ?React-Redux&#xff1a;連接 React 組件與 Redux Store 通…

智能制造:物聯網和自動化之間的關系

工業自動化 工業自動化是機器設備或生產過程在不需要人工直接干預的情況下按預期的目標實現測量、操縱等信息處理和過程控制的統稱。 在傳統的工業生產過程中&#xff0c;很多環節需要人工操作&#xff0c;比如設備調試、生產監控、質量檢測等。然而&#xff0c;隨著工業自動化…

“自動駕駛背后的數學” 專欄導讀

專欄鏈接&#xff1a; 自動駕駛背后的數學 專欄以“自動駕駛背后的數學”為主題&#xff0c;從基礎到深入&#xff0c;再到實際應用和未來展望&#xff0c;全面解析自動駕駛技術中的數學原理。開篇用基礎數學工具搭建自動駕駛的整體框架&#xff0c;吸引兒童培養興趣&#xff0…