接下來就要開始寫程式了
要如何才能專心在寫程式上呢?
你都要31歲了,難道不能自制一點嗎?
你不要用責備的方式,這樣是沒有用的,
如果罵一罵有話我現在搞不好已經畢業了呢!
不罵行嗎?講十天也沒用,就你不要看書了,還是硬要看完,
是怎樣?!那幹嘛專程來中研院看書,在家裡看不就好了,
what does "extern" mean in C++?
the following URL provides a good explanation:
and, do I need to declare a extern "C" header file?
in llvm_translation.h, we should have a declaration as follows:
extern "C"{
typedef unsigned long (*PFunc_t)();
PFunc_t llvm_gen_code(CPUX86State *CPU1, const uint16_t *opc_buf, const uint32_t *opparam_buf);
}
now, goto qemu makefile
幹!專心啦
現在 make 是一個大問題
其實也還好,只要將 header include 進去,再 compile,再 link 就可以了,
llvm_gen_code要在那裡?
應該要放在 gen_code_slow 那邊吧:
========2/23============
工作工作,人生的意義就在工作裡
加一個target,llvm_translator 的 target,真想吃點東西,
Makefile.target,加在裡面:
$@: target name,
$<: dependent name
@CMD: execute CMD
寫個信給老師,說我禮拜三不會去,
幹!怎麼不吃大便,整天一直講話,
在 configure 中加入 llvm translator 的 config
可以在 configure 的時候決定是否要用 llvm_translator,
--enable-llvm-trans
要不要加在 config-host.mak。不用。
config-host.mak, config-host.h
只要加在 config.mak及config.h中即可。
config.mak, config.h
焦慮中
去洗臉吧
在LLVM中,JIT所產生的 code 是放在那?heap中嗎?還是mmap中呢?
有可能是在 heap 中,那會有什麼問題嗎?執行上的問題吧,
可是它可以執行啊;嗯,對,有可能是需要在 mmap 中,
ExecutionEngine::create 有另一個
create (
ModuleProvider *MP,
std::string *Err,
JITMemoryManager *JMM,
CodeGenOpt::Level OptLevel=CodeGenOpt::Default,
bool GVsWithCode=true)
其中 JITMemoryManager 就是控制 Memory 的 class,
但問題是,如何將把它跟 QEMU 的memory control弄在一起,
所以現在的問題是 qemu 是如何來控制 memory 的?
我猜是…,還真不知道,
我只知道滿了就清空這個,
乾脆將tb->tc_ptr = llvm_gen_code 算了,
這樣可能會死!死了再說!!!!!!!!
先能動!
走走走走走
gen_opc_buf: uint16_t buf[OPC_BUF_SIZE]
gen_opc_ptr: uint16_t *, move inside the buffer
又來了,幹,幹嘛一直看圖片啦,是在幹什麼!
下班下班,工作的意義在於下班!
===========2/24======================
今天要報告什麼呢?
上上禮拜五請假,禮拜四meeting,
報告我做的事好了:
1、將 整合進 qemu 的 Makefile 中,
2、指出 LLVM 是用 JITMemoryManager 來管理 translated code cache
但 qemu 是自己管理 translated code cache,在
qemu 的 code cache 管理很簡單,只是一直放 code,如果 buffer 滿了,就清空。
cpu_gen_code 需要return gen_code_size,
因為它需要 advance code_gen_ptr;code_gen_ptr指到目前可以放code的位置。
regs_to_env is empty in i386
translated code alignment problem in QEMU,
QEMU forces all generated code to be 16-bit aligned!!!!
IR Cache - 這會存在 Module 中,
Basic Block Cache,這會存在 JITMemoryManager 中,
所以如果以後要做 Code Cache Memory 的研究,應該 extend 這
=========2/25=============
今天要做什麼呢?
可以做 translate.c 裡的 disas_insn_llvm 這個 fuction
也可以寫一個 translation function,
可是你還沒訴 Makefile 可以找到 llvm-translator.cpp 這個檔,do it!
結果只是 rules 寫錯,幹!
加入 llvm 的檔案,compile 需要,
cscope -R -b
整理一下,
今天已成功將 llvm translator integrate 到 qemu 的 make system
遇到的困難有,c 與 c++ 檔案的 link 的問題,
主要是我想在 llvm-translation.h 中將 llvm_gen_code_wrap 這個程式用 static 的
方式用在 translate-all.c 中,
不過好像不應該寫在 header file 中,直接寫在 translate-all.c 中。
but,anyway,想講的是,如果在 extern "C" 中要用到 static,就直接寫在裡面就好了,
如:
extern "C" {
static void* f (void){ /* write your code here */}
}
不要這樣:
extern "C" {
static void* f (void);
}
extern "C" static inline void* f(void)
{
/*write yout code here*/
}
上面的方式會有 linkage error 的錯誤訊息。
另外,今天也將 llvm 加入 svn 系統中,這樣就將 llvm 的版本固定下來了。
在 xeon 上跟 haru 上都可以打 make 編譯了。
做別的事轉換一下心情吧。
看paper。
沒有留言:
張貼留言