Question sprof on multiple shared libraries
Alberto Lutgardo
alutgard@brocade.com
Tue Apr 10 18:15:00 GMT 2001
Vince,
Thank you for pointing this out. It will not happen again.
Alberto
> -----Original Message-----
> From: Vince Guan
> Sent: Tuesday, April 10, 2001 5:59 PM
> To: Alberto Lutgardo; 'libc-alpha@sourceware.cygnus.com'
> Cc: Les Smith; Grant Erickson
> Subject: RE: Question sprof on multiple shared libraries
>
> Alberto,
>
> Please be mindful that it's not a good idea to expose other brocade
> employee's email addressed to the outside due to competitive reasons.
> You can put them under "bcc:" if you you really want to copy them.
>
> -Vince
>
> > -----Original Message-----
> > From: Alberto Lutgardo
> > Sent: Tuesday, April 10, 2001 1:59 PM
> > To: 'libc-alpha@sourceware.cygnus.com'
> > Cc: Les Smith; Grant Erickson; Vince Guan
> > Subject: Question sprof on multiple shared libraries
> >
> > I have a little program that calls two routines. Each routine
> > is defined on a separate shared library. I am enclosing the
> > program at the end of the message.
> > Questions:
> >
> > 1) can sprof support multiple shared libraries?
> > if so,
> > * what is the syntax for generating the profile(s) file
> > (LD_PROFILE=????)
> > * what is the syntax for sprof
> > 2) I was able to produce two profile files by executing the
> > program twice.
> > * LD_PROFILE=libhello.so
> > * ./usehello
> > * sprof libhello.so libhello.so.profile
> > * LD_PROFILE=libreadname.so
> > * ./usehello
> > * sprof libreadname.so libreadname.so.profile
> > 3) However, the output for step 2 does not represent what I
> > was expecting for libreadname.so
> >
> >
> > ================== output for libhello.so ====================
> > Flat profile:
> >
> > Each sample counts as 0.01 seconds.
> > % cumulative self self total
> > time seconds seconds calls us/call us/call name
> > 0.00 0.00 0.00 1 0.00 print_hello
> >
> > index % time self children called name
> >
> > 0.00 0.00 0/0 <UNKNOWN>
> > [0] 0.0 0.00 0.00 0 atexit@@GLIBC_2.0 [0]
> > 0.00 0.00 1/1 print_hello [1]
> > 0.00 0.00 0/0
> > atexit@@GLIBC_2.0 [0]
> > -----------------------------------------------
> > 0.00 0.00 1/1 <UNKNOWN>
> > [1] 0.0 0.00 0.00 1 print_hello [1]
> > -----------------------------------------------
> >
> > ===================== output from libreadname.so ====================
> >
> > Flat profile:
> >
> > Each sample counts as 0.01 seconds.
> > % cumulative self self total
> > time seconds seconds calls us/call us/call name
> >
> > index % time self children called name
> >
> > 0.00 0.00 0/0 <UNKNOWN>
> > [0] 0.0 0.00 0.00 0 atexit@@GLIBC_2.0 [0]
> > 0.00 0.00 0/0
> > atexit@@GLIBC_2.0 [0]
> > -----------------------------------------------
> >
> > 4) I am enclosing makefile and source files of the sample program
> >
> > I am enclosing the steps that I have followed:
> >
> > 1) make
> > cc -c usehello.c -o usehello.o
> > cc -fPIC -Wall -c libhello.c
> > cc -fPIC -Wall -c libreadname.c
> > cc -shared -Wl,-soname,libreadname.so -o ./libreadname.so
> > libreadname.o
> > cc -shared -Wl,-soname,libhello.so -o ./libhello.so libhello.o
> > cc -o usehello usehello.o -L. -lhello -L. -lreadname
> > 2) LD_PROFILE=libhello.so,libreadname.so
> > 3) ./usehello
> > The program execute normally but it does not generate the
> > profile file on /var/tmp
> > 4) I get the errors for the following commands
> > sprof libhello.so,libreadname.so libhello.so.profile
> > I get the following error:
> > sprof: failed to load shared object
> > `libhello.so,libreadname.so': No
> > such file or directory>
> >
> > OR
> >
> > sprof libhello.so libhello.so.profile
> > I get the following error:
> > sprof: cannot load profiling data: No such file or directory
> >
> > 5) I understand the second error - There were no profile file
> > on /var/tmp
> >
> > I am also enclosing the sample program
> >
> >
> > =========================== Makefile
> > ==================================
> >
> > #
> > # -Wall - Produces warning about questionable coding practice
> > # -Wl - pass the option list to the linker
> > # -fPIC - emit position-independent code, suitable for
> > dynamic linking,
> > # even if branches need large displacements.
> > # -shared - for SUN machines
> > #
> > LIBDIR = .
> >
> > usehello: usehello.o libhello.so libreadname.so
> > cc -o usehello usehello.o -L$(LIBDIR) -lhello
> > -L$(LIBDIR) -lreadname
> >
> > usehello.o: usehello.c
> > cc -c usehello.c -o usehello.o
> >
> > libhello.so: libhello.o libreadname.so
> > cc -shared -Wl,-soname,$@ -o $(LIBDIR)/libhello.so libhello.o
> >
> > libreadname.so: libreadname.o
> > cc -shared -Wl,-soname,$@ -o $(LIBDIR)/libreadname.so
> > libreadname.o
> >
> > libreadname.o: libreadname.c
> > cc -fPIC -Wall -c libreadname.c
> >
> > libhello.o: libhello.c
> > cc -fPIC -Wall -c libhello.c
> >
> > clean:
> > rm $(LIBDIR)/libhello.so
> > rm $(LIBDIR)/libreadname.so
> > rm -rf *.o
> >
> > ================================= libhello.c
> > ==========================
> > #include <stdio.h>
> >
> > void print_hello(char *s)
> > {
> > printf("Hello %s\n", s);
> > }
> >
> > ================================ libreadname.c
> > =========================
> >
> > #include <stdio.h>
> >
> > char b[512];
> >
> > char *read_name(void)
> > {
> >
> > printf("enter name: ");
> > b[0] = '\0';
> > if (fgets(b, sizeof (b), stdin) == NULL || b[0] == '\n') {
> > return (NULL);
> > }
> > printf("\n");
> > return ((char *)&b[0]);
> >
> > }
> >
> > =============================== usehello.c
> > =============================
> >
> > #include "libhello.h"
> > #include "libreadname.h"
> >
> > int main(void)
> > {
> > int i;
> > char *buffer;
> >
> > buffer = read_name();
> > for (i=0; i < 100; i++) {
> > print_hello(buffer);
> > }
> > return(0);
> > }
> >
> > ============================== libhello.h
> > ==============================
> > extern void print_hello(char *s);
> >
> > ============================== libreadname.h
> > ==========================
> >
> > extern char *read_name(void);
> >
> >
> >
> >
> >
More information about the Libc-alpha
mailing list