2012-03-13 15 views
11

मैं this article on PLT (Process Linkage Table) and GOT (Global Offset Table) पढ़ रहा हूं। जबकि पीएलटी का उद्देश्य मुझे स्पष्ट है, मैं अभी भी गॉट के बारे में उलझन में हूं। आलेख से मुझे क्या समझा गया है कि जीओटी केवल साझा पुस्तकालय में extern के रूप में घोषित चर के लिए जरूरी है। साझा लाइब्रेरी कोड में static के रूप में घोषित वैश्विक चर के लिए, यह आवश्यक नहीं है।प्रक्रिया लिंकेज तालिका और वैश्विक ऑफ़सेट तालिका

क्या मेरी समझ सही है, या क्या मैं पूरी तरह से इस बिंदु को याद कर रहा हूं।

उत्तर

16

शायद आपका भ्रम extern के अर्थ के साथ है। चूंकि डिफ़ॉल्ट लिंक extern है, static कीवर्ड के बिना फ़ंक्शन स्कोप के बाहर घोषित कोई वैरिएबल extern है।

जीओटी आवश्यक है क्योंकि साझा लाइब्रेरी कोड द्वारा उपयोग किए जाने वाले चर के पते को साझा लाइब्रेरी उत्पन्न होने के समय ज्ञात नहीं है। यह या तो लाइब्रेरी लोड होने पर लोड लोड पर निर्भर करता है (यदि परिभाषा लाइब्रेरी में ही है) या तीसरे पक्ष कोड को चर परिभाषित किया गया है (यदि परिभाषा कहीं और है)। इसलिए कोड में पता इनलाइन डालने के बजाय, संकलक साझा लाइब्रेरी के GOT को पढ़ने के लिए कोड उत्पन्न करता है और फिर रनटाइम पर GOT से पता लोड करता है।

तो चर में जाना जाता है एक ही साझा लाइब्रेरी में परिभाषित किया जा करने के लिए (क्योंकि या तो यह static है या hidden या protected दृश्यता में इसका इस्तेमाल किया विशेषता) तो पुस्तकालय में कोड करने के लिए पता रिश्तेदार पर तय किया जा सकता है साझा लाइब्रेरी फ़ाइल जेनरेट की गई है। इस मामले में, GOT के माध्यम से एक लुकअप करने के बजाए, कंपाइलर प्रोग्राम-काउंटर-रिश्तेदार एड्रेसिंग के साथ चर का उपयोग करने के लिए कोड उत्पन्न करता है। रनटाइम और लोड समय पर यह कम महंगा है (क्योंकि पूरे प्रतीक लुकअप और स्थानांतरण प्रक्रिया को लोड समय पर छोड़ दिया जा सकता है)।

+0

कोई विचार कैसे स्थिर चर के लिए जीओटी के माध्यम से देखने के लिए जीसीसी को मजबूर करना है? –

+0

मैं सही तरीके से नहीं सोच सकता; आपको इसकी आवश्यकता क्यों है? –

+0

मैं एक एआरएम प्रोसेसर के लिए एक स्थिति-स्वतंत्र निष्पादन योग्य के रूप में अपना आवेदन करने की कोशिश कर रहा हूं और स्थिर चर के अलावा सबकुछ ठीक काम करता है। समस्या यह है कि .text सेक्शन और .data/.bss अनुभागों में अलग-अलग स्थानान्तरण ऑफसेट हैं, इसलिए स्थिर चर के लिए पीसी-सापेक्ष पहुंच काम नहीं करता है जबकि GOT कार्यों के माध्यम से उपयोग ठीक है। –

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