2010-05-06 20 views
5

मैं एआरएम लिनक्स पर एक जेआईटी लिख रहा हूं जो एक निर्देश सेट निष्पादित करता है जिसमें स्वयं-संशोधित कोड होता है। निर्देश सेट में कोई कैश फ्लश निर्देश नहीं है (उस सम्मान में x86 के समान)।क्या एमआरओटीक्ट एआरएम लिनक्स पर निर्देश कैश फ्लश करता है?

यदि मैं किसी पृष्ठ पर कुछ कोड लिखता हूं और फिर उस पृष्ठ पर mprotect पर कॉल करता है, तो क्या यह निर्देश कैश को अमान्य करने के लिए पर्याप्त है? या मुझे उन पृष्ठों पर cacheflush syscall का उपयोग करने की भी आवश्यकता है?

उत्तर

0

मेरा मानना ​​है कि आपको स्पष्ट रूप से कैश को फ्लश करने की आवश्यकता नहीं है।

यह प्रोसेसर कौन सा है? ARMv5? ARMv7?

+1

हम्म, मैं नाममात्र एआरएमवी 5 को लक्षित कर रहा हूं। एआरएम एआरएम के अनुसार, आपको स्व-संशोधित कोड के मामले में निर्देश कैश को फ़्लश करने की आवश्यकता है। मैं बस सोच रहा हूं कि क्या mprotect मेरे लिए यह करेगा। –

3

आप उम्मीद करेंगे कि mmap/mprotect syscalls मैपिंग स्थापित करेगा जो तत्काल अद्यतन हो, और निर्दिष्ट स्मृति श्रेणियों का उपयोग करने के लिए आगे कोई बातचीत की आवश्यकता नहीं है। मैं देखता हूं कि कर्नेल वास्तव में mprotect पर कैश फ्लश करता है। उस स्थिति में, कोई कैश फ्लश की आवश्यकता नहीं होगी।

हालांकि, मैं यह भी देखना है कि libc के कुछ संस्करणों mprotect के बाद cacheflush कहते हैं, जो अर्थ होगा कि कुछ वातावरण कैश प्लावित की आवश्यकता होगी (या पहले से है)। मुझे लगता है कि यह एक बग के लिए एक कामकाज है।

आप हमेशा कैशफ्लश पर कॉल जोड़ सकते हैं; हालांकि यह अतिरिक्त कोड है, यह हानिकारक नहीं होना चाहिए - सबसे खराब पर, कैश पहले से ही फंस जाएंगे। आप हमेशा एक त्वरित परीक्षण लिख सकते हैं और देख सकते हैं कि क्या होता है ...