2012-04-22 17 views
6

यह -malign-double संकलक विकल्प की तरह लगता है बजना से हटा दिया गया। उदाहरण कोड:करता बजना जीसीसी के -malign-डबल ध्वज को एक बराबर है?

#include <stddef.h> 
#include <stdio.h> 

typedef struct X { char a; long long b; } X; 

int main(void) 
{ 
    printf("%zd\n", offsetof(X, b)); 
    return 0; 
} 

जब 32-बिट मोड (-m32) में जीसीसी के साथ संकलित किया गया, पर अगर -malign-double सक्षम या क्रमशः नहीं है निर्भर करता है उत्पादन 8 या 4 के लिए बनाया जा सकता है। लेकिन बजना इस विकल्प का समर्थन करने के लिए प्रकट नहीं होता है:

$ clang test.c -m32 -malign-double 
clang: warning: argument unused during compilation: '-malign-double' 
$ ./a.out 
4 

बजना संस्करण:

Apple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin11.3.0 
Thread model: posix 

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

वहाँ बजना में -malign-double के लिए किसी भी वर्तमान बराबर है? या मैं अब के लिए एक अलग संकलक का उपयोग करने के लिए अटक गया हूँ? मुझे कुछ कोड संकलित करने की आवश्यकता है जो उस ध्वज का उपयोग करने वाली बाइनरी-केवल तृतीय-पक्ष लाइब्रेरी के विरुद्ध लिंक करती हैं।

+0

आपको लगता है कि किसी भी सवाल का जवाब मिला? – tito

+0

ठीक है, ऐसा लगता है कि यह अभी भी संभव नहीं है, क्योंकि किसी ने मुझे आईआरसी पर बताया: " यदि संभव हो तो इसके लिए कोई विकल्प नहीं है (उदाहरण के लिए एबीआई द्वारा बाध्य नहीं), एलएलवीएम प्राकृतिक संरेखण का उपयोग करेगा | यदि यह कोड उत्पन्न होता है, तो आप गुणों का उपयोग करके संरेखण को हमेशा मजबूर कर सकते हैं " – tito

उत्तर

1

जाहिर है यह रूप में एक काम के आसपास -mllvm -malign-double उपयोग करने के लिए संभव है।

https://codereview.chromium.org/1310173005 से

उद्धरण:

LLVM -malign-double विकल्प का समर्थन करता है, बजना नहीं करता है। -mllvm -malign-double में पासिंग एक समाधान के रूप में यह अलग मशीन वर्णन में परिणाम होगा बजना और LLVM द्वारा किया जा रहा के रूप में इस्तेमाल नहीं किया जा सकता।

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