From hjstein@bfr.co.il Fri Dec 19 15:35:35 1997
Date: 19 Nov 1997 11:55:52 +0200
From: "Harvey J. Stein"
To: Miguel A Sepulveda
Cc: axp-list@redhat.com
Subject: Re: Profiling under Linux Alpha ?
Miguel A Sepulveda escribe:
> Hola a todos.
>
> Estoy tratando de perfilar un programa hecho por mi en un Alpha
> con el kernel 2.0.30.
>
> Compilo los fuentes con -g2 -pg, y entonces ejecuto el programa.
> Cuando la ejecución finaliza, se supone que debe generar un fichero
> gmon.out. Sin embargo, el programa peta y genera un fichero coredump.
> El programa es correcto, porque sin la opción -pg funciona bien.
Yo tuve que hacer unas cuantas cosas con Redhat 4.2 para que funionara
el "profiling".
Existen dos parches que se han enviado a esta lista que arreglan problemas
del gcc. El primero (rth-gcc-2.7.2-970921.diff.gz) corrige un problema con
stack frames muy grandes. Parece ser que el segundo
(gcc-alpha-profiling-patch-2.7.2.1-toon-971001) arregla algunos problemas
con el profiling, pero yo no he comprobado que sea realmente necesario.
En cualquier caso, aquí están. También está un fichero RPM Spec para
construir el gcc. Deberías obtener gcc-2.7.2.1-2.src.rpm, descomprimirlo,
sustituir el fichero spec de /usr/src/redhat/SPECS por el que incluyo,
añadir los parches al directorio SOURCES, y recompilar gcc. Entonces
ya puedes instalar gcc-2.7.2.1-2c.alpha.rpm. Incluyo aqui un fichero
empaquetado ( tar | gzip | uuencode ) llamado gcc-new-patches.tar.gz.uue
que contiene los dos parches y el fichero spec.
También necesitarás parchear el gprof. El procedimiento es el mismo
que antes, pero ahora con binutils-2.7.0.2-4.src.rpm. Sin embargo,
el package de binutils incluye ficheros que dan problemas con los
ficheros de headers de la libc. Lo mejor es reemplazar el fichero
gprof manualmente después de compilarlo. Añado también el fichero
binutils-new-patches.tar.gz.uue.
Finalmente, tienes que parchear algunas librerías. Creo que esto es
lo más importante. El parche está en el mailing list archive:
http://www.redhat.com/support/mailing-lists/archives/axp-list/1997-March/0464.html
Te incluyo el parche aquí (pg-fixes.tar.gz.uue), así como un extracto
del mensaje de David Mosberger-Tang sobre cómo aplicarlo (bueno,
realmente casi todo el mensaje):
Algunos de vosotros habéis avisado de problemas con el profiling
en RH4.1. Aquí está un fichero uuencoded con tres ficheros objeto.
La salida del md5sum es:
0854f6609580506aeea2595d7729e27b gmon.po
e2e3cdbace223a162efe90048e0ed661 ieee_get_fp_control.po
8340b52dc581956131e038d3946ba81b ieee_set_fp_control.po
Después de extraer los ficheros, sustituirlos en vuestra libc_p.a.
Por ejemplo:
ar rv /usr/lib/libc_p.a gmon.po ieee_{s,g}et_fp_control.po
y entonces el profiling funcionará de nuevo. Atención con el gprof
del binutils-2.7, que tiene un bug que a veces causa un SIGFPE. Mirad
mi mail anterior para un parche que lo arregla.
Finalmente, hay aún un problema al juntar profiling con enlace
dinámico. Por ejemplo, con enlace dinámico, añadir -lm creará un
binario que dará el error: Segmentation fault. Mientras no se
encuentre una verdadera solución, deberemos añadir la opción -static.
Buena suerte,
--
Harvey J. Stein
Berger Financial Research
hjstein@bfr.co.il
Fichero de Patch
|