2012-08-12 13 views
7

मैं QEMU उपयोग करने के लिए एक 86 अतिथि ऑपरेटिंग सिस्टम के निष्पादन के लिए एक स्मृति निशान उत्पन्न करने के लिए करना चाहते हैं।qemu स्मृति संचालन

टीसीजी विकी पेज के अनुसार, क्यूमु लक्ष्य (अतिथि) मेमोरी में लोड/स्टोर उत्पन्न करने के लिए कुछ हद तक सहायक मदद करता है। निर्देशों की यह सूची tcg_gen_qemu_ld8s/u, tcg_gen_qemu_ld16s/u, tcg_gen_qemu_ld32s/u, tcg_gen_qemu_ld64 है। (हम दुकान निर्देश के लिए एक समान सेट है)। मैं लक्ष्य-i386/translate.c फ़ाइल

हालांकि उपरोक्त कार्यों के लिए सभी कॉल्स को फँसाने कर रहा हूँ, मैं अभी भी तरह

cmp ecx, [r12+0x4] 
mov r10b, [r13+0x0] 
mov byte [rax+0xf0000], 0x0 
mov byte [rax+rdx], 0x0 

प्रश्न याद आ रही है कुछ निर्देश के लोड/स्टोर:

  1. क्या कोई अन्य कृपया लोड/स्टोर पॉइंट (प्रत्यक्ष या अप्रत्यक्ष) को इंगित कर सकता है जो मुझे याद आ रही है ??
  2. क्या qemu अतिथि स्मृति तक पहुंच के लिए एक एकल प्रविष्टि बिंदु फ़ंक्शन प्रदान करता है (जैसे guest_read()) जिसे अतिथि स्मृति से सभी भारों का पता लगाने के लिए उपकरण दिया जा सकता है ???
  3. किसी कृपया एक अच्छा प्रलेखन मैं कहाँ समझ सकें कि किस qemu अतिथि स्मृति के राज्य को बनाए रखता है को इंगित कर सकते हैं ??

पिछले मेल में भ्रामक निर्देशों के लिए दोस्तों को क्षमा करें।

cmp ecx, [r12+0x4] 
mov r10b, [r13+0x0] 
mov byte [rax+0xf0000], 0x0 
mov byte [rax+rdx], 0x0 

ऐसा लगता है कि उपरोक्त सभी निर्देश tcg_gen_ld/st सहायक के साथ कवर हो रहे हैं।

लेकिन अब मैं एक और समस्या पर ठोकर खाई है
मैं शुरू में सोचा था कि अतिथि स्मृति के सभी क्रियाकलापों को translate.c फ़ाइल में सहायक निर्देश के माध्यम से होता है। हालांकि, मैंने पाया कि cmpxcgh8b और cmpxchg16b जैसे कुछ निर्देश के लिए सहायक कार्यों वास्तव में अतिथि स्मृति का उपयोग कर रहे हैं।

तो, इसका मतलब यह है वहाँ अतिथि स्मृति को पढ़ने के लिए एक से अधिक प्रवेश द्वारों हैं। कुछ एक कृपया LDQ और STQ निर्देश अतिथि स्मृति का उपयोग करने के लिए अनुवाद किया जाता है कैसे बता सकते हैं ??

उत्तर

1

अन्य कार्यों कि डेटा लोड cpu_ld*_data और cpu_st*_data, या cpu_ld*_data_ra और cpu_st*_data_ra कहा जाता है। _ra संस्करण एक अतिरिक्त तर्क है, जो उत्पन्न कोड में फोन करने वाले का पता होता है। यह लोड मामले में दोषयुक्त निर्देश का पता गणना करने के लिए प्रयोग किया जाता है या दुकान एक पृष्ठ दोष उत्पन्न करता है।

उदाहरण के लिए, cmpxchg8b के लिए grepping देता

target/i386/mem_helper.c:void helper_cmpxchg8b(CPUX86State *env, target_ulong a0) 

और उस समारोह के अंदर:

uintptr_t ra = GETPC(); 
... 
oldv = cpu_ldq_data_ra(env, a0, ra); 
newv = (cmpv == oldv ? newv : oldv); 
/* always do the store */ 
cpu_stq_data_ra(env, a0, newv, ra); 
संबंधित मुद्दे