हम जानते हैं, विधानसभा फ़ाइलें (एस) कोडांतरण से पहले पूर्व प्रसंस्करण मिल जाएगा, लेकिन मैंने पाया कि बाद preprocessing वहाँ जिसके परिणामस्वरूप विधानसभा फाइलों में struct किया जा सकता है/समारोह प्रोटोटाइप, कैसे होगा ये प्रोटोटाइप के साथ सौदा के रूप में जीएनयू? बस इसे नजरअंदाज कर दिया?असेंबली फ़ाइल (.s) में प्रक्रिया संरचना और फ़ंक्शन प्रोटोटाइप के रूप में जीएनयू कर सकते हैं?
उदाहरण के लिए, निम्न आदेश:
gcc -E -o tmp.result arch/x86/boot/copy.S -Iinclude/ -Iarch/x86/include/
और जिसके परिणामस्वरूप विधानसभा फ़ाइल (tmp.result) है:
:as -o tmp.o tmp.result
# 1 "arch/x86/boot/copy.S"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "arch/x86/boot/copy.S"
# 11 "arch/x86/boot/copy.S"
# 1 "include/linux/linkage.h" 1
# 1 "include/linux/compiler.h" 1
# 5 "include/linux/linkage.h" 2
# 1 "include/linux/stringify.h" 1
# 6 "include/linux/linkage.h" 2
# 1 "include/linux/export.h" 1
# 26 "include/linux/export.h"
struct kernel_symbol
{
unsigned long value;
const char *name;
};
# 7 "include/linux/linkage.h" 2
# 1 "arch/x86/include/asm/linkage.h" 1
# 8 "include/linux/linkage.h" 2
# 12 "arch/x86/boot/copy.S" 2
.code16
.text
GLOBAL(memcpy)
pushw %si
pushw %di
movw %ax, %di
movw %dx, %si
pushw %cx
shrw $2, %cx
rep; movsl
popw %cx
andw $3, %cx
rep; movsb
popw %di
popw %si
retl
ENDPROC(memcpy)
लेकिन जब इस फाइल को इकट्ठा करने के लिए कोशिश कर रहा निम्न त्रुटि
उपज:
include/linux/export.h: Assembler messages:
include/linux/export.h:26: Error: no such instruction: `struct kernel_symbol'
include/linux/export.h:27: Error: junk at end of line, first unrecognized character is `{'
include/linux/export.h:28: Error: no such instruction: `unsigned long value'
include/linux/export.h:29: Error: no such instruction: `const char *name'
include/linux/export.h:30: Error: junk at end of line, first unrecognized character is `}'
arch/x86/boot/copy.S:20: Error: invalid character '(' in mnemonic
arch/x86/boot/copy.S:34: Error: invalid character '(' in mnemonic
arch/x86/boot/copy.S:36: Error: invalid character '(' in mnemonic
arch/x86/boot/copy.S:49: Error: invalid character '(' in mnemonic
arch/x86/boot/copy.S:51: Error: invalid character '(' in mnemonic
arch/x86/boot/copy.S:58: Error: invalid character '(' in mnemonic
arch/x86/boot/copy.S:60: Error: invalid character '(' in mnemonic
arch/x86/boot/copy.S:67: Error: invalid character '(' in mnemonic
ऐसा नहीं है कि कोडांतरक tmp.result में struct के साथ सौदा नहीं कर सकते लगता है। लिनक्स स्रोत कोड (एस) कैसे संयोजन के माध्यम से हो सकता है?
क्या 'tmp.result' फ़ाइल के साथ therafter क्या होता है? 'Tmp.result' पर काम करने वाला अगला आदेश क्या है? – Downvoter
@Downvoter tmp.result पर काम करने वाला अगला कमांड है: 'as -o tmp.o tmp.result', लेकिन यह त्रुटि उत्पन्न करता है, ने कहा कि यह tmp.result में संरचना को पहचान नहीं पाया है, इसलिए मैं सोचता हूं कि लिनक्स स्रोत कोड कैसे हो सकता है संयोजन के माध्यम से मिलता है। – Kingwah
आप वास्तविक प्री-प्रोसेस की गई फ़ाइल को सहेजने के लिए 'gcc -save-temps' का उपयोग कर सकते हैं जो इसे असेंबलर को फ़ीड करता है। जैसा कि मैटेयो का जवाब बताता है, यह आपको 'gcc -E' के साथ प्राप्त होने से अलग होगा। आप सीपीपी को कैसे आमंत्रित करते हैं यह देखने के लिए आप 'gcc -v' का भी उपयोग कर सकते हैं। –