使用内联汇编器时编译器的详细输出
Verbose output from compiler when using inline assembler?
我用一些内联汇编器在ARM下捕获编译失败:
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打印更多信息,如相关行号?
使用GNU as的列表选项,-ahl
将生成一个包含高级源代码和汇编程序的列表。您需要将-g
选项传递给gcc,因此您需要-Wa,-ahl -g
选项。
相关文章:
- C++编译器命令 C++ 不会生成输出
- 编译器资源管理器和 GCC 具有不同的输出
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- 编译器没有显示错误,但我没有得到任何输出.怎么了?
- 在MSDOS编译器上,用大于最大值的值初始化int时输出混乱
- 我不明白我的编译器是如何获得此输出的
- C++编译器只显示数字,不显示正确的输出
- 乘以时输出错误.这是我编译器中的错误吗?C
- Web 编译器输出奇怪的结果
- 输出错误:两个不同编译器上的不同输出:Prime Cryptarithm USACO
- 编译器将输出的流运算符<<解释为用于按位左移的二进制运算符<<
- 构建 C/C++ 代码时的 Gradle 编译器输出
- C 编译器输出由于Permisson误差而未运行
- GCC 编译器对类型转换有什么作用?为什么 mac 和 Linux 上的输出不同
- VS说"Too few arguments...",但其他编译器给了我正确的输出?
- GCC 8 交叉编译器输出 ARMv7 可执行文件而不是 ARMv6
- 以下代码的输出是什么(答案因差异编译器而异)
- 简单构造函数的复杂编译器输出
- C++程序中的输出编译器版本
- 最后的所有输出——c++编译器