2014-03-05 69 views
2

有人可以向我解釋llvm如何調用作品嗎? 我有聲明:invoke指令在LLVM中如何工作?

invoke void @ _ZN7sc_core9sc_signalIN5sc_dt6sc_intILi16EEEEC1Ev (% "class.sc_core :: sc_signal.57" *% operator1) to label %invoke.cont unwind label %lpad 

在我看來,它使一個函數的調用,然後跳轉到一個標籤。但是哪個標籤?標籤%invoke.cont或標籤%lpad? 如何識別它跳轉的標籤?

回答

2

LLVM Language Reference

語法

​​

概述

'調用' 指令使得控制轉移到一個指定的函數,具有控制流轉移的可能性,以'正常'標籤或'例外'標籤。如果被調用函數返回「ret」指令,控制流將返回到「正常」標籤。如果被調用者(或任何間接被調用者)通過「簡歷」指令或其他異常處理機制返回,則控制被中斷並在動態最接近的「異常」標籤處繼續。

語法規範將第一個標籤標識爲正常標籤,用於ret,第二個標籤用作異常標籤,用於例外。這很容易記住,因爲術語「展開」是指在拋出異常時執行清理。因此,該指令明確標識了「展開標籤」。用於此目的的代碼通常被稱爲「着陸板」,因此標籤「lpad」用於提醒該基本塊的功能。