2015-09-13 69 views
0

我胳膊底下捉編譯失敗一些內聯彙編:使用內聯彙編程序時編譯器的詳細輸出?

g++ -DNDEBUG -g2 -O2 -pipe -c sha.cpp 
{standard input}: Assembler messages: 
{standard input}:779: Error: ARM register expected -- `ror [sp,#20],#31' 
{standard input}:799: Error: ARM register expected -- `ror [sp],#31' 
{standard input}:848: Error: ARM register expected -- `ror [sp,#4],#31' 

雖然不是很明顯,上面的代碼可以被窒息在四個中的一個旋轉時,根據CPU的功能,比如,如果拇指是在影響。

「標準輸入」是不是非常有幫助,我試圖讓GCC提供的源代碼行的詳細信息。 --verbose既編譯器驅動程序和彙編程序不會產生它:

g++ --verbose -Wa,--verbose -DNDEBUG -g2 -O2 -pipe -c sha.cpp 
Using built-in specs. 
COLLECT_GCC=/usr/bin/g++ 
Target: arm-linux-gnueabi 
... 
COLLECT_GCC_OPTIONS='-v' '-D' 'NDEBUG' '-g2' '-O2' '-pipe' '-c' '-shared-libgcc' 
    '-march=armv4t' '-mfloat-abi=soft' '-mtls-dialect=gnu' 
/usr/lib/gcc/arm-linux-gnueabi/5/cc1plus -quiet -v -imultilib . -imultiarch arm-linux-gnueabi 
    -D_GNU_SOURCE -D NDEBUG sha.cpp -quiet -dumpbase sha.cpp -march=armv4t -mfloat-abi=soft 
    -mtls-dialect=gnu -auxbase sha -g2 -O2 -version -o - | 
as -v -march=armv4t -mfloat-abi=soft -meabi=5 --verbose -o sha.o 
GNU assembler version 2.25.1 (arm-linux-gnueabi) using BFD version (GNU Binutils for Debian) 
... 
ignoring duplicate directory "/usr/include/arm-linux-gnueabi/c++/5" 
ignoring nonexistent directory "/usr/local/include/arm-linux-gnueabi" 
... 
Compiler executable checksum: e1a12b8fe77987e69c757712d6e0213e 
{standard input}: Assembler messages: 
{standard input}:779: Error: ARM register expected -- `ror [sp,#20],#31' 
{standard input}:799: Error: ARM register expected -- `ror [sp],#31' 
{standard input}:848: Error: ARM register expected -- `ror [sp,#4],#31' 

我怎樣才能得到GCC印刷更多的信息,如相關的行號?

在此先感謝。

+1

當你不使用-pipe時會發生什麼?我也會嘗試生成程序集文件而不是二進制文件。 – auselen

回答

1

使用GNU的列表選項,-ahl將生成一個列表,其中包含與彙編器混合的高級源代碼。您需要將-g選項傳遞給gcc,因此您需要選項-Wa,-ahl -g

相關問題