Hola a todos! Tengo un problema interesante... ojala alguien me pueda ayudar. El problema en cuestion es el siguiente:
Maquina de 64 bits. Programa compilado con gcc -m32. Librerias de 32 bits. Todo funciona OK hasta que aparece el nunca bien ponderado "Segmentation fault". En gdb tengo la siguiente informacion (entre otras cosas...): Program received signal SIGSEGV, Segmentation fault. 0x080495cd in generate_new_population () at subgalaxyfinder.c:763 763 GalA[numgal].BulgeMass = 0.0; (gdb) Es decir, se me cae en una asignacion, asi de simple. Si intento hacer una asignacion directamente con memcpy(3), tambien cae. strace no arroja nada peculiar. Si borro una instruccion o agrego otra, eventualmente se cae en alguna. El programa consume (es variable) a lo mas ~600 MB en RAM. En la maquina tengo 8 GB de RAM + 2 de swap. Respecto a los limites de recursos, si uso tcsh obtengo: geryon16 23:52>limit cputime unlimited filesize unlimited datasize unlimited stacksize unlimited coredumpsize 0 kbytes memoryuse unlimited vmemoryuse unlimited descriptors 1024 memorylocked 32 kbytes maxproc 71680 geryon16 23:52> Si uso bash, obtengo: bash-3.1$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited max nice (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 71680 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 max rt priority (-r) 0 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) 71680 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited Por lo que el problema tampoco va en el limite de recursos que poseo para correr mis procesos. He buscado en internet, pero me resulta un poco dificil encontrar alguna respuesta. He impreso las direcciones de memoria de las variables a las cuales les asigno valor y son validas. Dentro de gdb tambien puedo hacer la asignacion de valores con el comando interno de "set" de gdb. Mi apuesta es que hay algun problema ahi de interpretacion de los programas de 32 bits dentro del sistema operativo de 64. El sistema: CentOS 5, 2.6.18-8.el5, x86_64. Si alguien ha tenido algun problema similar, por favor cuentenme para saber por donde puede ir el mio y poder solucionarlo lo antes posible. He probado tambien corriendo el programa con linux32, y nada de nada, igual se cae, sin informacion de debugging para mas parto. Cualquier respuesta es bienvenida! Saludos! -- Rodrigo Tobar Carrizo http://csrg.inf.utfsm.cl/~rtobar ACS-UTFSM Technical Leader +56 9 78073439 Linux User #399271 From [EMAIL PROTECTED] Tue Apr 15 04:36:55 2008 From: [EMAIL PROTECTED] ([EMAIL PROTECTED]) Date: Tue Apr 15 04:41:07 2008 Subject: Aplicacion 32bits en maquina de 64 In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> Hola, On Tue, 15 Apr 2008, Rodrigo Javier Tobar Carrizo wrote: > Hola a todos! > > Tengo un problema interesante... ojala alguien me pueda ayudar. El problema > en cuestion es el siguiente: > > Maquina de 64 bits. Programa compilado con gcc -m32. Librerias de 32 bits. > Todo funciona OK hasta que aparece el nunca bien ponderado "Segmentation > fault". En gdb tengo la siguiente informacion (entre otras cosas...): > Alguna razon para compilar en 32 bits y no en 64? Si es un codigo numerico, como parece, los registros extra de los 64 bits probablemente ayudaran al rendimiento. > Program received signal SIGSEGV, Segmentation fault. > 0x080495cd in generate_new_population () at subgalaxyfinder.c:763 > 763 GalA[numgal].BulgeMass = 0.0; > (gdb) > > Es decir, se me cae en una asignacion, asi de simple. Si intento hacer una > asignacion directamente con memcpy(3), tambien cae. strace no arroja nada > peculiar. Si borro una instruccion o agrego otra, eventualmente se cae en > alguna. El programa consume (es variable) a lo mas ~600 MB en RAM. En la > maquina tengo 8 GB de RAM + 2 de swap. Que te dice que es efectivamente un problema de los 32/64 bits? La asignacion que estas haciendo accede un arreglo y luego un miembro de una clase, esas cosas perfectamente pueden dar un segmentation fault "legitimo" (un indice fuera del tama~no del arreglo). Intenta correr tu codigo dentro de valgrind (con la herramienta por defecto: memcheck), eso te dara mas informacion de donde puede estar el problema y si efectivamente tiene que ver con los 32 bits. Saludos, Xavier From [EMAIL PROTECTED] Tue Apr 15 08:36:24 2008 From: [EMAIL PROTECTED] (Alvaro Herrera) Date: Tue Apr 15 08:36:35 2008 Subject: Aplicacion 32bits en maquina de 64 In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> Rodrigo Javier Tobar Carrizo escribió: > Program received signal SIGSEGV, Segmentation fault. > 0x080495cd in generate_new_population () at subgalaxyfinder.c:763 > 763 GalA[numgal].BulgeMass = 0.0; > (gdb) > > Es decir, se me cae en una asignacion, asi de simple. Esto no es "simplemente una asignacion" -- estas dereferenciando el puntero GalA. Quizas GalA es nulo, o bien GalA[numgal] apunta mas alla del fin de la memoria. Fijate cuanto valen GalA y numgal en ese punto. -- Alvaro Herrera Valdivia, Chile ICBM: S 39º 48' 55.3", W 73º 15' 24.7" "El sentido de las cosas no viene de las cosas, sino de las inteligencias que las aplican a sus problemas diarios en busca del progreso." (Ernesto Hernández-Novich) From [EMAIL PROTECTED] Tue Apr 15 12:50:50 2008 From: [EMAIL PROTECTED] (Rodrigo Javier Tobar Carrizo) Date: Tue Apr 15 12:51:00 2008 Subject: Aplicacion 32bits en maquina de 64 In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> Alvaro Herrera escribió: > Rodrigo Javier Tobar Carrizo escribió: > >> Program received signal SIGSEGV, Segmentation fault. >> 0x080495cd in generate_new_population () at subgalaxyfinder.c:763 >> 763 GalA[numgal].BulgeMass = 0.0; >> (gdb) >> >> Es decir, se me cae en una asignacion, asi de simple. > > Esto no es "simplemente una asignacion" -- estas dereferenciando el > puntero GalA. Quizas GalA es nulo, o bien GalA[numgal] apunta mas alla > del fin de la memoria. > > Fijate cuanto valen GalA y numgal en ese punto. Si, por supuesto que lo hice... por eso hice todo el pasteleo de revisar. GalA es un puntero valido, y numgal esta dentro del scope del arreglo. De hecho, si le hago un printf funciona, o, como mencione tambien, si dentro de gdb hago un "set GalA[numgal] = 0", tambien funciona. Por eso me resulta raro. Saludos! -- Rodrigo Tobar Carrizo http://csrg.inf.utfsm.cl/~rtobar CSAT Project Leader +56 9 78073439 Linux User #399271 From [EMAIL PROTECTED] Tue Apr 15 12:56:03 2008 From: [EMAIL PROTECTED] (Rodrigo Javier Tobar Carrizo) Date: Tue Apr 15 12:56:09 2008 Subject: Aplicacion 32bits en maquina de 64 In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> [EMAIL PROTECTED] escribió: > Hola, > > On Tue, 15 Apr 2008, Rodrigo Javier Tobar Carrizo wrote: > >> Hola a todos! >> >> Tengo un problema interesante... ojala alguien me pueda ayudar. El >> problema en cuestion es el siguiente: >> >> Maquina de 64 bits. Programa compilado con gcc -m32. Librerias de 32 >> bits. Todo funciona OK hasta que aparece el nunca bien ponderado >> "Segmentation fault". En gdb tengo la siguiente informacion (entre >> otras cosas...): >> > > Alguna razon para compilar en 32 bits y no en 64? Si es un codigo > numerico, como parece, los registros extra de los 64 bits probablemente > ayudaran al rendimiento. Si, es probable... pero el programa es grande, hay lectura y escritura de archivos, y muuuuuchas declaraciones. Entre tanta cosa, el cambio de que un long pese 4 bytes u 8 bytes afecta. Por eso quiero tratar de mantener el programa con 32 bits. >> Program received signal SIGSEGV, Segmentation fault. >> 0x080495cd in generate_new_population () at subgalaxyfinder.c:763 >> 763 GalA[numgal].BulgeMass = 0.0; >> (gdb) >> >> Es decir, se me cae en una asignacion, asi de simple. Si intento hacer >> una asignacion directamente con memcpy(3), tambien cae. strace no >> arroja nada peculiar. Si borro una instruccion o agrego otra, >> eventualmente se cae en alguna. El programa consume (es variable) a lo >> mas ~600 MB en RAM. En la maquina tengo 8 GB de RAM + 2 de swap. > > Que te dice que es efectivamente un problema de los 32/64 bits? La > asignacion que estas haciendo accede un arreglo y luego un miembro de > una clase, esas cosas perfectamente pueden dar un segmentation fault > "legitimo" (un indice fuera del tama~no del arreglo). Alvaro me pregunto lo mismo. Se me olvido resaltarlo en el primer mensaje, pero ambos (GalA como puntero, y numgal como indice) son valores legitimos. > Intenta correr tu codigo dentro de valgrind (con la herramienta por > defecto: memcheck), eso te dara mas informacion de donde puede estar el > problema y si efectivamente tiene que ver con los 32 bits. No se me habia ocurrido, lo voy a hacer a ver si es que sale algo interesante. > Saludos, > > Xavier Saludos! -- Rodrigo Tobar Carrizo http://csrg.inf.utfsm.cl/~rtobar CSAT Project Leader +56 9 78073439 Linux User #399271 From [EMAIL PROTECTED] Tue Apr 15 13:00:19 2008 From: [EMAIL PROTECTED] (Miguel Oyarzo O.) Date: Tue Apr 15 13:00:34 2008 Subject: Aplicacion 32bits en maquina de 64 In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> At 00:02 15/04/2008, Rodrigo Javier Tobar Carrizo wrote: >Hola a todos! > >Tengo un problema interesante... ojala alguien me pueda ayudar. El >problema en cuestion es el siguiente: > >Maquina de 64 bits. Programa compilado con gcc -m32. Librerias de 32 bits. >Todo funciona OK hasta que aparece el nunca bien ponderado "Segmentation >fault". En gdb tengo la siguiente informacion (entre otras cosas...): > >Program received signal SIGSEGV, Segmentation fault. >0x080495cd in generate_new_population () at subgalaxyfinder.c:763 >763 GalA[numgal].BulgeMass = 0.0; >(gdb) > >(* ... *) >Si alguien ha tenido algun problema similar, por favor cuentenme para >saber por donde puede ir el mio y poder solucionarlo lo antes posible. He >probado tambien corriendo el programa con linux32, y nada de nada, igual >se cae, sin informacion de debugging para mas parto. > >Cualquier respuesta es bienvenida! > >Saludos! >-- >Rodrigo Tobar Carrizo http://csrg.inf.utfsm.cl/~rtobar >ACS-UTFSM Technical Leader +56 9 78073439 Una vez tuve un problema mas o menos parecido y el Segmentation fault aparecia en los momentos menos apropiados y sin ningun patron aparente. Investigue todo lo que se me ocurrio (incluyendo cambios en la BIOS), pero al final mire los pines de la RAM y uno de los modulos tenia el penultimo quemado (era una Blitz, Value plus de 512MB). Al cambiarlo nunca mas fallo el S.O. No pierdes nada con probar lo mismo que estas haciendo pero con menos modulos de RAM para descartar. Saludos, Miguel Oyarzo Austro Internet S.A. Punta Arenas