Re: nginx -t > Illegal instruction

2013-10-17 Пенетрантность Sergey Talchuk
Большое спасибо за патч. Nginx заработал с моим процессором.

Сергей

P.S.
Год выпуска моего NAS с данным процессором - 2009;
http://global.level1.com/1-Bay/WAP-0008/p-368.htm
Производитель отдал предпочтение в сторону Cx486SLC. При этом в
спецификации и описании продукта об этом ни слова.
На самом деле я бы тоже был не против какого-нибудь ARM :)


2013/10/15 Gena Makhomed 

> On 15.10.2013 21:01, Igor Sysoev wrote:
>
> >> вопросы про 486 процессор без cpuid периодически возникают.
>
>  Что-то я не припоминаю в рассылке периодических вопросов
>> про процессоры двадцатилетней давности.
>>
>
> я визуально помню, что были сообщения про "Illegal Instruction"
> при запуске nginx, сейчас порылся в архиве рассылки... причина
> "Illegal Instruction" там была другая, падал он не из-за cpuid:
>
> http://forum.nginx.org/read.**php?21,35305,35305
>
>
>
> On 15.10.2013 21:07, Maxim Dounin wrote:
>
> >> вопросы про 486 процессор без cpuid периодически возникают.
>
> > Я так других случаев подобных вопросов - не помню ни одного, и
> > поиском тоже не находится.  Если покажешь пальцем - будет хорошо.
>
> именно про cpuid и 386/486 процессор не покажу. не смог сейчас найти.
> но подозреваю, что попытки запустить nginx на 386/486 были и раньше.
>
>
> > Пока что мне кажется, что более продуктивным будет не заниматься
> > некро^Wархеологией.
>
> скорее всего да. не буду спорить с разработчиками nginx, вам виднее.
> хотя у меня до сих пор дома стоит комп с CPU 386DX 40 MHz, 4 MB RAM.
> - просто рука не поднимается выбросить, он ведь полностью рабочий...
>
> --
> Best regards,
>  Gena
>
>
> __**_
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/**mailman/listinfo/nginx-ru
>
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: nginx -t > Illegal instruction

2013-10-15 Пенетрантность Gena Makhomed

On 15.10.2013 21:01, Igor Sysoev wrote:

>> вопросы про 486 процессор без cpuid периодически возникают.


Что-то я не припоминаю в рассылке периодических вопросов
про процессоры двадцатилетней давности.


я визуально помню, что были сообщения про "Illegal Instruction"
при запуске nginx, сейчас порылся в архиве рассылки... причина
"Illegal Instruction" там была другая, падал он не из-за cpuid:

http://forum.nginx.org/read.php?21,35305,35305


On 15.10.2013 21:07, Maxim Dounin wrote:

>> вопросы про 486 процессор без cpuid периодически возникают.

> Я так других случаев подобных вопросов - не помню ни одного, и
> поиском тоже не находится.  Если покажешь пальцем - будет хорошо.

именно про cpuid и 386/486 процессор не покажу. не смог сейчас найти.
но подозреваю, что попытки запустить nginx на 386/486 были и раньше.

> Пока что мне кажется, что более продуктивным будет не заниматься
> некро^Wархеологией.

скорее всего да. не буду спорить с разработчиками nginx, вам виднее.
хотя у меня до сих пор дома стоит комп с CPU 386DX 40 MHz, 4 MB RAM.
- просто рука не поднимается выбросить, он ведь полностью рабочий...

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: nginx -t > Illegal instruction

2013-10-15 Пенетрантность Maxim Dounin
Hello!

On Tue, Oct 15, 2013 at 08:36:26PM +0300, Gena Makhomed wrote:

> On 15.10.2013 20:06, Sergey Kandaurov wrote:
> 
> >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;
> >+}
> 
> есть лучший вариант - стандартный и документированный способ
> проверить, поддерживает __i386__ процессор команду cpuid или нет:
> 
> http://wiki.osdev.org/CPUID
> 
> такой патч был бы более универсальным и более полезным.
> вопросы про 486 процессор без cpuid периодически возникают.

Я так других случаев подобных вопросов - не помню ни одного, и 
поиском тоже не находится.  Если покажешь пальцем - будет хорошо.

Пока что мне кажется, что более продуктивным будет не заниматься 
некро^Wархеологией.

-- 
Maxim Dounin
http://nginx.org/en/donation.html

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: nginx -t > Illegal instruction

2013-10-15 Пенетрантность Igor Sysoev
On Oct 15, 2013, at 21:36 , Gena Makhomed wrote:

> есть лучший вариант - стандартный и документированный способ
> проверить, поддерживает __i386__ процессор команду cpuid или нет:
> 
> http://wiki.osdev.org/CPUID
> 
> такой патч был бы более универсальным и более полезным.
> вопросы про 486 процессор без cpuid периодически возникают.

Что-то я не припоминаю в рассылке периодических вопросов
про процессоры двадцатилетней давности.


-- 
Igor Sysoev
http://nginx.com
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: nginx -t > Illegal instruction

2013-10-15 Пенетрантность Gena Makhomed

On 15.10.2013 20:06, Sergey Kandaurov wrote:


diff -r 5483d9e77b32 src/core/ngx_cpuinfo.c
--- a/src/core/ngx_cpuinfo.cWed Oct 02 15:07:17 2013 +0400
+++ b/src/core/ngx_cpuinfo.cTue 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;
+}


есть лучший вариант - стандартный и документированный способ
проверить, поддерживает __i386__ процессор команду cpuid или нет:

http://wiki.osdev.org/CPUID

такой патч был бы более универсальным и более полезным.
вопросы про 486 процессор без cpuid периодически возникают.

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: nginx -t > Illegal instruction

2013-10-15 Пенетрантность Sergey Kandaurov
On Oct 15, 2013, at 7:39 PM, Maxim Dounin  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=0xb950) 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=0xb950) 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.cWed Oct 02 15:07:17 2013 +0400
+++ b/src/core/ngx_cpuinfo.cTue 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
pluk...@nginx.com



___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: nginx -t > Illegal instruction

2013-10-15 Пенетрантность Maxim Dounin
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=0xb950) 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=0xb950) 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;


-- 
Maxim Dounin
http://nginx.org/en/donation.html

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

nginx -t > Illegal instruction

2013-10-15 Пенетрантность Sergey Talchuk
 write_events = 0x0, old_cycle =
0x0, conf_file = {len = 31, data = 0x80af0e0

"/mnt/C/sys/etc/nginx/nginx.conf"}, conf_param = {len = 0, data = 0x0},
conf_prefix = {len = 21,
data = 0x80af0e0 "/mnt/C/sys/etc/nginx/nginx.conf"}, prefix = {len =
23, data = 0x80af0b6 "/mnt/C/sys/share/nginx/"}, lock_file = {len = 0,

data = 0x0}, hostname = {len = 0, data = 0x0}}
ccf = (ngx_core_conf_t *) 0x0
#4  0x40100b49 in __uClibc_main () from /lib/libc.so.0
No symbol table info available.

===

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

===
$ nginx -t
Illegal instruction


$ strace nginx -t
execve("/usr/sbin/nginx", ["nginx", "-t"], [/* 31 vars */]) = 0
old_mmap(NULL, 20, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0xb90c) = 0x40005000
stat("/etc/ld.so.cache", 0xb874)= -1 ENOENT (No such file or
directory)
open("/lib/libcrypto.so.0.9.7", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/libcrypto.so.0.9.7", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/usr/lib/libcrypto.so.0.9.7", O_RDONLY) = 4
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0xb90c) = 0x40006000
read(4,
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\266\2\0004\0\0\0"...,
4096) = 4096
old_mmap(NULL, 876544, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0xb90c) = 0x40007000
old_mmap(0x40007000, 783880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 4,
0xb90c) = 0x40007000
old_mmap(0x400c7000, 73020, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4,
0xb90c000bf000) = 0x400c7000
old_mmap(0x400d9000, 14264, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0xb90c) = 0x400d9000
close(4)= 0
munmap(0x40006000, 4096)= 0
open("/lib/libc.so.0", O_RDONLY)= 4
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0xb90c) = 0x40006000
read(4,
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\377\0\0004\0\0\0"...,
4096) = 4096
old_mmap(NULL, 606208, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0xb90c) = 0x400dd000
old_mmap(0x400dd000, 574824, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 4,
0xb90c) = 0x400dd000
old_mmap(0x4016a000, 4488, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4,
0xb90c0008d000) = 0x4016a000
old_mmap(0x4016c000, 19256, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0xb90c) = 0x4016c000
close(4)= 0
munmap(0x40006000, 4096)= 0
open("/lib/libdl.so.0", O_RDONLY)   = 4
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0xb90c) = 0x40006000
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0
\7\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 12288, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0xb90c) = 0x40171000
old_mmap(0x40171000, 4820, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 4,
0xb90c) = 0x40171000
old_mmap(0x40173000, 1052, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4,
0xb90c1000) = 0x40173000
close(4)= 0
munmap(0x40006000, 4096)= 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo
...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo
...}) = 0
brk(0)  = 0x80ccaa0
brk(0x80cdaa0)  = 0x80cdaa0
brk(0x80ce000)  = 0x80ce000
gettimeofday({1381849325, 873891}, NULL) = 0
open("/etc/TZ", O_RDONLY)   = 4
read(4, "FET-3\n", 68)  = 6
read(4, "", 62) = 0
close(4)= 0
getpid()= 10038
open("/mnt/C/sys/var/nginx/log/error.log",
O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, 0644) = 4
uname({sys="Linux", node="myhost", ...})  = 0
_sysctl({{CTL_KERN, KERN_RTSIGMAX}, 2, 0x80cca54, 4, (nil), 0}) = 0
--- SIGILL (Illegal instruction) @ 0 (0) ---
+++ killed by SIGILL +++
Illegal instruction
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru