2012-03-30 5 views
9

मैं लिनक्स कर्नेल के लिए कॉल-ग्राफ़ उत्पन्न करने में देख रहा हूं जिसमें फ़ंक्शन पॉइंटर्स शामिल होंगे (अधिक जानकारी के लिए मेरा पिछला प्रश्न Static call graph generation for the Linux kernel देखें)। मुझे बताया गया है कि एलएलवीएम इस उद्देश्य के लिए उपयुक्त होना चाहिए, हालांकि मैं llvm.orgकॉल ग्राफ़ उत्पन्न करने के लिए एलएलवीएम का उपयोग कैसे करें?

पर प्रासंगिक जानकारी प्राप्त करने में असमर्थ था, प्रासंगिक दस्तावेज के पॉइंटर्स समेत कोई भी सहायता की सराहना की जाएगी।

उत्तर

12

सबसे पहले, आपको अपने कर्नेल को एलएलवीएम आईआर (देशी ऑब्जेक्ट फाइलों के बजाय) में संकलित करना होगा। फिर, llvm-ld का उपयोग करके, सभी आईआर ऑब्जेक्ट फ़ाइलों को एक बड़े मॉड्यूल में गठबंधन करें। यह करने के लिए काफी मुश्किल बात हो सकती है, आपको मेकफ़ाइल को भारी रूप से संशोधित करना होगा, लेकिन मेरा मानना ​​है कि यह करने योग्य है।

अब आप अपना विश्लेषण कर सकते हैं। पास के साथ opt टूल का उपयोग करके एक साधारण कॉल ग्राफ़ उत्पन्न किया जा सकता है। फ़ंक्शन पॉइंटर्स को संभालने की संभावना नहीं है, इसलिए आप इसे संशोधित करना चाहेंगे।

आपके फ़ंक्शन पॉइंटर्स को ले जाने वाले सभी संभावित डेटा प्रवाह पथों को ट्रैक करना काफी चुनौतीपूर्ण है, और सामान्य स्थिति में ऐसा करना असंभव है (अगर पूर्णांक के लिए कोई सूचक है, तो जटिल डेटा संरचनाओं में पॉइंटर्स संग्रहीत किए जाते हैं, आदि।)। अधिकांश विशिष्ट मामलों के लिए आप अपने पॉइंटर्स के लिए सभी संभावित डेटा प्रवाह पथों का अनुमान लगाने के लिए वैश्विक सार व्याख्या को कार्यान्वित करने का प्रयास कर सकते हैं। यह निश्चित रूप से सटीक नहीं होगा, लेकिन फिर आप कम से कम एक रूढ़िवादी अनुमान प्राप्त करेंगे।

+2

आप वास्तव में कोड की 8 मिलियन लाइनों के लिए एक डॉट कॉलग्राफ नहीं बनाना चाहते हैं। यह एक टेनिस cour को कवर करेगा, अगर डॉट इसे आकर्षित कर सकता है, जो यह नहीं कर सकता है। इसके अलावा, यह ओपी द्वारा अन्य प्रश्न नोट के उत्तर की एक बड़ी गूंज है: -} मजेदार फ़ंक्शन पॉइंटर्स पर विशेष जोर देने के साथ। –

+0

@IraBaxter, निश्चित रूप से आप "हैलो, दुनिया!" से बड़े किसी भी चीज़ के लिए * एक डॉट कॉलग्राफ * प्रदर्शित नहीं करना चाहते हैं। लेकिन आप अपने आगे के विश्लेषण के लिए उस .dot फ़ाइल का उपयोग करना चाह सकते हैं। मैं आमतौर पर .dot फ़ाइलों को पार्स करता हूं और उन्हें डेटाबेस में संग्रहीत करता हूं। –

+0

'ऑप्ट' टूल को इंगित करने के लिए धन्यवाद। हां, ईरा, मैं कॉल ग्राफ़ का आलेखीय प्रतिनिधित्व उत्पन्न करने में नहीं देख रहा हूं। इसे किसी भी पारदर्शी प्रारूप में रखना ठीक है, जो डॉट प्रारूप के लिए अर्हता प्राप्त करता है। फ़ंक्शन पॉइंटर्स के बारे में, मुझे बताया गया है कि एलएलवीएम फ़ंक्शन पॉइंटर्स के विश्लेषण के लिए उन बिंदुओं में से कुछ करने में सक्षम होना चाहिए। मैं स्पष्ट रूप से इसे लागू करने में नहीं देख रहा हूं। – addalbx

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