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