macos gcc assembly osx-lion gas

macos - Error "sin instrucciones" al ensamblar el proyecto en Mac OS X



gcc assembly (3)

Parece que está ejecutando una versión de as que no sabe acerca de las extensiones AVX. O necesita construir un gas más nuevo o usar clang para armar.

Usé homebrew para instalar GCC 4.7.0 y la creación de mi proyecto falla en el momento del montaje. Puedo tomar el código correctamente desde .c -> .s, pero .s -> .o falla.

Para ver la fórmula de brebaje utilizada para instalar GCC, consulte: https://github.com/Homebrew/homebrew-dupes/blob/master/gcc.rb . También instalé binutils desde el inicio utilizando https://github.com/mxcl/homebrew/blob/master/Library/Formula/binutils.rb . Instalar binutils no parece presentar un nuevo ''como'' en / usr / local / lib o similar.

¿Cómo puedo rastrear este error de instrucción faltante? Parece que el compilador es correcto, pero el enlazador simplemente no admite estas instrucciones. Las instrucciones parecen ser instrucciones vectoriales.

xavierlange $> make suricata.o /usr/local/bin/gcc-4.7 -DHAVE_CONFIG_H -I. -I.. -I../libhtp -I/opt/local/include -v -Wextra -Wall -fno-strict-aliasing -fno-tree-pre -Wno-unused-parameter -std=gnu99 -DOS_DARWIN -march=native -DLIBPCAP_VERSION_MAJOR=1 -DHAVE_PCAP_SET_BUFF -DUNITTESTS -DREVISION="61d5fe3" -MT suricata.o -MD -MP -MF .deps/suricata.Tpo -c -o suricata.o suricata.c Using built-in specs. COLLECT_GCC=/usr/local/bin/gcc-4.7 Target: x86_64-apple-darwin11.3.0 Configured with: ../configure --enable-languages=c,c++,fortran,java,objc,obj-c++ --prefix=/usr/local/Cellar/gcc/4.7.0/gcc --datarootdir=/usr/local/Cellar/gcc/4.7.0/share --bindir=/usr/local/Cellar/gcc/4.7.0/bin --program-suffix=-4.7 --with-gmp=/usr/local/Cellar/gmp/5.0.4 --with-mpfr=/usr/local/Cellar/mpfr/3.1.0 --with-mpc=/usr/local/Cellar/libmpc/0.9 --with-system-zlib --enable-stage1-checking --enable-plugin --enable-lto --disable-multilib --disable-nls Thread model: posix gcc version 4.7.0 (GCC) COLLECT_GCC_OPTIONS=''-mmacosx-version-min=10.7.3'' ''-D'' ''HAVE_CONFIG_H'' ''-I'' ''.'' ''-I'' ''..'' ''-I'' ''../libhtp'' ''-I'' ''/opt/local/include'' ''-v'' ''-Wextra'' ''-Wall'' ''-fno-strict-aliasing'' ''-fno-tree-pre'' ''-Wno-unused-parameter'' ''-std=gnu99'' ''-D'' ''OS_DARWIN'' ''-march=native'' ''-D'' ''LIBPCAP_VERSION_MAJOR=1'' ''-D'' ''HAVE_PCAP_SET_BUFF'' ''-D'' ''UNITTESTS'' ''-D'' ''REVISION=61d5fe3'' ''-MT'' ''suricata.o'' ''-MD'' ''-MP'' ''-MF'' ''.deps/suricata.Tpo'' ''-c'' ''-o'' ''suricata.o'' /usr/local/Cellar/gcc/4.7.0/gcc/libexec/gcc/x86_64-apple-darwin11.3.0/4.7.0/cc1 -quiet -v -I . -I .. -I ../libhtp -I /opt/local/include -MD suricata.d -MF .deps/suricata.Tpo -MP -MT suricata.o -D__DYNAMIC__ -D HAVE_CONFIG_H -D OS_DARWIN -D LIBPCAP_VERSION_MAJOR=1 -D HAVE_PCAP_SET_BUFF -D UNITTESTS -D REVISION=61d5fe3 suricata.c -march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=corei7-avx -fPIC -quiet -dumpbase suricata.c -mmacosx-version-min=10.7.3 -auxbase-strip suricata.o -Wextra -Wall -Wno-unused-parameter -std=gnu99 -version -fno-strict-aliasing -fno-tree-pre -o /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s GNU C (GCC) version 4.7.0 (x86_64-apple-darwin11.3.0) compiled by GNU C version 4.7.0, GMP version 5.0.4, MPFR version 3.1.0-p8, MPC version 0.9 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/usr/local/Cellar/gcc/4.7.0/gcc/lib/gcc/x86_64-apple-darwin11.3.0/4.7.0/../../../../x86_64-apple-darwin11.3.0/include" ignoring nonexistent directory "/opt/local/include" #include "..." search starts here: #include <...> search starts here: . .. ../libhtp /usr/local/Cellar/gcc/4.7.0/gcc/lib/gcc/x86_64-apple-darwin11.3.0/4.7.0/include /usr/local/include /usr/local/Cellar/gcc/4.7.0/gcc/include /usr/local/Cellar/gcc/4.7.0/gcc/lib/gcc/x86_64-apple-darwin11.3.0/4.7.0/include-fixed /usr/include /System/Library/Frameworks /Library/Frameworks End of search list. GNU C (GCC) version 4.7.0 (x86_64-apple-darwin11.3.0) compiled by GNU C version 4.7.0, GMP version 5.0.4, MPFR version 3.1.0-p8, MPC version 0.9 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 1dbaf0f0ba4d4d18b5d0d00c3c7d024d COLLECT_GCC_OPTIONS=''-mmacosx-version-min=10.7.3'' ''-D'' ''HAVE_CONFIG_H'' ''-I'' ''.'' ''-I'' ''..'' ''-I'' ''../libhtp'' ''-I'' ''/opt/local/include'' ''-v'' ''-Wextra'' ''-Wall'' ''-fno-strict-aliasing'' ''-fno-tree-pre'' ''-Wno-unused-parameter'' ''-std=gnu99'' ''-D'' ''OS_DARWIN'' ''-march=native'' ''-D'' ''LIBPCAP_VERSION_MAJOR=1'' ''-D'' ''HAVE_PCAP_SET_BUFF'' ''-D'' ''UNITTESTS'' ''-D'' ''REVISION=61d5fe3'' ''-MT'' ''suricata.o'' ''-MD'' ''-MP'' ''-MF'' ''.deps/suricata.Tpo'' ''-c'' ''-o'' ''suricata.o'' as -arch x86_64 -force_cpusubtype_ALL -o suricata.o /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7791:no such instruction: `vcvtsi2ssq %rax, %xmm0,%xmm0'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7792:no such instruction: `vmovd %xmm0, %eax'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7799:no such instruction: `vcvtsi2ssq %rdx, %xmm0,%xmm0'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7800:no such instruction: `vaddss %xmm0, %xmm0,%xmm0'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7801:no such instruction: `vmovd %xmm0, %eax'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7804:no such instruction: `vmovd %eax, %xmm1'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7805:no such instruction: `vmovd %edx, %xmm2'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7806:no such instruction: `vdivss %xmm2, %xmm1,%xmm0'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7807:no such instruction: `vunpcklps %xmm0, %xmm0,%xmm0'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7808:no such instruction: `vcvtps2pd %xmm0, %xmm0'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7809:no such instruction: `vmovd %xmm0, %rax'' /var/folders/58/wg28y0x17p5c3s6y_2t2rj2h0000gn/T//ccKRmuNX.s:7819:no such instruction: `vmovd %rax, %xmm0'' make: *** [suricata.o] Error 1

Esto es lo que sucede cuando uso el GCC-4.7 instalado por MacPorts (usa cctools). Traté de cambiar las optimizaciones para ver si eso ayudaría también.

xavierlange $> /opt/local/bin/gcc-mp-4.7 -DHAVE_CONFIG_H -I. -I.. -I../libhtp -I/usr/local/include -I/opt/local/include -g -O0 -Wextra -Wall -fno-strict-aliasing -fno-tree-pre -Wno-unused-parameter -std=gnu99 -DOS_DARWIN -march=native -DLIBPCAP_VERSION_MAJOR=1 -DHAVE_PCAP_SET_BUFF -DUNITTESTS -DREVISION="61d5fe3" -MT suricata.o -MD -MP -MF .deps/suricata.Tpo -S suricata.c -o suricata.s xavierlange $> /opt/local/bin/as suricata.s suricata.s:9811:no such instruction: `vcvtsi2ssq %rax, %xmm0,%xmm0'' suricata.s:9812:no such instruction: `vmovd %xmm0, %eax'' suricata.s:9819:no such instruction: `vcvtsi2ssq %rdx, %xmm0,%xmm0'' suricata.s:9820:no such instruction: `vaddss %xmm0, %xmm0,%xmm0'' suricata.s:9821:no such instruction: `vmovd %xmm0, %eax'' suricata.s:9824:no such instruction: `vmovd %eax, %xmm1'' suricata.s:9825:no such instruction: `vmovd %edx, %xmm2'' suricata.s:9826:no such instruction: `vdivss %xmm2, %xmm1,%xmm0'' suricata.s:9827:no such instruction: `vunpcklps %xmm0, %xmm0,%xmm0'' suricata.s:9828:no such instruction: `vcvtps2pd %xmm0, %xmm0'' suricata.s:9829:no such instruction: `vmovd %xmm0, %rax'' suricata.s:9839:no such instruction: `vmovd %rax, %xmm0''


La solución corta sería eliminar la opción ''-march = native'' (al menos funcionó para mí).


Agregar -Wa,-q a los indicadores del compilador me solucionó este problema. De las páginas man para:

-q

Utilice el ensamblador integrado clang (1) en lugar del ensamblador de sistema basado en GNU.

La parte -Wa pasa del controlador del compilador al ensamblador, al igual que -Wl pasa argumentos al vinculador.