[RFC/RFA] (testsuite/Ada) Add gdb_compile_ada

Joel Brobecker
2004-02-24T19:56:17Z

[-- Attachment #1: Type: text/plain, Size: 2023 bytes --]

Hello,

Hmmm, dejagnu is still quite obscure for me, so I don't think I'll come
up with the perfect universal solution to add support for Ada testcases
right from the start... So instead I'll proceed tiny steps at a time...

First step: Being able to build most Ada programs. Let's first restrict
ourselves to Ada-only programs. Such a program necessarily have its
main program written in Ada. With GNAT, this main program must be
located in its own file. And to build the entire application, one
usually does:

% gnatmake -g <filename>

where <filename> is the name of the file containing the main subprogram.
The extension may be omitted. Dependencies are automatically handled
by gnatmake.

In this patch, I suggest we defined a new function gdb_compile_ada in
lib/gdb.exp which will allow us to build Ada programs using the command
above.

I have a question: I am uncertain as to how cross targets are handled.
Suppose we built a powerpc-elf debugger. How does the testsuite know
which compiler to use. Does it have so machinery that will translate
gcc into powerpc-elf-gcc by default? Would the same apply to gnatmake
in gdb_compile_ada via target_compile?

In the medium term, we will want to improve gdb_compile_ada to allow
the testsuite to use different runtimes (we have sjlj exceptions vs
ZCX exceptions, longcall vs no-longcall, shared vs static) or different
options (we want to use -mieee on tru64 for instance). I believe this
should be easily done via the options field.

As for multilanguage examples, I'll leave that for later as well, but
I don't think that would be too big a problem.

2004-02-24 J. Brobecker <brobecker@gnat.com>

* lib/gdb.exp (gdb_compile_ada): New function.

Tested on x86-linux. I used that function to build a simple program,
and I was able to debug it.

Comments? Or, one can always dream, ok to apply?

The next steps will involve creating the gdb.ada directory, update
the configure scripts, and add our first example (the null record one).

Thanks,
--
Joel

[-- Attachment #2: gdb.exp.diff --]
[-- Type: text/plain, Size: 744 bytes --]

Index: lib/gdb.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.49
diff -u -p -r1.49 gdb.exp
--- lib/gdb.exp 23 Feb 2004 19:27:46 -0000 1.49
+++ lib/gdb.exp 24 Feb 2004 19:50:10 -0000
@@ -1361,6 +1361,17 @@ proc gdb_compile_objc {source dest type
}
}

+proc gdb_compile_ada {source dest type options} {
+
+ lappend options "compiler=gnatmake"
+
+ set result [target_compile $source $dest $type $options]
+ if { $result != "" } {
+ verbose "target_compile failed: $result" 2
+ return "gdb_compile_ada failed: $result"
+ }
+}
+
proc send_gdb { string } {
global suppress_flag;
if { $suppress_flag } {