problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ? 
Author Message
 problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?

Hello
I have problems with Gnat.Traceback.Symbolic on Linux RedHAT 7.2 and Gnat
3.14p

the command issued is
gnatmake -f -funwind-tables -g test_trace.adb -bargs -E

I get ?? instead of unit names and line numbers

Note that everything works fine with the same command and Gnat 3.14p for
Sparc

Am I missing something obvious ? (other than Gnat 3.14p was not tested for
RedHAT 7.2,  I know that ...)

Thanks



Mon, 13 Sep 2004 19:17:25 GMT  
 problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?

Quote:

> I have problems with Gnat.Traceback.Symbolic on Linux RedHAT 7.2 and
> Gnat 3.14p

> the command issued is
> gnatmake -f -funwind-tables -g test_trace.adb -bargs -E

Not sure why you've said -funwind-tables ?

Quote:
> I get ?? instead of unit names and line numbers

> Note that everything works fine with the same command and Gnat 3.14p
> for Sparc

> Am I missing something obvious ? (other than Gnat 3.14p was not
> tested for RedHAT 7.2, I know that ...)

Someone was complaining about build problems on RH 7.2, related to
libaddr2line .. which is what converts addresses to line numbers
.. could be related.

My Slackware installations didn't come with libaddr2line, I copied one
from a binary GNAT installation.



Tue, 14 Sep 2004 03:03:12 GMT  
 problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?



Quote:

> > I have problems with Gnat.Traceback.Symbolic on Linux RedHAT 7.2 and
> > Gnat 3.14p

> > the command issued is
> > gnatmake -f -funwind-tables -g test_trace.adb -bargs -E

> Not sure why you've said -funwind-tables ?

I think I didn't use it with Gnat 3.13p and read somewhere that it is not
required.
But since Traceback doesn't work with Gnat 3.14 p , I followed what the Gnat
user's guide says (without success ...)

-E
Store tracebacks in exception occurrences when the target supports it. This
is the default with the zero cost exception mechanism. This option is
currently only supported on Solaris, Linux and Windows ix86. Under Solaris
and Linux you need to use explicitly the gcc flag -funwind-tables when
compiling every file in your application. See also the packages
GNAT.Traceback and GNAT.Traceback.Symbolic. Under Windows there is no
specific option to use to enable this feature but you must not
use -fomit-frame-pointer gcc option.



Sat, 18 Sep 2004 17:14:07 GMT  
 problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?

Quote:




> > > I have problems with Gnat.Traceback.Symbolic on Linux RedHAT 7.2 and
> > > Gnat 3.14p

> > > the command issued is
> > > gnatmake -f -funwind-tables -g test_trace.adb -bargs -E

> > Not sure why you've said -funwind-tables ?

> I think I didn't use it with Gnat 3.13p and read somewhere that it is not
> required.
> But since Traceback doesn't work with Gnat 3.14 p , I followed what the Gnat
> user's guide says (without success ...)

> -E
> Store tracebacks in exception occurrences when the target supports it. This
> is the default with the zero cost exception mechanism. This option is
> currently only supported on Solaris, Linux and Windows ix86. Under Solaris
> and Linux you need to use explicitly the gcc flag -funwind-tables when
> compiling every file in your application. See also the packages
> GNAT.Traceback and GNAT.Traceback.Symbolic. Under Windows there is no
> specific option to use to enable this feature but you must not
> use -fomit-frame-pointer gcc option.

I know I'm using Slackware (7.1) and home-compiled GNATso my mileage
will vary from yours, but I get eg

   procedure Trace is
      procedure R (Depth : Integer);
      procedure R (Depth : Integer) is
      begin
         if Depth = 0 then
            raise Constraint_Error;
         else
            R (Depth - 1);
         end if;
      end R;
   begin
      R (10);
   end Trace;

compilation (with 3.14a1):

   smaug[19]$ GNAT_PREFIX=/opt/3.14a1 gnatmake trace -f -g -bargs -E
   gcc -c -g trace.adb
   gnatbind -aO./ -E -I- -x trace.ali
   gnatlink -g trace.ali

execution:
   smaug[20]$ trace

   Execution terminated by unhandled exception
   Exception name: CONSTRAINT_ERROR
   Message: trace.adb:6
   Call stack traceback locations:
   0x8049217 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x8049242 0x80491c9 0x40030575

traceback:
   smaug[21]$ addr2line -e trace 0x8049217 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x804922b 0x8049242 0x80491c9 0x40030575
   /home/simon/tmp/trace.adb:6
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:8
   /home/simon/tmp/trace.adb:12
   /home/simon/tmp/b~trace.adb:95
   /home/simon/gcc-2.8.1/./frame.c:0



Sun, 19 Sep 2004 02:18:17 GMT  
 problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?
There is no problem with symbolic traceback on Linux with GNAT-3-14p,
in general.

There is, however, a small problem with some recent Linux distributions --
e.g., RedHat 7.2.

The problem is that there are two symbolic links
/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-fsu/adalib/libbfd-2.9.5.0.
22.so
and
/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-native/adalib/libbfd-2.9.5
.0.22.so

which link to /usr/lib/libbfd.so, which on RedHat 7.2 is a symbolic link to
libbfd-2.11.90.0.8.so

GNAT executables requiring symbolic traceback functionality that are built
with GNAT-3.14p will not work with  libbfd-2.11 -- they really require
libbfd-2.9, but the above chain of symbolic links causes the executable to
link to libbfd-2.11

Here are the steps I took to remedy the situation (for RedHat 7.2), doing
so in  such a way as to not disturb the environment for any executables
requiring libbfd-2.11:

1.  Copy libbfd-2.9.5.0.22 (e.g., from a RedHat 6.2 system) to
     /usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/

2.  Delete the symbolic links

/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-fsu/adalib/libbfd-2.9.5.0.
22.so
     and

/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-native/adalib/libbfd-2.9.5
.0.22.so

3.  Replace those two links with links to ../../libbfd-2.9.5.0.22.so
     (This assumes you have already added
     /usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib to
/etc/ld.so.conf)

4.  Execute the command ldconfig

5.  In each main program source code file add the following pragma:
     pragma Linker_Options

("/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/libbfd-2.9.5.0.22.so");

6.  Compile with a command like the following:
     gnatmake -i -g <main-program-name> -bargs -E \
    -cargs -gnatwl -funwind-tables -O3 -Wuninitialized -fstack-check

For what it's worth, I also use florist, so I moved the floristlib directory
to /usr/gnat/lib after building it.

Here is a small test program that will verify that symbolic tracebacks work,
following these instructions:

with Ada.Text_IO;
with GNAT.Traceback.Symbolic;
procedure Test_Traceback
is
   pragma Linker_Options
     ("/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/libbfd-2.9.5.0.22.so");
   File : Ada.Text_IO.File_Type;
begin
   Ada.Text_IO.Open
     (File => File,
      Name => "abcdefghijklmnopqrstuvwxyz",
      Mode => Ada.Text_IO.In_File);
exception
   when E: others =>
      Ada.Text_IO.Put_Line
        (Ada.Exceptions.Exception_Information (E) & ASCII.LF &
         "Symbolic call stack traceback locations:" & ASCII.LF &
         GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
end Test_Traceback;

I have been using gnat-3.14p since it became available on RedHat 6.2,
and 7.2, as well as Mandrake 7.1, with some very substantial programs
(one with 21 threads of execution) with excellent results.

David Hoos

Quote:
----- Original Message -----

Newsgroups: comp.lang.ada

Sent: Thursday, March 28, 2002 5:17 AM
Subject: problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?

> Hello
> I have problems with Gnat.Traceback.Symbolic on Linux RedHAT 7.2 and Gnat
> 3.14p

> the command issued is
> gnatmake -f -funwind-tables -g test_trace.adb -bargs -E

> I get ?? instead of unit names and line numbers

> Note that everything works fine with the same command and Gnat 3.14p for
> Sparc

> Am I missing something obvious ? (other than Gnat 3.14p was not tested for
> RedHAT 7.2,  I know that ...)

> Thanks

> _______________________________________________
> comp.lang.ada mailing list

> http://ada.eu.org/mailman/listinfo/comp.lang.ada



Sun, 19 Sep 2004 05:08:54 GMT  
 problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?
Thanks for the explanation.

Actually what I did was

1/ I copied libbfd-2.9.5.0.22.so in
/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1
2/ I added /usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1 in /etc/ld.so.conf
3/ I run ldconfig

I add
-largs /usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/libbfd-2.9.5.0.22.so
 to the gnatmake command
Everything is ok now without changing links or adding pragma linker_options
in the code
(Our code is common for several platforms and Ada compilers)



Quote:
> There is no problem with symbolic traceback on Linux with GNAT-3-14p,
> in general.

> There is, however, a small problem with some recent Linux distributions --
> e.g., RedHat 7.2.

> The problem is that there are two symbolic links

/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-fsu/adalib/libbfd-2.9.5.0.
Quote:
> 22.so
> and

/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-native/adalib/libbfd-2.9.5
Quote:
> .0.22.so

> which link to /usr/lib/libbfd.so, which on RedHat 7.2 is a symbolic link
to
> libbfd-2.11.90.0.8.so

> GNAT executables requiring symbolic traceback functionality that are built
> with GNAT-3.14p will not work with  libbfd-2.11 -- they really require
> libbfd-2.9, but the above chain of symbolic links causes the executable to
> link to libbfd-2.11

> Here are the steps I took to remedy the situation (for RedHat 7.2), doing
> so in  such a way as to not disturb the environment for any executables
> requiring libbfd-2.11:

> 1.  Copy libbfd-2.9.5.0.22 (e.g., from a RedHat 6.2 system) to
>      /usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/

> 2.  Delete the symbolic links

/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-fsu/adalib/libbfd-2.9.5.0.
Quote:
> 22.so
>      and

/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/rts-native/adalib/libbfd-2.9.5

- Show quoted text -

Quote:
> .0.22.so

> 3.  Replace those two links with links to ../../libbfd-2.9.5.0.22.so
>      (This assumes you have already added
>      /usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib to
> /etc/ld.so.conf)

> 4.  Execute the command ldconfig

> 5.  In each main program source code file add the following pragma:
>      pragma Linker_Options

> ("/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/libbfd-2.9.5.0.22.so");

> 6.  Compile with a command like the following:
>      gnatmake -i -g <main-program-name> -bargs -E \
>     -cargs -gnatwl -funwind-tables -O3 -Wuninitialized -fstack-check

> For what it's worth, I also use florist, so I moved the floristlib
directory
> to /usr/gnat/lib after building it.

> Here is a small test program that will verify that symbolic tracebacks
work,
> following these instructions:

> with Ada.Text_IO;
> with GNAT.Traceback.Symbolic;
> procedure Test_Traceback
> is
>    pragma Linker_Options

("/usr/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/libbfd-2.9.5.0.22.so");

- Show quoted text -

Quote:
>    File : Ada.Text_IO.File_Type;
> begin
>    Ada.Text_IO.Open
>      (File => File,
>       Name => "abcdefghijklmnopqrstuvwxyz",
>       Mode => Ada.Text_IO.In_File);
> exception
>    when E: others =>
>       Ada.Text_IO.Put_Line
>         (Ada.Exceptions.Exception_Information (E) & ASCII.LF &
>          "Symbolic call stack traceback locations:" & ASCII.LF &
>          GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
> end Test_Traceback;

> I have been using gnat-3.14p since it became available on RedHat 6.2,
> and 7.2, as well as Mandrake 7.1, with some very substantial programs
> (one with 21 threads of execution) with excellent results.

> David Hoos

> ----- Original Message -----

> Newsgroups: comp.lang.ada

> Sent: Thursday, March 28, 2002 5:17 AM
> Subject: problem with Gnat.Traceback.Symbolic on linux with Gnat 3.14p ?

> > Hello
> > I have problems with Gnat.Traceback.Symbolic on Linux RedHAT 7.2 and
Gnat
> > 3.14p

> > the command issued is
> > gnatmake -f -funwind-tables -g test_trace.adb -bargs -E

> > I get ?? instead of unit names and line numbers

> > Note that everything works fine with the same command and Gnat 3.14p for
> > Sparc

> > Am I missing something obvious ? (other than Gnat 3.14p was not tested
for
> > RedHAT 7.2,  I know that ...)

> > Thanks

> > _______________________________________________
> > comp.lang.ada mailing list

> > http://ada.eu.org/mailman/listinfo/comp.lang.ada



Sun, 19 Sep 2004 16:46:56 GMT  
 
 [ 6 post ] 

 Relevant Pages 

1. Problem using Gnat.Traceback.Symbolic.Symbolic_Traceback()

2. How to get a traceback in Gnat 3.14p

3. Problem with gnat-3.14p on Linux

4. Bug in GNAT.Traceback.Symbolic?

5. Requeue in GNAT 3.14p (Linux)

6. Looking for GNAT 3.14p for Alpha/Linux

7. Traceback on Gnat/Linux

8. Bug in GNAT.Socket.Check_Selector in GNAT 3.14 Linux runtime

9. tasking with GNAT 3.14p on windows

10. ANN: gnat-3.14p rpms available for Red Hat 7

11. Announce: HPUX-11 Binaries for GNAT-3.14p/3.15p Available (and HOWTO)

12. Pragma Import don't suppress intialization on access type with GNAT 3.14p

 

 
Powered by phpBB® Forum Software