nginx -t > Illegal instruction

Sergey Kandaurov pluknet at nginx.com
Tue Oct 15 17:06:38 UTC 2013


On Oct 15, 2013, at 7:39 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> Hello!
> 
> On Tue, Oct 15, 2013 at 06:14:21PM +0300, Sergey Talchuk wrote:
> 
>> Всем привет!
>> 
>> собрал nginx для своей системы без проблем (собирал на ней же). Только
>> похоже при запуске nginx -t не может определить тип процессора. К
>> сожалению, система находится на носителе доступном только для чтения.
>> Поэтому отдебажить системные библиотеки не представляется возможным.
>> Надеюсь на помощь.
> 
> [...]
> 
>> Program received signal SIGILL, Illegal instruction.
>> 0x0805dca5 in ngx_cpuid (i=0, buf=0xbffff950) at src/core/ngx_cpuinfo.c:30
>> 30      src/core/ngx_cpuinfo.c: No such file or directory.
>>        in src/core/ngx_cpuinfo.c
>> (gdb) bt
>> #0  0x0805dca5 in ngx_cpuid (i=0, buf=0xbffff950) at
>> src/core/ngx_cpuinfo.c:30
>> #1  0x0805dbbb in ngx_cpuinfo () at src/core/ngx_cpuinfo.c:84
>> #2  0x0806e4f7 in ngx_os_init (log=0x80c27a8) at
>> src/os/unix/ngx_posix_init.c:60
> 
> [...]
> 
>> cat /proc/cpuinfo
>> processor       : 0
>> vendor_id       : CyrixInstead
>> cpu family      : 4
>> model           : 1
>> model name      : Cx486SLC
>> stepping        : unknown
>> fdiv_bug        : no
>> hlt_bug         : no
>> f00f_bug        : no
>> coma_bug        : no
>> fpu             : no
>> fpu_exception   : no
>> cpuid level     : -1
>> wp              : yes
>> flags           :
>> bogomips        : 44.33
> 
> Ваш процессор настолько старый, что не поддерживает инструкцию 
> cpuid.  Quick and dirty workaround - добавить return в самом 
> начале функции ngx_cpuinfo() в src/core/ngx_cpuinfo.c:
> 
> diff --git a/src/core/ngx_cpuinfo.c b/src/core/ngx_cpuinfo.c
> --- a/src/core/ngx_cpuinfo.c
> +++ b/src/core/ngx_cpuinfo.c
> @@ -75,6 +75,8 @@ ngx_cpuinfo(void)
>     u_char    *vendor;
>     uint32_t   vbuf[5], cpu[4], model;
> 
> +    return;
> +
>     vbuf[0] = 0;
>     vbuf[1] = 0;
>     vbuf[2] = 0;
> 


Или что-то такое может работать:

diff -r 5483d9e77b32 src/core/ngx_cpuinfo.c
--- a/src/core/ngx_cpuinfo.c	Wed Oct 02 15:07:17 2013 +0400
+++ b/src/core/ngx_cpuinfo.c	Tue Oct 15 21:03:53 2013 +0400
@@ -20,6 +20,20 @@ static ngx_inline void ngx_cpuid(uint32_
 static ngx_inline void
 ngx_cpuid(uint32_t i, uint32_t *buf)
 {
+    uint32_t cpu_vendor[4];
+
+    __asm__ (
+
+    "    movl   $0x4778654e, (%0);"       // store vendor string
+    "    movl   $0x72446e65, 4(%0);"
+    "    movl   $0x6e657669, 8(%0);"
+    "    movl   $0, 12(%0);"
+
+    : : "D" (cpu_vendor) );
+
+    if (ngx_strcmp(cpu_vendor, "CyrixInstead") == 0) {
+        return;
+    }
 
     /*
      * we could not use %ebx as output parameter if gcc builds PIC,

-- 
Sergey Kandaurov
pluknet at nginx.com





Подробная информация о списке рассылки nginx-ru