Profiling doen werken op een Alpha

ArticleCategory:

SoftwareDevelopment

AuthorImage:

[Foto van de Auteur]

TranslationInfo:

original in en Harvey J. Stein

en to nl Guus Snijders

AboutTheAuthor:

Abstract:

In dit artikel presenteren we een e-mail waarin wordt uitgelegd hoe je profile mogelijk kunt maken op een Alpha.

ArticleIllustration:

[Illustratie]

ArticleBody:

 
From [email protected] Fri Dec 19 15:35:35 1997 
Date: 19 Nov 1997 11:55:52 +0200 
From: "Harvey J. Stein" <[email protected]> 
To: Miguel A Sepulveda <[email protected]> 
Cc: [email protected] 
Subject: Re: Profiling under Linux Alpha ? 

Miguel A Sepulveda <[email protected]> writes: 
 
> Hoi Allemaal, 
>  
> Ik probeer een programma van mij te profilen op mijn Alpha platform
> Kernel 2.0.30.
>  
> Ik heb de source gecompileerd met -g2 -pg, en vervolgens de executable
> uitgevoerd. Als de executable klaar is, zou het een gmon.out moeten
> genereren, maar in plaats daarvan crasht het programma en dumpt een 
> core. Het programma is in orde want zonder de -pg optie werkt het 
> gewoon goed.
 
Ik moest een paar dingen doen met RedHat 4.2 om profiling werkend te
krijgen.
 
Er zijn twee patches naar deze lijst gestuurd die problemen fixen in
gcc. De eerste (rth-gcc-2.7.2-970921.diff.gz) lost een probleem op met
grote stack frames. De tweede
(gcc-alpha-profiling-patch-2.7.2.1-toon-971001) zou een aantal gcc
profiling problemen moeten oplossen, maar ik ben er nog van overtuigd
dat dit eigenlijk nodig was.
 
In ieder geval, hier zijn ze, samen een RPM Spec bestand om gcc
te bouwen. Zorg dat je gcc-2.7.2.1-2.src.rpm hebt, pak deze uit en
vervang het spec bestand in /usr/src/redhat/SPECS met degene die 
hier bij zit, voeg de patches toe aan de SOURCES directory en 
hercompileer gcc. Dan kun je gcc-2.7.2.1-2c.alpha.rpm.  Ik voeg een
getarred, gzipped, uuencoded bestand (gcc-new-patches.tar.gz.uue) bij,
deze bebat de 2 patches & het spec bestand.
 
Je moet ook gprof patchen. Dezelfde procedure is van toepassing, maar
deze keer met binutils-2.7.0.2-4.src.rpm.  Het binutils pakket bevat
echter bestanden die conflicteren met de libc headers, dus je kunt het
beste proberen gprof met de hand te vervangen na het herbouwen. 
binutils-new-patches.tar.gz.uue zit ook bijgevoegd.
 
Ten slotte moet je nog wat libraries patchen. Dit is volgens mij de het
belangrijkste deel. De patch is te vinden in het mailing list archief:
 
   http://www.redhat.com/support/mailing-lists/archives/axp-list/1997-March/0464.html 
 
Voor het gemak, voeg de patch hierbij (pg-fixes.tar.gz.uue), 
alsmede een deel van bovenstaande bericht van David Mosberger-Tang 
(ok, eigenlijk het grootste deel van het bericht) over hoe deze toe
te passen:
 
   Sommigen rapporteerden problemen met profiling onder RH4.1. Hier is
   een uuencoded bestand van drie gerepareerde object bestanden. De
   md5sum uitvoer is:
 
   0854f6609580506aeea2595d7729e27b gmon.po 
   e2e3cdbace223a162efe90048e0ed661 ieee_get_fp_control.po 
   8340b52dc581956131e038d3946ba81b ieee_set_fp_control.po 
 
   Na het uitpakken van deze bestanden, plaatst je ze in je libc_p.a.
   Bijvoorbeeld:
 
   ar rv /usr/lib/libc_p.a gmon.po ieee_{s,g}et_fp_control.po 
 
   en dan zou profiling weer moeten werken. Merk op dat de binutils-2.7
   gprof een bug heeft die soms een SIGFPE opleverd. Zie mijn eerdere
   mail voor een patch die dit repareert.
 
   Ten slotten is er nog steeds een probleem met het mixen van profiling
   en dynamisch linken. Met dynamisch linken bijvoorbeeld, zorgt -lm voor
   een binary die segfault. Voor het moment zou de -static flag dit moeten
   omzeilen (tot er een echte oplossing is gevonden).
 
Veel succes, 
 
--  
Harvey J. Stein 
Berger Financial Research 
[email protected] 
  
Patch file (article11-atach.txt)