2010-11-05 24 views
5

दोस्तों, मेरे पास एक प्रोजेक्ट है जिसे मैंने एआरएम कॉर्टेक्स-ए 8 प्रोसेसर के लिए संकलित किया है। मैं ऐसा करने के लिए जीसीसी का उपयोग कर रहा हूं। वर्तमान में मेरे निष्पादन योग्य का आकार 220.1 केबी है। अब मैं अपने makefile को संशोधित करने और मैं झंडा -mthumb जोड़ने के लिए, makefile लाइन इस तरह कुछ हद तक लग रहा है -एआरएम थंब मोड: कोड आकार

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon 

मैं इस सब मेरे makefiles में आने वाले बदलाव करते हैं और मैं अपने प्रोजेक्ट का निर्माण, लेकिन निष्पादन मैं अंत में अभी भी प्राप्त करने के लिए जारी है 220.1 केबी का हो।

मैं अपने कमांड लाइन के लिए एक और परिवर्तन किया है, मैं एक बार फिर -mthumb-Interwork विकल्प

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon 

जोड़ा मैं एक ही आकार के निष्पादन 220.1 KB। क्या मैं ऐसा करने के दौरान कुछ याद कर रहा हूँ?

मैं एक छोटे से कार्यक्रम में लिखा था, दो नंबर की सबसे छोटी खोजने के लिए और मैं निम्नलिखित कमांड लाइन

gcc main.c -o main 

मैं एक 8.5 KB निष्पादन योग्य मिल का उपयोग कर इसे संकलित

इसके बाद, मैं एक

करना
gcc -mthumb main.c -o main 

मुझे अभी भी एक 8.5 केबी निष्पादन योग्य मिलता है।

क्या गलत है?

मैंने cat /proc/cpuinfo किया था यह देखने के लिए कि अंगूठे वास्तव में मेरे प्रोसेसर द्वारा समर्थित है या नहीं, और मुझे लगता है कि यह वास्तव में समर्थित है। मैं - जब ARMv7 के लिए संकलन

Processor: ARMv7 Processor rev 5 (v7l) 
Features: swp half thumb fastmult vfp edsp neon vfpv3 
.... 
.... 
+0

'-marm'' -mthumb' का काउंटर है और 'gcc' अंतिम विकल्प लेता है; यही कारण है कि * dwelch * जवाब काम करता है। –

उत्तर

6

मुझे लगता है कि मेरा मतलब है कि आपके पास अंगूठे के साथ एक हाथ है, हटाने की कोशिश करें -मार्म।

+1

मुझे लगता है कि यह है, यह प्रदर्शित करना बहुत आसान है, कोशिश करें- एस-मिथम्ब- एक छोटी सी फाइल के साथ एक छोटी सी फ़ाइल पर मार्म करें और देखें कि यह आर्म कोड उत्पन्न करता है क्योंकि आखिरी चीज जिसे आपने करने के लिए कहा था। फिर इसे -मर्म-मिथम्ब में बदलें, साथ-साथ थंबम्ब आखिरकार यह अंगूठे कोड उत्पन्न करता है।तो -मर्मिंग आखिरी अंगूठे की सभी चीजें जो आप करने की कोशिश कर रहे हैं। –

+1

संदेह में, एएसएम फ़ाइल को संरक्षित करने के लिए "gcc -save-temps" का उपयोग करें, या एक disassembly के लिए ऑब्जेक्ट कोड पर "objdump -d" का उपयोग करें। एआरएम और थंब के बीच का अंतर निर्देश चौड़ाई के आधार पर स्पॉट करना बहुत आसान है (एआरएम हमेशा 4 बाइट्स होते हैं, थंब 2 बाइट्स होता है, थंब 2 2 या 4 होता है)। मैंने मामलों को देखा है जहां जीसीसी आउटपुट में थंब <एआरएम <थंब 2, लेकिन वह थोड़ी देर पहले था। – fadden

+0

+1 कोई अंगूठे के साथ एक हाथ रखने के प्रबंधन के लिए +1। –

0

कुछ compilers के साथ, अंगूठे डिफ़ॉल्ट है। क्या आप सुनिश्चित हैं कि आपका मूल निष्पादन योग्य अंगूठे के लिए नहीं बनाया गया था?

-मो-थंब के साथ निर्माण करने का प्रयास करें और देखें कि कोड का आकार बढ़ता है या नहीं।

+0

स्टीफन मैंने ऐसा किया, यह एक बार फिर 220.1 केबी है। कोई परिवर्तन नहीं होता है! – HaggarTheHorrible

2

वास्तविक कोड के बिना कहना मुश्किल है, लेकिन मेरे पास कुछ सुझाव हैं।

  1. अनुकूलन सक्षम करें। (उदा। -ओ 3 -फंक्शन-सेक्शन -फडाटा-सेक्शन)
  2. यह सुनिश्चित करने के लिए निष्पादन योग्य को दबाएं कि डीबग जानकारी की गणना नहीं की गई है।
  3. वास्तविक कोड (.text) आकार की जांच करें, फ़ाइल का आकार नहीं। शायद कुछ पैडिंग चल रहा है। आप इसके लिए objdump का उपयोग कर सकते हैं।
  4. असेंबली कोड (-एस स्विच) डंप करें और जांचें कि यह वास्तव में एक मामले में और अंगूठे में एआरएम निर्देश उत्पन्न करता है।
संबंधित मुद्दे