2010年2月22日 星期一

2/22~2/26

吃飯吧

接下來就要開始寫程式了

要如何才能專心在寫程式上呢?
你都要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。










































2010年2月10日 星期三

2010年2月8日 星期一

2010 2.8 note

一、我是否要用 llvm project 來建我的東西?
嗯,我覺得不一定要用它的東西。可以考慮,不過不是現在要,先知道有這個東西。

LLVM實在是一個很好的project,很難相信他們可以寫這麼多的document。

docs/ProgrammersManual.html
包含很多使用 llvm 寫程式的實用知識,

今天要將 llvm-translation.h 編好,能不能用倒是其次,要能 compile 倒是真的。

去大便吧!

compile llvm ... done, installed in /home/tk/local/llvm-2.6
然後compile llvm-gcc ... done, installed in /home/tk/local/llvm-gcc-2.6
去洗個臉,然後找啟彰去走走。

去洗個臉。

照理說,dyngen 應該是要用程式寫出來的,
合理的想法是,先寫 llvm-database,然後再parse database裡的東西寫出。
不過這我目前沒法做到,
老師也沒預期我會這樣做,所以還是先用手寫吧。