2014-12-21 6 views
5

जीसीसी स्रोत कोड में कोड कहां है जो वास्तव में विभिन्न आर्किटेक्चर के लिए असेंबली बनाता है?जहां जीसीसी स्रोत कोड में यह विभिन्न असेंबली भाषाओं में संकलित करता है?

आश्चर्य है कि यह कितनी अलग असेंबली भाषाओं को संकलित करता है, और वास्तव में यह कैसे करता है (स्रोत कोड को देखकर)।

क्या यह कहीं भी जीसीसी रेपो में है, या किसी अन्य रेपो में है? मैंने चारों ओर खोदना शुरू कर दिया है लेकिन कुछ भी नहीं मिला है।

https://github.com/v8/v8-git-mirror/tree/master/src/x64

है क्या जीसीसी के लिए बराबर:

https://github.com/gcc-mirror/gcc

उदाहरण के लिए, यहाँ वी 8 में विधानसभा पैदा कोड के कुछ है?

मुझे आश्चर्य है क्योंकि यह एक रहस्य है कि जीसीसी यह कैसे करता है, और यह सीखने का एक शानदार तरीका होगा कि कैसे संकलक वास्तव में असेंबली स्तर पर लागू होते हैं।

+0

'gcc' बहुत शक्तिशाली है, लेकिन एक ही समय में यह बेहद जटिल और अमित्र है। मैं एलएलवीएम पक्ष से इस क्षेत्र को सीखने के लिए दृष्टिकोण की सिफारिश करता हूं। यह अच्छा, साफ और कॉम्पैक्ट है, प्रत्येक चरण अच्छी तरह से अलग है, इसलिए इसे समझना बहुत आसान है। मैं इसे पढ़कर शुरू करने का सुझाव दूंगा: http://eli.thegreenplace.net/2012/11/24/life-of-an-instruction-in-llvm –

उत्तर

11

.md (मशीन विवरण) जीसीसी स्रोत की फ़ाइलों में असेंबली उत्पन्न करने के लिए सामान शामिल हैं। जीसीसी में कई विशेष सी/सी ++ कोड जेनरेटर शामिल हैं (और उनमें से कुछ कोड उत्सर्जक असेंबली में .md फ़ाइलों का अनुवाद करते हैं)।

GCC एक बहुत ही जटिल कार्यक्रम है। documentation of GCC MELT में कई दिलचस्प लिंक और स्लाइड शामिल हैं, विशेष रूप से भारतीय GCC Resource Center

जीसीसी में अधिकांश अनुकूलन मध्य-अंत में होते हैं (जो ज्यादातर स्रोत भाषा या लक्ष्य प्रणाली से स्वतंत्र होता है), विशेष रूप से कई पास काम करने के साथ दंपति का प्रतिनिधित्व।

जीसीसी रेपो एक SVN repository है।

this answer, विशेष रूप से इसके अंदर की तस्वीरें भी देखें।

4

जीसीसी के लिए वास्तविक स्रोत कोड यहाँ से सबसे सुलभ है:

https://gcc.gnu.org/svn.html

सॉफ्टवेयर SVN (तोड़फोड़), एक स्रोत कोड नियंत्रण प्रणाली के माध्यम से पहुँचा जा सकता है। यह लिनक्स/यूनिक्स के कई संस्करणों पर स्थापित किया जा सकता है, लेकिन अपने मंच पर नहीं हैं, तो आप SVN किट स्थापित करें और उसके बाद निम्न आदेश का उपयोग स्रोत लाने कर सकते हैं:

svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir 

जीसीसी जटिल है और महत्वपूर्ण अनुभव ले जाएगा यह प्रकृति को समझने के लिए कि एप्लिकेशन वास्तव में विभिन्न आर्किटेक्चर के लिए कैसे संकलित करता है।

संक्षेप में, जीसीसी में तीन प्रमुख घटक हैं - फ्रंट एंड, मध्य और बैक-एंड प्रोसेसिंग। फ्रंट-एंड प्रोसेसर में भाषाओं के सिंटैक्स को समझने के लिए भाषा पार्सिंग का घटक होता है (जैसे सी, सी ++, ऑब्जेक्टिव-सी, आदि)। फ्रंट एंड एक पोर्टेबल निर्माण के लिए कोड deconstructs जो फिर लक्षित पर्यावरण के संकलन के लिए बैक एंड के पास पारित किया जाता है।

मध्य भाग कोड विश्लेषण और अनुकूलन करता है, पूर्ण प्रक्रिया के अंत में सर्वोत्तम संभव आउटपुट उत्पन्न करने के लिए कोड को प्राथमिकता देने का प्रयास करता है। तकनीकी रूप से, प्रक्रिया के किसी भी हिस्से में ऑप्टिमाइज़ेशन हो सकता है क्योंकि विश्लेषण के दौरान पैटर्न खोजे जाते हैं।

बैक-एंड प्रोसेसर कोड को पेड़-शैली आउटपुट प्रारूप (वास्तव में अंतिम निष्पादन योग्य कोड) में संकलित करता है। अपेक्षित आउटपुट के आधार पर डिज़ाइन किए जाने के आधार पर, "छद्म कोड" को रजिस्टरों, बिट-साइज, एंडियन-नेस आदि का उपयोग करने के लिए अनुकूलित किया गया है। अंतिम कोड तब असेंबली चरण के दौरान उत्पन्न होता है, जो बैक-एंड कोड को मशीन निष्पादन योग्य निर्देशों में परिवर्तित करता है।

यह ध्यान रखना महत्वपूर्ण है कि कंपाइलर में आउटपुट स्वरूपों से निपटने के लिए कई विकल्प हैं ताकि आप आमतौर पर बॉक्स के बाहर वास्तुकला के कई वर्गों में आउटपुट बना सकें। पार संकलन और लक्ष्य संकलक विकल्पों के लिए, इस लिंक बाहर की जाँच की कोशिश:

https://gcc.gnu.org/install/configure.html

+3

आप जीसीसी के मध्य-अंत भाग को भूल गए हैं, जो कि है फ्रंट एंड एंड बैक-एंड संयुक्त से बड़ा! –

+1

ऐसे कई स्थान हैं जहां आप पूरी प्रक्रिया देख सकते हैं - [विकी] (http://en.wikipedia.org/wiki/GNU_Compiler_Collection) पृष्ठ एक अच्छी शुरुआत है। मध्य भाग सीधे सवाल को संबोधित नहीं करता था, लेकिन मैंने इसे बिना किसी जवाब में जोड़ा है। – rebelyell

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