gcc -c -march=i686 -O2 -fomit-frame-pointer -pipe -I src/core -I
src/event -I src/event/modules -I src/os/unix -I objs -o objs/src/core/ngx_cpuinfo.o src/core/ngx_cpuinfo.c
src/core/ngx_cpuinfo.c: In function `ngx_cpuinfo':
src/core/ngx_cpuinfo.c:22: error: can't find a register in class `BREG'
while reloading `asm'
src/core/ngx_cpuinfo.c:22: error: can't find a register in class `BREG'
while reloading `asm'
make[1]: *** [objs/src/core/ngx_cpuinfo.o] Error 1
make[1]: Leaving directory
`/var/tmp/portage/nginx-0.3.29/work/nginx-0.3.29'
make: *** [build] Error 2
!!! ERROR: www-servers/nginx-0.3.29 failed.
OS
gcc -v
as -v
Как и везде :)
Linux/i386
www ~ # gcc -v
Reading specs from /usr/lib/gcc/i686-pc-linux-gnu/3.4.4/specs
Configured with: /var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/configure
--prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.4.4
--includedir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.4/include
--datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.4
--mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.4/man
--infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.4/info
--with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.4/include/g++-v3
--host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec
--enable-nls --without-included-gettext --with-system-zlib
--disable-checking --disable-werror --disable-libunwind-exceptions
--disable-multilib --disable-libgcj --enable-languages=c,c++
--enable-shared --enable-threads=posix --enable-__cxa_atexit
--enable-clocale=gnu
Thread model: posix
gcc version 3.4.4 (Gentoo Hardened 3.4.4-r1, ssp-3.4.4-1.0, pie-8.7.8)
www ~ # as -v
GNU assembler version 2.16.1 (i686-pc-linux-gnu) using BFD version 2.16.1
На другой такой же машине все собирается. Тут апгрейд с .26 не проходит.
Есть ощущение, что здесь как-то пояивлся -fPIC, но его нигде не видно.
Да нет - он тут может быть даже и был - машина то hardened. Но раньше
А что такое hardened ?
все собиралось - 26 версия стоит и работает нормально.....
В 0.3.27 появилось:
*) Добавление: определение размера строки кэша распространённых
процессоров при старте.
До этого не было. В ngx_cpuinfo() вставляется ассемблерный код cpuid,
который использует регистр ebx, а gcc использует этот же регистр для своих
целей, если используется -fPIC код.
Игорь Сысоев
http://sysoev.ru