2011-06-26 3 views
6

मेरे पास एलएलवीएम जिटर से संबंधित प्रश्न है: क्या मैं लगातार स्मृति पते में देशी कोड को उत्सर्जित करने के लिए एलएलवीएम जिटर को दूषित कर सकता हूं? और पीआईसी होने के लिए? मैं जो करना चाहता हूं वह है कि फ़ाइल में जेआईटी कोड को सहेजने के लिए और इसे बाद में निष्पादन के लिए लोड करें ..क्या एलएलवीएम जिटर निरंतर स्मृति पते में मूल कोड उत्सर्जित कर सकता है?

मेरा मतलब है "लोड" से मेरा मतलब है कि फ़ाइल से बफर को बस बफर में पढ़ना है, मैं नहीं चाहता इस तरह एल्फ या कुछ उत्पन्न करने के लिए। लगता है मैं सी स्रोत फ़ाइल जो शामिल है:

Global variables 
---------------- 
Function Foo() 
---------------- 
Function Too() 

जब मैं JIT कोड का अनुरोध मैं चाहता हूँ JIT continus स्मृति पतों में होना:

0x100: Global Vars (take 16 Byte) 
0x110: Foo() Code (take 32 Byte) 
0x130: Too() Code (take 32 Byte) 
0x150: end. 
+0

आप ऐसा करने के लिए जेआईटी का उपयोग क्यों करना चाहते हैं? यह नियमित संकलक के लिए नौकरी की तरह लगता है। आप ELfs से क्यों बच रहे हैं? साझा लाइब्रेरी बनाना आपको बहुत काम बचाएगा। एनएसएएम आउटपुट [फ्लैट फॉर्म बाइनरी] (http://www.posix.nl/linuxassembly/nasmdochtml/nasmdoc6.html) आउटपुट कर सकता है लेकिन मुझे संदेह है कि उन्हें निष्पादित करना इतना आसान होगा। –

+0

मुझे X86 के लिए एलएलवीएम में एल्फ का पूरा समर्थन नहीं दिख रहा है, क्या मैं गलत हूं? दूसरी समस्या यह है कि यदि मैं elf उत्पन्न करना चुनता हूं तो मुझे कोड निष्पादित करने के लिए लोडर की आवश्यकता होती है - और यह कि मैं इससे बचने की कोशिश कर रहा हूं। समस्या यह है कि मैं किसी अन्य प्रक्रिया में जिट निष्पादित करना चाहता हूं इसलिए मुझे जेआईटी कोड निष्पादन प्रक्रिया में स्थानांतरित करने की आवश्यकता है। – user552285

+0

आईआईआरसी, x86 ईएलएफ पावरपीसी के साथ सबसे अच्छा समर्थित कोड जेनरेटर में से एक होना चाहिए। लगता है कि llvm.org अभी डाउनटाइम है, इसलिए मैं जांच नहीं कर सकता। (संपादित करें: Google कैश में 2.9 रिलीज नोट्स मिला, "x86 बैकएंड के साथ ज्ञात समस्याएं" खोजें और देखें कि यह कितना छोटा है: http://webcache.googleusercontent.com/search?q=cache:TRAHCRHR-D8J:llvm .org/रिलीज/2.9/डॉक्स/रिलीज नोट्स.html + llvm + रिलीज + नोट्स + 2.9 और सीडी = 2 और एचएल = डी और सीटी = क्लंक और ग्ल = डी एंड सोर्स = www.google.de) – delnan

उत्तर

7

करने के लिए

यहाँ एक उदाहरण है स्मृति के कुछ क्षेत्र में JIT'ed कोड स्टोर करें आप JITMemoryManager (include/llvm/ExecutionEngine/JITMemoryManager.hlib/ExecutionEngine/JIT/JITMemoryManager.cpp) का विशेष संस्करण लिख सकते हैं। कस्टम जीआईएम एमएम का उदाहरण यहां है: unittests/ExecutionEngine/JIT/JITTest.cpp, यह RecordingJITMemoryManager है जो मुख्य जेआईटी एमएम कॉल लॉग करता है।

जैसा कि मैं देख सकता हूं (एलएलवीएम 2.9 के रूप में), एआरएम जेआईटी में isPIC पर गलत है और एक्स 86 जेआईटी पीआईसी कोड उत्पन्न करने में सक्षम है।

सबसे बड़ी समस्या, प्रतीत होता है, प्रीकंपील्ड कोड लोड हो रहा है।

संबंधित मुद्दे