Loose-Info.com

Last Update 2020/09/09


TOP - 各種テスト - gcc - ファイル名の拡張子によるコンパイラの動作 - S (sx)

ファイル名の拡張子が「.S (sx)」であるときのコンパイラの動作

実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


使用ファイル

sample.c
/* 拡張子「.S (.sx)」の場合の動作確認用ソースファイル */ #include <stdio.h> int main(void) { printf("拡張子「.S (.sx)」の場合の動作確認用ソースファイル\n"); return 0; }

その1

プリプロセスが必要な拡張子が「.S」であるファイルのコンパイル

テスト用アセンブラファイルの生成
$ ls -l total 4 -rw-r--r-- 1 ****** ******** 224 *** ** **:** sample.c $ gcc -S sample.c       <--- -Sオプションでアセンブル直前で停止 $ ls -l total 8 -rw-r--r-- 1 ****** ******** 224 *** ** **:** sample.c -rw-r--r-- 1 ****** ******** 687 *** ** **:** sample.s       <--- アセンブラファイル $

sample.s(生成されたアセンブラファイル)
.file "sample.c" .text .section .rodata .align 8 .LC0: .string "\346\213\241\345\274\265\345\255\220\343\200\214.S (.sx)\343\200\215\343\201\256\345\240\264\345\220\210\343\201\256\345\213\225\344\275\234\347\242\272\350\252\215\347\224\250\343\202\275\343\203\274\343\202\271\343\203\225\343\202\241\343\202\244\343\203\253" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $.LC0, %edi call puts movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 8.2.0" .section .note.GNU-stack,"",@progbits

sample.sの以下の箇所を変更して、sample.Sとして保存
(1) 1行目として追加 #define TESTSTR "\346\213\241\345\274\265\345\255\220\343\200\214.S (.sx)\343\200\215" (2) 6行目を変更 .string TESTSTR

拡張子が「.S」であるファイルのコンパイル
$ ls -l total 12 -rw-r--r-- 1 ****** ******** 224 *** ** **:** sample.c -rw-r--r-- 1 ****** ******** 687 *** ** **:** sample.s -rw-r--r-- 1 ****** ******** 519 *** ** **:** sample.S $ gcc sample.S $ ls -l total 32 -rwxr-xr-x 1 ****** ******** 18328 *** ** **:** a.out       <--- アセンブラファイルから実行ファイルを生成 -rw-r--r-- 1 ****** ******** 224 *** ** **:** sample.c -rw-r--r-- 1 ****** ******** 687 *** ** **:** sample.s -rw-r--r-- 1 ****** ******** 519 *** ** **:** sample.S $ ./a.out 拡張子「.S (.sx)」       <--- プリプロセッサで定義した文字列を出力 $

その2

プリプロセスが必要なファイルの拡張子が「.s」であった場合の挙動

上記の「その1」実行後の状態から、
$ cp -v sample.S sample2.s       <--- プリプロセスが必要なアセンブラファイルを拡張子「.s」でコピー 'sample.S' -> 'sample2.s' $ gcc sample2.s sample2.s: Assembler messages: sample2.s:7: Error: junk at end of line, first unrecognized character is `T'       プリプロセッサによる置換が実行されないためのエラー $