This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Profiling problem with newlib


On 25/11/09 02:25 PM, Joel Nygren wrote:
Hello, I have some problems with profiling. I have compiled and
installed newlib.

cd objdir/
../newlib-1.17.0/configure --disable-multilib --with-newlib
--prefix=<installdir>
make
make install

Then I compile my programs with:

/opt/gcc-4.4.1/lib/gcc -nostdlib
<installdir>/i686-pc-linux-gnu/lib/crt0.o HelloWorld.c -I
<installdir>/i686-pc-linux-gnu/include -L
<installdir>/i686-pc-linux-gnu/lib -lc -lm -o Helloworld

So far everything works fine. But when I add the parameter
-fprofile-arcs to gcc, I get this error:

/opt/gcc-4.4.1/lib/gcc/i686-pc-linux-gnu/4.4.1/libgcov.a(_gcov.o): In
function `gcov_version':
<gccSrcDir>/libgcc/../gcc/libgcov.c:141: undefined reference to `stderr'
/opt/gcc-4.4.1/lib/gcc/i686-pc-linux-gnu/4.4.1/libgcov.a(_gcov.o): In
function `__gcov_open':
<gccSrcDir>/libgcc/../gcc/gcov-io.c:92: undefined reference to
`__errno_location'
/opt/gcc-4.4.1/lib/gcc/i686-pc-linux-gnu/4.4.1/libgcov.a(_gcov.o): In
function `fstat':
/usr/include/sys/stat.h:467: undefined reference to `__fxstat'
/opt/gcc-4.4.1/lib/gcc/i686-pc-linux-gnu/4.4.1/libgcov.a(_gcov.o): In
function `gcov_exit':
<gccSrcDir>/libgcc/../gcc/libgcov.c:461: undefined reference to `stderr'
<gccSrcDir>/libgcc/../gcc/libgcov.c:323: undefined reference to `stderr'
<gccSrcDir>/libgcc/../gcc/libgcov.c:524: undefined reference to `stderr'
/opt/gcc-4.4.1/lib/gcc/i686-pc-linux-gnu/4.4.1/libgcov.a(_gcov.o): In
function `create_file_directory':
<gccSrcDir>/libgcc/../gcc/libgcov.c:111: undefined reference to
`__errno_location'
<gccSrcDir>/libgcc/../gcc/libgcov.c:113: undefined reference to `stderr'
/opt/gcc-4.4.1/lib/gcc/i686-pc-linux-gnu/4.4.1/libgcov.a(_gcov.o): In
function `gcov_exit':
<gccSrcDir>/libgcc/../gcc/libgcov.c:312: undefined reference to `stderr'
/opt/gcc-4.4.1/lib/gcc/i686-pc-linux-gnu/4.4.1/libgcov.a(_gcov.o): In
function `gcov_version':
<gccSrcDir>/libgcc/../gcc/libgcov.c:141: undefined reference to `stderr'
collect2: ld returned 1 exit status

It's like libgcov.a uses libc, but libc in newlib doesn't contain these
references. But I know that stderr is in libc, because I have used it in
my program and it works fine. I get the same errors when I use my built
in gcc, so I haven't done anything special with my gcc. Is there anyway
to use fprofile-arcs with newlib?


The problem is that libgcov.a has been built using the system glibc headers and you are running with newlib which won't work.


You need to build your libgcov.a with newlib headers which can be done by putting newlib into your gcc source tree and configuring --with-newlib (basically link libgloss and newlib as siblings of gcc in the top-level src directory). You might also need to specify --with-headers=xxxx where xxxx is the path to newlib's libc/include directory.

-- Jeff J.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]