Aplicacion 32bits en maquina de 64
Rodrigo Javier Tobar Carrizo
rtobar en alumnos.inf.utfsm.cl
Mar Abr 15 00:02:09 CLT 2008
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
Más información sobre la lista de distribución Linux