* RE: [RFC] adding gdb.pascal subdir
[not found] ` <20070705143246.GA4958@caradoc.them.org>
@ 2007-07-17 22:17 ` Pierre Muller
2007-07-18 9:16 ` 'Daniel Jacobowitz'
0 siblings, 1 reply; 13+ messages in thread
From: Pierre Muller @ 2007-07-17 22:17 UTC (permalink / raw)
To: 'Daniel Jacobowitz', gdb-patches; +Cc: gpc
Hi Daniel,
sorry to have let you wait so long,
but I completely missed your email
(I have a mailbox rule that puts everything that
contains gpc emails into a special folder
and, despite looking regularly on my gdb
folder, I missed your email for two weeks as
I did not check the gpc mailbox).
I just added some comment in pascal.exp
and modified hello.exp so that
gpc and fpc only fail once. It is difficult
to completely remove the failures present
in the tests, as they are due to two different problems
1) the gpc failure comes from the fact that
'start' command ends up in some implicit code
which does not contain the main source file name.
A possible work-around would be to fix breakpoints at specific
positions in the file, but this would require to re-edit hello.exp
each time someone changes hello.pas source.
I have no idea if this is acceptable.
2) the fpc failure comes from the implicit "up-casing" made inside
Free Pascal for all procedure/function names.
I had a specific patch, that I used in the libgdb generation for
our IDE that tried also a up-cased version if the as given
pattern did not match any function, but it seems very Free Pascal specific.
The other failure is common to gpc and fpc:
(gdb) ptyp 'a simple string' ^M
gives a strange error:
No symbol table is loaded: use "file" command.
I have no idea why this happens.
Otherwise all your modifications seem very fine to me,
Pierre Muller
2007-07-17 Pierre Muller <muller@ics.u-strasbg.fr>
Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (ALL_SUBDIRS): Add gdb.pascal.
* configure.ac (AC_OUTPUT): Add gdb.pascal/Makefile.
* configure: Regenerated.
* gdb.pascal/Makefile.in, gdb.pascal/hello.exp,
gdb.pascal/hello.pas,
gdb.pascal/types.exp, lib/pascal.exp: New files.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/Makefile.in,v
retrieving revision 1.18
diff -u -p -r1.18 Makefile.in
--- Makefile.in 27 Mar 2007 18:09:35 -0000 1.18
+++ Makefile.in 17 Jul 2007 14:01:57 -0000
@@ -37,7 +37,7 @@ RPATH_ENVVAR = @RPATH_ENVVAR@
ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
gdb.dwarf2 \
gdb.fortran gdb.server gdb.java gdb.mi \
- gdb.objc gdb.threads gdb.trace gdb.xml \
+ gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
$(SUBDIRS)
EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
Index: configure
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure,v
retrieving revision 1.23
diff -u -p -r1.23 configure
--- configure 23 Jan 2007 17:11:54 -0000 1.23
+++ configure 17 Jul 2007 14:02:00 -0000
@@ -3102,7 +3102,7 @@ done
-
ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
+
ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile
gdb.xml/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure.ac,v
retrieving revision 1.6
diff -u -p -r1.6 configure.ac
--- configure.ac 23 Jan 2007 17:11:55 -0000 1.6
+++ configure.ac 17 Jul 2007 14:02:00 -0000
@@ -115,6 +115,6 @@ AC_OUTPUT([Makefile \
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
gdb.fortran/Makefile gdb.server/Makefile \
- gdb.java/Makefile gdb.mi/Makefile \
- gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
+ gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile \
+ gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile \
gdb.xml/Makefile])
Index: gdb.pascal/Makefile.in
===================================================================
RCS file: gdb.pascal/Makefile.in
diff -N gdb.pascal/Makefile.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/Makefile.in 17 Jul 2007 14:02:02 -0000
@@ -0,0 +1,24 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = hello/hello
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+ @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+ -find . -name '*.o' -print | xargs rm -f
+ -find . -name '*.ali' -print | xargs rm -f
+ -find . -name 'b~*.ad[sb]' -print | xargs rm -f
+ -rm -f *~ a.out xgdb *.x *.ci *.tmp
+ -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+ -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+ -rm -f $(MISCELLANEOUS) twice-tmp.c
+
+distclean maintainer-clean realclean: clean
+ -rm -f *~ core
+ -rm -f Makefile config.status config.log
+ -rm -f *-init.exp
+ -rm -fr *.log summary detail *.plog *.sum *.psum site.*
Index: gdb.pascal/hello.exp
===================================================================
RCS file: gdb.pascal/hello.exp
diff -N gdb.pascal/hello.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.exp 17 Jul 2007 14:02:02 -0000
@@ -0,0 +1,64 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+load_lib "pascal.exp"
+
+set testfile "hello"
+set srcfile ${srcdir}/${subdir}/${testfile}.pas
+set binfile ${objdir}/${subdir}/${testfile}
+
+if {[gdb_compile_pascal "${srcfile}" "${binfile}" executable [list debug ]]
!= "" } {
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+# Verify that "start" lands inside the right procedure.
+if { [gdb_start_cmd] < 0 } {
+ untested start
+ return -1
+}
+gdb_test "" \
+ ".* at .*hello.pas.*" \
+ "start"
+if { [gdb_breakpoint "print_hello"] } {
+ pass "setting breakpoint at print_hello"
+ set breakpointname "print_hello"
+} elseif { [gdb_breakpoint "PRINT_HELLO"] } {
+ pass "setting breakpoint at PRINT_HELLO"
+ set breakpointname "PRINT_HELLO"
+}
+
+gdb_test "cont" \
+ "Breakpoint .*, ${breakpointname}.* at .*hello.pas.*" \
+ "cont"
+gdb_test "print st" \
+ ".* = ''.*" \
+ "Empty string check"
+gdb_test "next" \
+ ".*" \
+ "Going to next line"
+gdb_test " print st" \
+ ".* = 'Hello, world!'.*" \
+ "String after assignment check"
Index: gdb.pascal/hello.pas
===================================================================
RCS file: gdb.pascal/hello.pas
diff -N gdb.pascal/hello.pas
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.pas 17 Jul 2007 14:02:02 -0000
@@ -0,0 +1,14 @@
+program hello;
+
+var
+ st : string;
+
+procedure print_hello;
+begin
+ st:='Hello, world!';
+ writeln(st);
+end;
+
+begin
+ print_hello;
+end.
Index: gdb.pascal/types.exp
===================================================================
RCS file: gdb.pascal/types.exp
diff -N gdb.pascal/types.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/types.exp 17 Jul 2007 14:02:02 -0000
@@ -0,0 +1,109 @@
+# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was adapted from old Chill tests by Stan Shebs
+# (shebs@cygnus.com).
+# Adapted to pascal by Pierre Muller
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+set prms_id 0
+set bug_id 0
+
+# Set the current language to pascal. This counts as a test. If it
+# fails, then we skip the other tests.
+
+proc set_lang_pascal {} {
+ global gdb_prompt
+
+ if [gdb_test "set language pascal" ""] {
+ return 0;
+ }
+
+ if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+proc test_integer_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various decimal values.
+ # Should be integer*4 probably.
+ gdb_test "pt 123" "type = int"
+}
+proc test_character_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a'" "type = char"
+}
+
+proc test_string_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a simple string'" "type = string"
+}
+
+proc test_logical_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test the only possible values for a logical, TRUE and FALSE.
+
+ gdb_test "pt TRUE" "type = bool"
+ gdb_test "pt FALSE" "type = bool"
+}
+
+proc test_float_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various floating point formats
+
+ # this used to guess whether to look for "real*4" or
+ # "real*8" based on a target config variable, but noone
+ # maintained it properly.
+
+ gdb_test "pt .44" "type = double"
+ gdb_test "pt 44.0" "type = double"
+ gdb_test "pt 10e20" "type = double"
+ gdb_test "pt 10E20" "type = double"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_pascal] then {
+ test_integer_literal_types_accepted
+ test_logical_literal_types_accepted
+ test_character_literal_types_accepted
+ test_string_literal_types_accepted
+ test_float_literal_types_accepted
+} else {
+ warning "$test_name tests suppressed." 0
+}
Index: lib/pascal.exp
===================================================================
RCS file: lib/pascal.exp
diff -N lib/pascal.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lib/pascal.exp 17 Jul 2007 14:02:02 -0000
@@ -0,0 +1,154 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+load_lib libgloss.exp
+
+set pascal_init_done 0
+
+# This procedure looks for a suitable pascal compiler
+# For now only GNU pascal compiler and Free Pascal compiler
+# are searched.
+# First, environment variable GPC is checked
+# if present, GPC compiler is assumed to be the value of
+# that environment variable.
+# Second, environment variable FPC is checked
+# if present, Free Pascal compiler is assumed to be the value of
+# that environment variable.
+# Third, gpc executable is searched using `which gpc`
+# Lastly, fpc executable is searched using `which fpc`
+# Using environment variable allows to force
+# which compiler is used in testsuite
+
+proc pascal_init {} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+ global gpc_compiler
+ global fpc_compiler
+ global env
+
+ if { $pascal_init_done == 1 } {
+ return
+ }
+
+ set pascal_compiler_is_gpc 0
+ set pascal_compiler_is_fpc 0
+ set gpc_compiler [transform gpc]
+ set fpc_compiler [transform fpc]
+
+ if ![is_remote host] {
+ if { [info exists env(GPC)] } {
+ set pascal_compiler_is_gpc 1
+ set gpc_compiler $env(GPC)
+ verbose -log "Assuming GNU Pascal ($gpc_compiler)"
+ } elseif { [info exists env(FPC)] } {
+ set pascal_compiler_is_fpc 1
+ set fpc_compiler $env(FPC)
+ verbose -log "Assuming Free Pascal ($fpc_compiler)"
+ } elseif { [which $gpc_compiler] != 0 } {
+ set pascal_compiler_is_gpc 1
+ verbose -log "GNU Pascal compiler found"
+ } elseif { [which $fpc_compiler] != 0 } {
+ set pascal_compiler_is_fpc 1
+ verbose -log "Free Pascal compiler found"
+ }
+ }
+ set pascal_init_done 1
+}
+
+proc gpc_compile {source dest type options} {
+ global gpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -c"
+ }
+
+ if { $type == "preprocess" } {
+ append add_flags " -E"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -S"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $gpc_compiler "-o $dest --automake
$add_flags $source"]
+ return $result
+}
+
+proc fpc_compile {source dest type options} {
+ global fpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -Cn"
+ }
+
+ if { $type == "preprocess" } {
+ return "Free Pascal can not preprocess"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -al"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $fpc_compiler "-o$dest $add_flags
$source"]
+ return $result
+}
+
+proc gdb_compile_pascal {source dest type options} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+
+ if { $pascal_init_done == 0 } {
+ pascal_init
+ }
+
+ if { $pascal_compiler_is_fpc == 1 } {
+ set result [fpc_compile $source $dest $type $options]
+ } elseif { $pascal_compiler_is_gpc == 1 } {
+ set result [gpc_compile $source $dest $type $options]
+ } else {
+ unsupported "No pascal compiler found"
+ return "No pascal compiler. Compilation failed."
+ }
+
+ if ![file exists $dest] {
+ unsupported "Pascal compilation failed: $result"
+ return "Pascal compilation failed."
+ }
+}
+
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC] adding gdb.pascal subdir
2007-07-17 22:17 ` [RFC] adding gdb.pascal subdir Pierre Muller
@ 2007-07-18 9:16 ` 'Daniel Jacobowitz'
2007-07-18 12:39 ` Pierre Muller
2007-09-07 22:16 ` [RFC] adding gdb.pascal subdir: updated version Pierre Muller
0 siblings, 2 replies; 13+ messages in thread
From: 'Daniel Jacobowitz' @ 2007-07-18 9:16 UTC (permalink / raw)
To: Pierre Muller; +Cc: gdb-patches, gpc
On Tue, Jul 17, 2007 at 04:22:26PM +0200, Pierre Muller wrote:
> A possible work-around would be to fix breakpoints at specific
> positions in the file, but this would require to re-edit hello.exp
> each time someone changes hello.pas source.
> I have no idea if this is acceptable.
Take a look at the testsuite function "gdb_get_line_number". You're
exactly right that fixing the breakpoints at specific positions is a
bad idea, but this way they can "float" along with the source.
> The other failure is common to gpc and fpc:
> (gdb) ptyp 'a simple string' ^M
> gives a strange error:
> No symbol table is loaded: use "file" command.
> I have no idea why this happens.
It is probably trying to call malloc to allocate the string.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [RFC] adding gdb.pascal subdir
2007-07-18 9:16 ` 'Daniel Jacobowitz'
@ 2007-07-18 12:39 ` Pierre Muller
2007-09-07 22:16 ` [RFC] adding gdb.pascal subdir: updated version Pierre Muller
1 sibling, 0 replies; 13+ messages in thread
From: Pierre Muller @ 2007-07-18 12:39 UTC (permalink / raw)
To: 'Daniel Jacobowitz'; +Cc: gdb-patches, gpc
>On Tue, Jul 17, 2007 at 04:22:26PM +0200, Pierre Muller wrote:
>> A possible work-around would be to fix breakpoints at specific
>> positions in the file, but this would require to re-edit hello.exp
>> each time someone changes hello.pas source.
>> I have no idea if this is acceptable.
>
>Take a look at the testsuite function "gdb_get_line_number". You're
>exactly right that fixing the breakpoints at specific positions is a
>bad idea, but this way they can "float" along with the source.
I tried to use that and it seems to work partially.
gpc seems to have problems in setting the correct position
for a breakpoint.
After 'break 10' and 'cont'
gdb ends up at line 11 :(
I suspect that this is not specific to gpc,
but it might be related to the fact that default optimizations
are too high, and that thus the debug information is
not completely reliable.
>> The other failure is common to gpc and fpc:
>> (gdb) ptyp 'a simple string' ^M
>> gives a strange error:
>> No symbol table is loaded: use "file" command.
>> I have no idea why this happens.
>
>It is probably trying to call malloc to allocate the string.
No, it must be something else:
if I first load the hello executable,
then it claims:
No symbol "a simple string" in current context.
This probably means that it is still looking for a
symbol instead of taking it for a constant string.
This is indeed a bug that should be fixed.
I get 3 errors for gpc and one for fpc
with the files below.
What should we do?
Comment out all failing test, or simplify
them so that they succeed?
Failing tests are good ways to
get things fixed, no?
If we remove all failing tests, chances are higher that
we will not fix them.
Pierre Muller
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/Makefile.in,v
retrieving revision 1.18
diff -u -p -r1.18 Makefile.in
--- Makefile.in 27 Mar 2007 18:09:35 -0000 1.18
+++ Makefile.in 18 Jul 2007 08:53:29 -0000
@@ -37,7 +37,7 @@ RPATH_ENVVAR = @RPATH_ENVVAR@
ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
gdb.dwarf2 \
gdb.fortran gdb.server gdb.java gdb.mi \
- gdb.objc gdb.threads gdb.trace gdb.xml \
+ gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
$(SUBDIRS)
EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
Index: configure
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure,v
retrieving revision 1.23
diff -u -p -r1.23 configure
--- configure 23 Jan 2007 17:11:54 -0000 1.23
+++ configure 18 Jul 2007 08:53:31 -0000
@@ -3102,7 +3102,7 @@ done
-
ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
+
ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile
gdb.xml/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure.ac,v
retrieving revision 1.6
diff -u -p -r1.6 configure.ac
--- configure.ac 23 Jan 2007 17:11:55 -0000 1.6
+++ configure.ac 18 Jul 2007 08:53:31 -0000
@@ -115,6 +115,6 @@ AC_OUTPUT([Makefile \
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
gdb.fortran/Makefile gdb.server/Makefile \
- gdb.java/Makefile gdb.mi/Makefile \
- gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
+ gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile \
+ gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile \
gdb.xml/Makefile])
Index: gdb.pascal/Makefile.in
===================================================================
RCS file: gdb.pascal/Makefile.in
diff -N gdb.pascal/Makefile.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/Makefile.in 18 Jul 2007 08:53:33 -0000
@@ -0,0 +1,24 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = hello/hello
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+ @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+ -find . -name '*.o' -print | xargs rm -f
+ -find . -name '*.ali' -print | xargs rm -f
+ -find . -name 'b~*.ad[sb]' -print | xargs rm -f
+ -rm -f *~ a.out xgdb *.x *.ci *.tmp
+ -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+ -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+ -rm -f $(MISCELLANEOUS) twice-tmp.c
+
+distclean maintainer-clean realclean: clean
+ -rm -f *~ core
+ -rm -f Makefile config.status config.log
+ -rm -f *-init.exp
+ -rm -fr *.log summary detail *.plog *.sum *.psum site.*
Index: gdb.pascal/hello.exp
===================================================================
RCS file: gdb.pascal/hello.exp
diff -N gdb.pascal/hello.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.exp 18 Jul 2007 08:53:33 -0000
@@ -0,0 +1,74 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+load_lib "pascal.exp"
+
+set testfile "hello"
+set srcfile ${testfile}.pas
+set binfile ${objdir}/${subdir}/${testfile}
+
+if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}"
executable [list debug ]] != "" } {
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+ pass "setting breakpoint 1"
+}
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+ pass "setting breakpoint 2"
+}
+
+# Verify that "start" lands inside the right procedure.
+if { [gdb_start_cmd] < 0 } {
+ untested start
+ return -1
+}
+
+# This test fails for gpc
+# because debug information for 'main'
+# is in some <implicit code>
+gdb_test "" \
+ ".* at .*hello.pas.*" \
+ "start"
+
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location1}.*" \
+ "Going to first breakpoint"
+gdb_test "print st" \
+ ".* = ''.*" \
+ "Empty string check"
+
+# This test also fails for gpc because the program
+# stops after the string has been written
+# while it should stop before writing it
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location2}.*" \
+ "Going to second breakpoint"
+gdb_test "print st" \
+ ".* = 'Hello, world!'.*" \
+ "String after assignment check"
Index: gdb.pascal/hello.pas
===================================================================
RCS file: gdb.pascal/hello.pas
diff -N gdb.pascal/hello.pas
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.pas 18 Jul 2007 08:53:33 -0000
@@ -0,0 +1,15 @@
+program hello;
+
+var
+ st : string;
+
+procedure print_hello;
+begin
+ Writeln('Before assignment'); { set breakpoint 1 here }
+ st:='Hello, world!';
+ writeln(st); {set breakpoint 2 here }
+end;
+
+begin
+ print_hello;
+end.
Index: gdb.pascal/types.exp
===================================================================
RCS file: gdb.pascal/types.exp
diff -N gdb.pascal/types.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/types.exp 18 Jul 2007 08:53:33 -0000
@@ -0,0 +1,109 @@
+# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was adapted from old Chill tests by Stan Shebs
+# (shebs@cygnus.com).
+# Adapted to pascal by Pierre Muller
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+set prms_id 0
+set bug_id 0
+
+# Set the current language to pascal. This counts as a test. If it
+# fails, then we skip the other tests.
+
+proc set_lang_pascal {} {
+ global gdb_prompt
+
+ if [gdb_test "set language pascal" ""] {
+ return 0;
+ }
+
+ if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+proc test_integer_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various decimal values.
+ # Should be integer*4 probably.
+ gdb_test "pt 123" "type = int"
+}
+proc test_character_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a'" "type = char"
+}
+
+proc test_string_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a simple string'" "type = string"
+}
+
+proc test_logical_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test the only possible values for a logical, TRUE and FALSE.
+
+ gdb_test "pt TRUE" "type = bool"
+ gdb_test "pt FALSE" "type = bool"
+}
+
+proc test_float_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various floating point formats
+
+ # this used to guess whether to look for "real*4" or
+ # "real*8" based on a target config variable, but noone
+ # maintained it properly.
+
+ gdb_test "pt .44" "type = double"
+ gdb_test "pt 44.0" "type = double"
+ gdb_test "pt 10e20" "type = double"
+ gdb_test "pt 10E20" "type = double"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_pascal] then {
+ test_integer_literal_types_accepted
+ test_logical_literal_types_accepted
+ test_character_literal_types_accepted
+ test_string_literal_types_accepted
+ test_float_literal_types_accepted
+} else {
+ warning "$test_name tests suppressed." 0
+}
Index: lib/pascal.exp
===================================================================
RCS file: lib/pascal.exp
diff -N lib/pascal.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lib/pascal.exp 18 Jul 2007 08:53:33 -0000
@@ -0,0 +1,154 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+load_lib libgloss.exp
+
+set pascal_init_done 0
+
+# This procedure looks for a suitable pascal compiler
+# For now only GNU pascal compiler and Free Pascal compiler
+# are searched.
+# First, environment variable GPC is checked
+# if present, GPC compiler is assumed to be the value of
+# that environment variable.
+# Second, environment variable FPC is checked
+# if present, Free Pascal compiler is assumed to be the value of
+# that environment variable.
+# Third, gpc executable is searched using `which gpc`
+# Lastly, fpc executable is searched using `which fpc`
+# Using environment variable allows to force
+# which compiler is used in testsuite
+
+proc pascal_init {} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+ global gpc_compiler
+ global fpc_compiler
+ global env
+
+ if { $pascal_init_done == 1 } {
+ return
+ }
+
+ set pascal_compiler_is_gpc 0
+ set pascal_compiler_is_fpc 0
+ set gpc_compiler [transform gpc]
+ set fpc_compiler [transform fpc]
+
+ if ![is_remote host] {
+ if { [info exists env(GPC)] } {
+ set pascal_compiler_is_gpc 1
+ set gpc_compiler $env(GPC)
+ verbose -log "Assuming GNU Pascal ($gpc_compiler)"
+ } elseif { [info exists env(FPC)] } {
+ set pascal_compiler_is_fpc 1
+ set fpc_compiler $env(FPC)
+ verbose -log "Assuming Free Pascal ($fpc_compiler)"
+ } elseif { [which $gpc_compiler] != 0 } {
+ set pascal_compiler_is_gpc 1
+ verbose -log "GNU Pascal compiler found"
+ } elseif { [which $fpc_compiler] != 0 } {
+ set pascal_compiler_is_fpc 1
+ verbose -log "Free Pascal compiler found"
+ }
+ }
+ set pascal_init_done 1
+}
+
+proc gpc_compile {source dest type options} {
+ global gpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -c"
+ }
+
+ if { $type == "preprocess" } {
+ append add_flags " -E"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -S"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $gpc_compiler "-o $dest --automake
$add_flags $source"]
+ return $result
+}
+
+proc fpc_compile {source dest type options} {
+ global fpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -Cn"
+ }
+
+ if { $type == "preprocess" } {
+ return "Free Pascal can not preprocess"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -al"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $fpc_compiler "-o$dest $add_flags
$source"]
+ return $result
+}
+
+proc gdb_compile_pascal {source dest type options} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+
+ if { $pascal_init_done == 0 } {
+ pascal_init
+ }
+
+ if { $pascal_compiler_is_fpc == 1 } {
+ set result [fpc_compile $source $dest $type $options]
+ } elseif { $pascal_compiler_is_gpc == 1 } {
+ set result [gpc_compile $source $dest $type $options]
+ } else {
+ unsupported "No pascal compiler found"
+ return "No pascal compiler. Compilation failed."
+ }
+
+ if ![file exists $dest] {
+ unsupported "Pascal compilation failed: $result"
+ return "Pascal compilation failed."
+ }
+}
+
^ permalink raw reply [flat|nested] 13+ messages in thread
* [RFC] adding gdb.pascal subdir: updated version
2007-07-18 9:16 ` 'Daniel Jacobowitz'
2007-07-18 12:39 ` Pierre Muller
@ 2007-09-07 22:16 ` Pierre Muller
2007-09-07 22:38 ` Pierre Muller
1 sibling, 1 reply; 13+ messages in thread
From: Pierre Muller @ 2007-09-07 22:16 UTC (permalink / raw)
To: 'Daniel Jacobowitz'; +Cc: gdb-patches, gpc
I resend here the result of some discussion with
Daniel to add a new directory to test
pascal language features.
I updated the headers to the new GNU v3 licence
and used gdb_get_line_number function as suggested
by Daniel.
The current patch adds one failure to
gdb testsuite if the compiler is Free Pascal
and three failures if it it GNU pascal,
the increase is related to GNU Pascal
specific startup code that is not yet recognized
by gdb.
The common error has to do with pascal strings.
It is not an easy issue to solve because
pascal string are using single quotes, but single quotes
are also used for specific purpose inside the
gdb expression parser, and I do not want to
alter this behavior.
Comments are most welcome as always,
Pierre Muller
2007-09-08 Pierre Muller <muller@ics.u-strasbg.fr>
Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (ALL_SUBDIRS): Add gdb.pascal.
* configure.ac (AC_OUTPUT): Add gdb.pascal/Makefile.
* configure: Regenerated.
* gdb.pascal/Makefile.in, gdb.pascal/hello.exp,
gdb.pascal/hello.pas,
gdb.pascal/types.exp, lib/pascal.exp: New files.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/Makefile.in,v
retrieving revision 1.18
diff -u -p -r1.18 Makefile.in
--- Makefile.in 27 Mar 2007 18:09:35 -0000 1.18
+++ Makefile.in 7 Sep 2007 21:46:12 -0000
@@ -37,7 +37,7 @@ RPATH_ENVVAR = @RPATH_ENVVAR@
ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
gdb.dwarf2 \
gdb.fortran gdb.server gdb.java gdb.mi \
- gdb.objc gdb.threads gdb.trace gdb.xml \
+ gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
$(SUBDIRS)
EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
Index: configure
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure,v
retrieving revision 1.23
diff -u -p -r1.23 configure
--- configure 23 Jan 2007 17:11:54 -0000 1.23
+++ configure 7 Sep 2007 21:46:24 -0000
@@ -3102,7 +3102,7 @@ done
-
ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
+
ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile
gdb.xml/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure.ac,v
retrieving revision 1.7
diff -u -p -r1.7 configure.ac
--- configure.ac 23 Aug 2007 17:58:44 -0000 1.7
+++ configure.ac 7 Sep 2007 21:46:24 -0000
@@ -113,6 +113,6 @@ AC_OUTPUT([Makefile \
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
gdb.fortran/Makefile gdb.server/Makefile \
- gdb.java/Makefile gdb.mi/Makefile \
- gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
+ gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile \
+ gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile \
gdb.xml/Makefile])
Index: gdb.pascal/Makefile.in
===================================================================
RCS file: gdb.pascal/Makefile.in
diff -N gdb.pascal/Makefile.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/Makefile.in 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,24 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = hello/hello
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+ @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+ -find . -name '*.o' -print | xargs rm -f
+ -find . -name '*.ali' -print | xargs rm -f
+ -find . -name 'b~*.ad[sb]' -print | xargs rm -f
+ -rm -f *~ a.out xgdb *.x *.ci *.tmp
+ -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+ -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+ -rm -f $(MISCELLANEOUS) twice-tmp.c
+
+distclean maintainer-clean realclean: clean
+ -rm -f *~ core
+ -rm -f Makefile config.status config.log
+ -rm -f *-init.exp
+ -rm -fr *.log summary detail *.plog *.sum *.psum site.*
Index: gdb.pascal/hello.exp
===================================================================
RCS file: gdb.pascal/hello.exp
diff -N gdb.pascal/hello.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.exp 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,72 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+load_lib "pascal.exp"
+
+set testfile "hello"
+set srcfile ${testfile}.pas
+set binfile ${objdir}/${subdir}/${testfile}
+
+if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}"
executable [list debug ]] != "" } {
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+ pass "setting breakpoint 1"
+}
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+ pass "setting breakpoint 2"
+}
+
+# Verify that "start" lands inside the right procedure.
+if { [gdb_start_cmd] < 0 } {
+ untested start
+ return -1
+}
+
+# This test fails for gpc
+# because debug information for 'main'
+# is in some <implicit code>
+gdb_test "" \
+ ".* at .*hello.pas.*" \
+ "start"
+
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location1}.*" \
+ "Going to first breakpoint"
+gdb_test "print st" \
+ ".* = ''.*" \
+ "Empty string check"
+
+# This test also fails for gpc because the program
+# stops after the string has been written
+# while it should stop before writing it
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location2}.*" \
+ "Going to second breakpoint"
+gdb_test "print st" \
+ ".* = 'Hello, world!'.*" \
+ "String after assignment check"
Index: gdb.pascal/hello.pas
===================================================================
RCS file: gdb.pascal/hello.pas
diff -N gdb.pascal/hello.pas
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.pas 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,15 @@
+program hello;
+
+var
+ st : string;
+
+procedure print_hello;
+begin
+ Writeln('Before assignment'); { set breakpoint 1 here }
+ st:='Hello, world!';
+ writeln(st); {set breakpoint 2 here }
+end;
+
+begin
+ print_hello;
+end.
Index: gdb.pascal/types.exp
===================================================================
RCS file: gdb.pascal/types.exp
diff -N gdb.pascal/types.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/types.exp 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,109 @@
+# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was adapted from old Chill tests by Stan Shebs
+# (shebs@cygnus.com).
+# Adapted to pascal by Pierre Muller
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+set prms_id 0
+set bug_id 0
+
+# Set the current language to pascal. This counts as a test. If it
+# fails, then we skip the other tests.
+
+proc set_lang_pascal {} {
+ global gdb_prompt
+
+ if [gdb_test "set language pascal" ""] {
+ return 0;
+ }
+
+ if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+proc test_integer_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various decimal values.
+ # Should be integer*4 probably.
+ gdb_test "pt 123" "type = int"
+}
+proc test_character_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a'" "type = char"
+}
+
+proc test_string_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a simple string'" "type = string"
+}
+
+proc test_logical_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test the only possible values for a logical, TRUE and FALSE.
+
+ gdb_test "pt TRUE" "type = bool"
+ gdb_test "pt FALSE" "type = bool"
+}
+
+proc test_float_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various floating point formats
+
+ # this used to guess whether to look for "real*4" or
+ # "real*8" based on a target config variable, but noone
+ # maintained it properly.
+
+ gdb_test "pt .44" "type = double"
+ gdb_test "pt 44.0" "type = double"
+ gdb_test "pt 10e20" "type = double"
+ gdb_test "pt 10E20" "type = double"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_pascal] then {
+ test_integer_literal_types_accepted
+ test_logical_literal_types_accepted
+ test_character_literal_types_accepted
+ test_string_literal_types_accepted
+ test_float_literal_types_accepted
+} else {
+ warning "$test_name tests suppressed." 0
+}
Index: lib/pascal.exp
===================================================================
RCS file: lib/pascal.exp
diff -N lib/pascal.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lib/pascal.exp 7 Sep 2007 21:46:32 -0000
@@ -0,0 +1,152 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib libgloss.exp
+
+set pascal_init_done 0
+
+# This procedure looks for a suitable pascal compiler
+# For now only GNU pascal compiler and Free Pascal compiler
+# are searched.
+# First, environment variable GPC is checked
+# if present, GPC compiler is assumed to be the value of
+# that environment variable.
+# Second, environment variable FPC is checked
+# if present, Free Pascal compiler is assumed to be the value of
+# that environment variable.
+# Third, gpc executable is searched using `which gpc`
+# Lastly, fpc executable is searched using `which fpc`
+# Using environment variable allows to force
+# which compiler is used in testsuite
+
+proc pascal_init {} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+ global gpc_compiler
+ global fpc_compiler
+ global env
+
+ if { $pascal_init_done == 1 } {
+ return
+ }
+
+ set pascal_compiler_is_gpc 0
+ set pascal_compiler_is_fpc 0
+ set gpc_compiler [transform gpc]
+ set fpc_compiler [transform fpc]
+
+ if ![is_remote host] {
+ if { [info exists env(GPC)] } {
+ set pascal_compiler_is_gpc 1
+ set gpc_compiler $env(GPC)
+ verbose -log "Assuming GNU Pascal ($gpc_compiler)"
+ } elseif { [info exists env(FPC)] } {
+ set pascal_compiler_is_fpc 1
+ set fpc_compiler $env(FPC)
+ verbose -log "Assuming Free Pascal ($fpc_compiler)"
+ } elseif { [which $gpc_compiler] != 0 } {
+ set pascal_compiler_is_gpc 1
+ verbose -log "GNU Pascal compiler found"
+ } elseif { [which $fpc_compiler] != 0 } {
+ set pascal_compiler_is_fpc 1
+ verbose -log "Free Pascal compiler found"
+ }
+ }
+ set pascal_init_done 1
+}
+
+proc gpc_compile {source dest type options} {
+ global gpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -c"
+ }
+
+ if { $type == "preprocess" } {
+ append add_flags " -E"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -S"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $gpc_compiler "-o $dest --automake
$add_flags $source"]
+ return $result
+}
+
+proc fpc_compile {source dest type options} {
+ global fpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -Cn"
+ }
+
+ if { $type == "preprocess" } {
+ return "Free Pascal can not preprocess"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -al"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $fpc_compiler "-o$dest $add_flags
$source"]
+ return $result
+}
+
+proc gdb_compile_pascal {source dest type options} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+
+ if { $pascal_init_done == 0 } {
+ pascal_init
+ }
+
+ if { $pascal_compiler_is_fpc == 1 } {
+ set result [fpc_compile $source $dest $type $options]
+ } elseif { $pascal_compiler_is_gpc == 1 } {
+ set result [gpc_compile $source $dest $type $options]
+ } else {
+ unsupported "No pascal compiler found"
+ return "No pascal compiler. Compilation failed."
+ }
+
+ if ![file exists $dest] {
+ unsupported "Pascal compilation failed: $result"
+ return "Pascal compilation failed."
+ }
+}
+
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [RFC] adding gdb.pascal subdir: updated version
2007-09-07 22:16 ` [RFC] adding gdb.pascal subdir: updated version Pierre Muller
@ 2007-09-07 22:38 ` Pierre Muller
2007-09-07 22:45 ` Maxim Grigoriev
2007-10-06 15:42 ` 'Daniel Jacobowitz'
0 siblings, 2 replies; 13+ messages in thread
From: Pierre Muller @ 2007-09-07 22:38 UTC (permalink / raw)
To: 'Pierre Muller', 'Daniel Jacobowitz'; +Cc: gdb-patches, gpc
[-- Attachment #1: Type: text/plain, Size: 1758 bytes --]
I don't understand what is going on with my email program,
but if I check before sending, every line of the headers
is OK (all header diff lines start with '+#')
But as soon as I send the email, it gets transformed
and mangled.
I attached the diff file,
hoping that this will avoid my troubles.
Pierre Muller
Pascal language maintainer
PS: Even more strangely, the generated mess
in the headers disappears as soon as I do a Reply,
There is probably some hidden feature of Outlook that I still did
not understand and disable :(
> Index: lib/pascal.exp
> ===================================================================
> RCS file: lib/pascal.exp
> diff -N lib/pascal.exp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ lib/pascal.exp 7 Sep 2007 21:46:32 -0000
> @@ -0,0 +1,152 @@
> +# Copyright 2007 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see
> <http://www.gnu.org/licenses/>.
> +
> +load_lib libgloss.exp
It is almost perfectly restored, just the last line containing the web
address is still wrongly splitted. If someone can explain how to disable
Outlook from poking around my lines, I would appreciate greatly.
[-- Attachment #2: test.txt --]
[-- Type: text/plain, Size: 15452 bytes --]
2007-09-08 Pierre Muller <muller@ics.u-strasbg.fr>
Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (ALL_SUBDIRS): Add gdb.pascal.
* configure.ac (AC_OUTPUT): Add gdb.pascal/Makefile.
* configure: Regenerated.
* gdb.pascal/Makefile.in, gdb.pascal/hello.exp, gdb.pascal/hello.pas,
gdb.pascal/types.exp, lib/pascal.exp: New files.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/Makefile.in,v
retrieving revision 1.18
diff -u -p -r1.18 Makefile.in
--- Makefile.in 27 Mar 2007 18:09:35 -0000 1.18
+++ Makefile.in 7 Sep 2007 21:46:12 -0000
@@ -37,7 +37,7 @@ RPATH_ENVVAR = @RPATH_ENVVAR@
ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
gdb.dwarf2 \
gdb.fortran gdb.server gdb.java gdb.mi \
- gdb.objc gdb.threads gdb.trace gdb.xml \
+ gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
$(SUBDIRS)
EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
Index: configure
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure,v
retrieving revision 1.23
diff -u -p -r1.23 configure
--- configure 23 Jan 2007 17:11:54 -0000 1.23
+++ configure 7 Sep 2007 21:46:24 -0000
@@ -3102,7 +3102,7 @@ done
- ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
+ ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure.ac,v
retrieving revision 1.7
diff -u -p -r1.7 configure.ac
--- configure.ac 23 Aug 2007 17:58:44 -0000 1.7
+++ configure.ac 7 Sep 2007 21:46:24 -0000
@@ -113,6 +113,6 @@ AC_OUTPUT([Makefile \
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
gdb.fortran/Makefile gdb.server/Makefile \
- gdb.java/Makefile gdb.mi/Makefile \
- gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
+ gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile \
+ gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile \
gdb.xml/Makefile])
Index: gdb.pascal/Makefile.in
===================================================================
RCS file: gdb.pascal/Makefile.in
diff -N gdb.pascal/Makefile.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/Makefile.in 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,24 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = hello/hello
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+ @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+ -find . -name '*.o' -print | xargs rm -f
+ -find . -name '*.ali' -print | xargs rm -f
+ -find . -name 'b~*.ad[sb]' -print | xargs rm -f
+ -rm -f *~ a.out xgdb *.x *.ci *.tmp
+ -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+ -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+ -rm -f $(MISCELLANEOUS) twice-tmp.c
+
+distclean maintainer-clean realclean: clean
+ -rm -f *~ core
+ -rm -f Makefile config.status config.log
+ -rm -f *-init.exp
+ -rm -fr *.log summary detail *.plog *.sum *.psum site.*
Index: gdb.pascal/hello.exp
===================================================================
RCS file: gdb.pascal/hello.exp
diff -N gdb.pascal/hello.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.exp 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,72 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+load_lib "pascal.exp"
+
+set testfile "hello"
+set srcfile ${testfile}.pas
+set binfile ${objdir}/${subdir}/${testfile}
+
+if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+ pass "setting breakpoint 1"
+}
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+ pass "setting breakpoint 2"
+}
+
+# Verify that "start" lands inside the right procedure.
+if { [gdb_start_cmd] < 0 } {
+ untested start
+ return -1
+}
+
+# This test fails for gpc
+# because debug information for 'main'
+# is in some <implicit code>
+gdb_test "" \
+ ".* at .*hello.pas.*" \
+ "start"
+
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location1}.*" \
+ "Going to first breakpoint"
+gdb_test "print st" \
+ ".* = ''.*" \
+ "Empty string check"
+
+# This test also fails for gpc because the program
+# stops after the string has been written
+# while it should stop before writing it
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location2}.*" \
+ "Going to second breakpoint"
+gdb_test "print st" \
+ ".* = 'Hello, world!'.*" \
+ "String after assignment check"
Index: gdb.pascal/hello.pas
===================================================================
RCS file: gdb.pascal/hello.pas
diff -N gdb.pascal/hello.pas
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.pas 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,15 @@
+program hello;
+
+var
+ st : string;
+
+procedure print_hello;
+begin
+ Writeln('Before assignment'); { set breakpoint 1 here }
+ st:='Hello, world!';
+ writeln(st); {set breakpoint 2 here }
+end;
+
+begin
+ print_hello;
+end.
Index: gdb.pascal/types.exp
===================================================================
RCS file: gdb.pascal/types.exp
diff -N gdb.pascal/types.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/types.exp 7 Sep 2007 21:46:31 -0000
@@ -0,0 +1,109 @@
+# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was adapted from old Chill tests by Stan Shebs
+# (shebs@cygnus.com).
+# Adapted to pascal by Pierre Muller
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+set prms_id 0
+set bug_id 0
+
+# Set the current language to pascal. This counts as a test. If it
+# fails, then we skip the other tests.
+
+proc set_lang_pascal {} {
+ global gdb_prompt
+
+ if [gdb_test "set language pascal" ""] {
+ return 0;
+ }
+
+ if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+proc test_integer_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various decimal values.
+ # Should be integer*4 probably.
+ gdb_test "pt 123" "type = int"
+}
+proc test_character_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a'" "type = char"
+}
+
+proc test_string_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a simple string'" "type = string"
+}
+
+proc test_logical_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test the only possible values for a logical, TRUE and FALSE.
+
+ gdb_test "pt TRUE" "type = bool"
+ gdb_test "pt FALSE" "type = bool"
+}
+
+proc test_float_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various floating point formats
+
+ # this used to guess whether to look for "real*4" or
+ # "real*8" based on a target config variable, but noone
+ # maintained it properly.
+
+ gdb_test "pt .44" "type = double"
+ gdb_test "pt 44.0" "type = double"
+ gdb_test "pt 10e20" "type = double"
+ gdb_test "pt 10E20" "type = double"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_pascal] then {
+ test_integer_literal_types_accepted
+ test_logical_literal_types_accepted
+ test_character_literal_types_accepted
+ test_string_literal_types_accepted
+ test_float_literal_types_accepted
+} else {
+ warning "$test_name tests suppressed." 0
+}
Index: lib/pascal.exp
===================================================================
RCS file: lib/pascal.exp
diff -N lib/pascal.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lib/pascal.exp 7 Sep 2007 21:46:32 -0000
@@ -0,0 +1,152 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib libgloss.exp
+
+set pascal_init_done 0
+
+# This procedure looks for a suitable pascal compiler
+# For now only GNU pascal compiler and Free Pascal compiler
+# are searched.
+# First, environment variable GPC is checked
+# if present, GPC compiler is assumed to be the value of
+# that environment variable.
+# Second, environment variable FPC is checked
+# if present, Free Pascal compiler is assumed to be the value of
+# that environment variable.
+# Third, gpc executable is searched using `which gpc`
+# Lastly, fpc executable is searched using `which fpc`
+# Using environment variable allows to force
+# which compiler is used in testsuite
+
+proc pascal_init {} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+ global gpc_compiler
+ global fpc_compiler
+ global env
+
+ if { $pascal_init_done == 1 } {
+ return
+ }
+
+ set pascal_compiler_is_gpc 0
+ set pascal_compiler_is_fpc 0
+ set gpc_compiler [transform gpc]
+ set fpc_compiler [transform fpc]
+
+ if ![is_remote host] {
+ if { [info exists env(GPC)] } {
+ set pascal_compiler_is_gpc 1
+ set gpc_compiler $env(GPC)
+ verbose -log "Assuming GNU Pascal ($gpc_compiler)"
+ } elseif { [info exists env(FPC)] } {
+ set pascal_compiler_is_fpc 1
+ set fpc_compiler $env(FPC)
+ verbose -log "Assuming Free Pascal ($fpc_compiler)"
+ } elseif { [which $gpc_compiler] != 0 } {
+ set pascal_compiler_is_gpc 1
+ verbose -log "GNU Pascal compiler found"
+ } elseif { [which $fpc_compiler] != 0 } {
+ set pascal_compiler_is_fpc 1
+ verbose -log "Free Pascal compiler found"
+ }
+ }
+ set pascal_init_done 1
+}
+
+proc gpc_compile {source dest type options} {
+ global gpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -c"
+ }
+
+ if { $type == "preprocess" } {
+ append add_flags " -E"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -S"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $gpc_compiler "-o $dest --automake $add_flags $source"]
+ return $result
+}
+
+proc fpc_compile {source dest type options} {
+ global fpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -Cn"
+ }
+
+ if { $type == "preprocess" } {
+ return "Free Pascal can not preprocess"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -al"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $fpc_compiler "-o$dest $add_flags $source"]
+ return $result
+}
+
+proc gdb_compile_pascal {source dest type options} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+
+ if { $pascal_init_done == 0 } {
+ pascal_init
+ }
+
+ if { $pascal_compiler_is_fpc == 1 } {
+ set result [fpc_compile $source $dest $type $options]
+ } elseif { $pascal_compiler_is_gpc == 1 } {
+ set result [gpc_compile $source $dest $type $options]
+ } else {
+ unsupported "No pascal compiler found"
+ return "No pascal compiler. Compilation failed."
+ }
+
+ if ![file exists $dest] {
+ unsupported "Pascal compilation failed: $result"
+ return "Pascal compilation failed."
+ }
+}
+
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC] adding gdb.pascal subdir: updated version
2007-09-07 22:38 ` Pierre Muller
@ 2007-09-07 22:45 ` Maxim Grigoriev
2007-10-06 15:42 ` 'Daniel Jacobowitz'
1 sibling, 0 replies; 13+ messages in thread
From: Maxim Grigoriev @ 2007-09-07 22:45 UTC (permalink / raw)
To: Pierre Muller, gdb-patches
Try adding patches as an attachment.
-- Maxim
Pierre Muller wrote:
> I don't understand what is going on with my email program,
> but if I check before sending, every line of the headers
> is OK (all header diff lines start with '+#')
> But as soon as I send the email, it gets transformed
> and mangled.
>
> I attached the diff file,
> hoping that this will avoid my troubles.
>
> Pierre Muller
> Pascal language maintainer
>
>
> PS: Even more strangely, the generated mess
> in the headers disappears as soon as I do a Reply,
> There is probably some hidden feature of Outlook that I still did
> not understand and disable :(
>
>
>> Index: lib/pascal.exp
>> ===================================================================
>> RCS file: lib/pascal.exp
>> diff -N lib/pascal.exp
>> --- /dev/null 1 Jan 1970 00:00:00 -0000
>> +++ lib/pascal.exp 7 Sep 2007 21:46:32 -0000
>> @@ -0,0 +1,152 @@
>> +# Copyright 2007 Free Software Foundation, Inc.
>> +#
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program. If not, see
>> <http://www.gnu.org/licenses/>.
>> +
>> +load_lib libgloss.exp
>>
>
> It is almost perfectly restored, just the last line containing the web
> address is still wrongly splitted. If someone can explain how to disable
> Outlook from poking around my lines, I would appreciate greatly.
>
> ------------------------------------------------------------------------
>
> 2007-09-08 Pierre Muller <muller@ics.u-strasbg.fr>
> Daniel Jacobowitz <dan@codesourcery.com>
>
> * Makefile.in (ALL_SUBDIRS): Add gdb.pascal.
> * configure.ac (AC_OUTPUT): Add gdb.pascal/Makefile.
> * configure: Regenerated.
> * gdb.pascal/Makefile.in, gdb.pascal/hello.exp, gdb.pascal/hello.pas,
> gdb.pascal/types.exp, lib/pascal.exp: New files.
>
>
> Index: Makefile.in
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/Makefile.in,v
> retrieving revision 1.18
> diff -u -p -r1.18 Makefile.in
> --- Makefile.in 27 Mar 2007 18:09:35 -0000 1.18
> +++ Makefile.in 7 Sep 2007 21:46:12 -0000
> @@ -37,7 +37,7 @@ RPATH_ENVVAR = @RPATH_ENVVAR@
> ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
> gdb.dwarf2 \
> gdb.fortran gdb.server gdb.java gdb.mi \
> - gdb.objc gdb.threads gdb.trace gdb.xml \
> + gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
> $(SUBDIRS)
>
> EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
> Index: configure
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/configure,v
> retrieving revision 1.23
> diff -u -p -r1.23 configure
> --- configure 23 Jan 2007 17:11:54 -0000 1.23
> +++ configure 7 Sep 2007 21:46:24 -0000
> @@ -3102,7 +3102,7 @@ done
>
>
>
> - ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
> + ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
> cat >confcache <<\_ACEOF
> # This file is a shell script that caches the results of configure
> # tests run on this system so they can be shared between configure
> Index: configure.ac
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/configure.ac,v
> retrieving revision 1.7
> diff -u -p -r1.7 configure.ac
> --- configure.ac 23 Aug 2007 17:58:44 -0000 1.7
> +++ configure.ac 7 Sep 2007 21:46:24 -0000
> @@ -113,6 +113,6 @@ AC_OUTPUT([Makefile \
> gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
> gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
> gdb.fortran/Makefile gdb.server/Makefile \
> - gdb.java/Makefile gdb.mi/Makefile \
> - gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
> + gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile \
> + gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile \
> gdb.xml/Makefile])
> Index: gdb.pascal/Makefile.in
> ===================================================================
> RCS file: gdb.pascal/Makefile.in
> diff -N gdb.pascal/Makefile.in
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/Makefile.in 7 Sep 2007 21:46:31 -0000
> @@ -0,0 +1,24 @@
> +VPATH = @srcdir@
> +srcdir = @srcdir@
> +
> +EXECUTABLES = hello/hello
> +
> +MISCELLANEOUS =
> +
> +all info install-info dvi install uninstall installcheck check:
> + @echo "Nothing to be done for $@..."
> +
> +clean mostlyclean:
> + -find . -name '*.o' -print | xargs rm -f
> + -find . -name '*.ali' -print | xargs rm -f
> + -find . -name 'b~*.ad[sb]' -print | xargs rm -f
> + -rm -f *~ a.out xgdb *.x *.ci *.tmp
> + -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
> + -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
> + -rm -f $(MISCELLANEOUS) twice-tmp.c
> +
> +distclean maintainer-clean realclean: clean
> + -rm -f *~ core
> + -rm -f Makefile config.status config.log
> + -rm -f *-init.exp
> + -rm -fr *.log summary detail *.plog *.sum *.psum site.*
> Index: gdb.pascal/hello.exp
> ===================================================================
> RCS file: gdb.pascal/hello.exp
> diff -N gdb.pascal/hello.exp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/hello.exp 7 Sep 2007 21:46:31 -0000
> @@ -0,0 +1,72 @@
> +# Copyright 2007 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <http://www.gnu.org/licenses/>.
> +
> +if $tracelevel then {
> + strace $tracelevel
> +}
> +
> +load_lib "pascal.exp"
> +
> +set testfile "hello"
> +set srcfile ${testfile}.pas
> +set binfile ${objdir}/${subdir}/${testfile}
> +
> +if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
> + return -1
> +}
> +
> +gdb_exit
> +gdb_start
> +gdb_reinitialize_dir $srcdir/$subdir
> +gdb_load ${binfile}
> +set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
> +set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
> +
> +if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
> + pass "setting breakpoint 1"
> +}
> +if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
> + pass "setting breakpoint 2"
> +}
> +
> +# Verify that "start" lands inside the right procedure.
> +if { [gdb_start_cmd] < 0 } {
> + untested start
> + return -1
> +}
> +
> +# This test fails for gpc
> +# because debug information for 'main'
> +# is in some <implicit code>
> +gdb_test "" \
> + ".* at .*hello.pas.*" \
> + "start"
> +
> +gdb_test "cont" \
> + "Breakpoint .*:${bp_location1}.*" \
> + "Going to first breakpoint"
> +gdb_test "print st" \
> + ".* = ''.*" \
> + "Empty string check"
> +
> +# This test also fails for gpc because the program
> +# stops after the string has been written
> +# while it should stop before writing it
> +gdb_test "cont" \
> + "Breakpoint .*:${bp_location2}.*" \
> + "Going to second breakpoint"
> +gdb_test "print st" \
> + ".* = 'Hello, world!'.*" \
> + "String after assignment check"
> Index: gdb.pascal/hello.pas
> ===================================================================
> RCS file: gdb.pascal/hello.pas
> diff -N gdb.pascal/hello.pas
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/hello.pas 7 Sep 2007 21:46:31 -0000
> @@ -0,0 +1,15 @@
> +program hello;
> +
> +var
> + st : string;
> +
> +procedure print_hello;
> +begin
> + Writeln('Before assignment'); { set breakpoint 1 here }
> + st:='Hello, world!';
> + writeln(st); {set breakpoint 2 here }
> +end;
> +
> +begin
> + print_hello;
> +end.
> Index: gdb.pascal/types.exp
> ===================================================================
> RCS file: gdb.pascal/types.exp
> diff -N gdb.pascal/types.exp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/types.exp 7 Sep 2007 21:46:31 -0000
> @@ -0,0 +1,109 @@
> +# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
> +# Copyright 2007 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <http://www.gnu.org/licenses/>.
> +
> +# Please email any bugs, comments, and/or additions to this file to:
> +# bug-gdb@prep.ai.mit.edu
> +
> +# This file was adapted from old Chill tests by Stan Shebs
> +# (shebs@cygnus.com).
> +# Adapted to pascal by Pierre Muller
> +
> +if $tracelevel then {
> + strace $tracelevel
> +}
> +
> +set prms_id 0
> +set bug_id 0
> +
> +# Set the current language to pascal. This counts as a test. If it
> +# fails, then we skip the other tests.
> +
> +proc set_lang_pascal {} {
> + global gdb_prompt
> +
> + if [gdb_test "set language pascal" ""] {
> + return 0;
> + }
> +
> + if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
> + return 1;
> + } else {
> + return 0;
> + }
> +}
> +
> +proc test_integer_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various decimal values.
> + # Should be integer*4 probably.
> + gdb_test "pt 123" "type = int"
> +}
> +proc test_character_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various character values.
> +
> + gdb_test "pt 'a'" "type = char"
> +}
> +
> +proc test_string_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various character values.
> +
> + gdb_test "pt 'a simple string'" "type = string"
> +}
> +
> +proc test_logical_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test the only possible values for a logical, TRUE and FALSE.
> +
> + gdb_test "pt TRUE" "type = bool"
> + gdb_test "pt FALSE" "type = bool"
> +}
> +
> +proc test_float_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various floating point formats
> +
> + # this used to guess whether to look for "real*4" or
> + # "real*8" based on a target config variable, but noone
> + # maintained it properly.
> +
> + gdb_test "pt .44" "type = double"
> + gdb_test "pt 44.0" "type = double"
> + gdb_test "pt 10e20" "type = double"
> + gdb_test "pt 10E20" "type = double"
> +}
> +
> +# Start with a fresh gdb.
> +
> +gdb_exit
> +gdb_start
> +gdb_reinitialize_dir $srcdir/$subdir
> +
> +if [set_lang_pascal] then {
> + test_integer_literal_types_accepted
> + test_logical_literal_types_accepted
> + test_character_literal_types_accepted
> + test_string_literal_types_accepted
> + test_float_literal_types_accepted
> +} else {
> + warning "$test_name tests suppressed." 0
> +}
> Index: lib/pascal.exp
> ===================================================================
> RCS file: lib/pascal.exp
> diff -N lib/pascal.exp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ lib/pascal.exp 7 Sep 2007 21:46:32 -0000
> @@ -0,0 +1,152 @@
> +# Copyright 2007 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <http://www.gnu.org/licenses/>.
> +
> +load_lib libgloss.exp
> +
> +set pascal_init_done 0
> +
> +# This procedure looks for a suitable pascal compiler
> +# For now only GNU pascal compiler and Free Pascal compiler
> +# are searched.
> +# First, environment variable GPC is checked
> +# if present, GPC compiler is assumed to be the value of
> +# that environment variable.
> +# Second, environment variable FPC is checked
> +# if present, Free Pascal compiler is assumed to be the value of
> +# that environment variable.
> +# Third, gpc executable is searched using `which gpc`
> +# Lastly, fpc executable is searched using `which fpc`
> +# Using environment variable allows to force
> +# which compiler is used in testsuite
> +
> +proc pascal_init {} {
> + global pascal_init_done
> + global pascal_compiler_is_gpc
> + global pascal_compiler_is_fpc
> + global gpc_compiler
> + global fpc_compiler
> + global env
> +
> + if { $pascal_init_done == 1 } {
> + return
> + }
> +
> + set pascal_compiler_is_gpc 0
> + set pascal_compiler_is_fpc 0
> + set gpc_compiler [transform gpc]
> + set fpc_compiler [transform fpc]
> +
> + if ![is_remote host] {
> + if { [info exists env(GPC)] } {
> + set pascal_compiler_is_gpc 1
> + set gpc_compiler $env(GPC)
> + verbose -log "Assuming GNU Pascal ($gpc_compiler)"
> + } elseif { [info exists env(FPC)] } {
> + set pascal_compiler_is_fpc 1
> + set fpc_compiler $env(FPC)
> + verbose -log "Assuming Free Pascal ($fpc_compiler)"
> + } elseif { [which $gpc_compiler] != 0 } {
> + set pascal_compiler_is_gpc 1
> + verbose -log "GNU Pascal compiler found"
> + } elseif { [which $fpc_compiler] != 0 } {
> + set pascal_compiler_is_fpc 1
> + verbose -log "Free Pascal compiler found"
> + }
> + }
> + set pascal_init_done 1
> +}
> +
> +proc gpc_compile {source dest type options} {
> + global gpc_compiler
> + set add_flags ""
> + if {$type == "object"} {
> + append add_flags " -c"
> + }
> +
> + if { $type == "preprocess" } {
> + append add_flags " -E"
> + }
> +
> + if { $type == "assembly" } {
> + append add_flags " -S"
> + }
> +
> + foreach i $options {
> + if { $i == "debug" } {
> + if [board_info $dest exists debug_flags] {
> + append add_flags " [board_info $dest debug_flags]";
> + } else {
> + append add_flags " -g"
> + }
> + }
> + }
> +
> + set result [remote_exec host $gpc_compiler "-o $dest --automake $add_flags $source"]
> + return $result
> +}
> +
> +proc fpc_compile {source dest type options} {
> + global fpc_compiler
> + set add_flags ""
> + if {$type == "object"} {
> + append add_flags " -Cn"
> + }
> +
> + if { $type == "preprocess" } {
> + return "Free Pascal can not preprocess"
> + }
> +
> + if { $type == "assembly" } {
> + append add_flags " -al"
> + }
> +
> + foreach i $options {
> + if { $i == "debug" } {
> + if [board_info $dest exists debug_flags] {
> + append add_flags " [board_info $dest debug_flags]";
> + } else {
> + append add_flags " -g"
> + }
> + }
> + }
> +
> + set result [remote_exec host $fpc_compiler "-o$dest $add_flags $source"]
> + return $result
> +}
> +
> +proc gdb_compile_pascal {source dest type options} {
> + global pascal_init_done
> + global pascal_compiler_is_gpc
> + global pascal_compiler_is_fpc
> +
> + if { $pascal_init_done == 0 } {
> + pascal_init
> + }
> +
> + if { $pascal_compiler_is_fpc == 1 } {
> + set result [fpc_compile $source $dest $type $options]
> + } elseif { $pascal_compiler_is_gpc == 1 } {
> + set result [gpc_compile $source $dest $type $options]
> + } else {
> + unsupported "No pascal compiler found"
> + return "No pascal compiler. Compilation failed."
> + }
> +
> + if ![file exists $dest] {
> + unsupported "Pascal compilation failed: $result"
> + return "Pascal compilation failed."
> + }
> +}
> +
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC] adding gdb.pascal subdir: updated version
2007-09-07 22:38 ` Pierre Muller
2007-09-07 22:45 ` Maxim Grigoriev
@ 2007-10-06 15:42 ` 'Daniel Jacobowitz'
2007-10-08 7:14 ` Pierre Muller
1 sibling, 1 reply; 13+ messages in thread
From: 'Daniel Jacobowitz' @ 2007-10-06 15:42 UTC (permalink / raw)
To: Pierre Muller; +Cc: gdb-patches, gpc
On Sat, Sep 08, 2007 at 12:38:47AM +0200, Pierre Muller wrote:
> +proc test_string_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various character values.
> +
> + gdb_test "pt 'a simple string'" "type = string"
> +}
Pierre, is this the correct Pascal syntax for a string or not?
We have:
case '\'':
/* We either have a character constant ('0' or '\177' for example)
or we have a quoted symbol reference ('foo(int,int)' in object pascal
for example). */
and there is a separate case for double-quoted strings.
Resolving that question will take care of one failure for both fpc and
gpc. The other two GPC failures should be handled like in the patch
I've attached. The failure at "start" is a GDB bug, so we label that
a KFAIL ("known failure"). The shouldn't be committed with gdb/NNNN
still in it. It should either have a bug number in our bug database,
or else just wait until the patch to fix it is checked in.
The other test is definitely a bug in GPC. I read through the DWARF
dump and there is no reference to line 10, so GDB will never display
it. So that's an XFAIL, an expected failure due to our environment.
It needs to get a little more complicated if the GPC bug is fixed
some day, using gdb_test_multiple.
--
Daniel Jacobowitz
CodeSourcery
diff -u gdb.pascal/hello.exp gdb.pascal/hello.exp
--- gdb.pascal/hello.exp 7 Sep 2007 21:46:31 -0000
+++ gdb.pascal/hello.exp 6 Oct 2007 15:39:32 -0000
@@ -50,6 +50,9 @@
# This test fails for gpc
# because debug information for 'main'
# is in some <implicit code>
+if { $pascal_compiler_is_gpc } {
+ setup_kfail *-*-* gdb/NNNN
+}
gdb_test "" \
".* at .*hello.pas.*" \
"start"
@@ -64,6 +67,9 @@
# This test also fails for gpc because the program
# stops after the string has been written
# while it should stop before writing it
+if { $pascal_compiler_is_gpc } {
+ setup_xfail *-*-*
+}
gdb_test "cont" \
"Breakpoint .*:${bp_location2}.*" \
"Going to second breakpoint"
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [RFC] adding gdb.pascal subdir: updated version
2007-10-06 15:42 ` 'Daniel Jacobowitz'
@ 2007-10-08 7:14 ` Pierre Muller
2007-10-08 12:03 ` 'Daniel Jacobowitz'
0 siblings, 1 reply; 13+ messages in thread
From: Pierre Muller @ 2007-10-08 7:14 UTC (permalink / raw)
To: 'Daniel Jacobowitz'; +Cc: gdb-patches, gpc
This is the BIG problem about GDB pascal expression parser:
- the single quotes are used in the C expression parser
for these "quoted symbol reference", which I did not want to
remove from the pascal expression parser, mainly
because I did not really know what its use was,
and I still don't know :(.
Question to GPC people:
does anyone use this "quoted symbol reference"?
I thought that it could be very useful for
overloaded functions (functions having the same name,
but a diffent arg list, which is allowed in pascal).
Thus I also left the double quote parsing as a string constant
even though it is not the real pascal syntax.
- but pascal strings are started by single quotes,
not double quotes...
I have a patch that would still search for quoted symbol reference,
but would default to a pascal string in case nothing is found.
The patch is rather simple, it just sets a variable named
is_pascal_string, that is used if no symbol is found later
to transform the character sequence into a real string.
See diff below.
The main problem is that doing this would give you
subtle bugs like
(gdb) pt 'Hello world'
(gdb) type = array [0..11] of char
(gdb) pt 'main'
type = function ....
Which is not really nice.
I wanted to wait until the pascal subdirectory of the testsuite
is added to start coping with this BIG problem...
Index: p-exp.y
===================================================================
RCS file: /cvs/src/src/gdb/p-exp.y,v
retrieving revision 1.36
diff -u -p -r1.36 p-exp.y
--- p-exp.y 3 Jul 2007 01:01:13 -0000 1.36
+++ p-exp.y 25 Sep 2007 15:52:23 -0000
@@ -1062,11 +1063,12 @@ yylex ()
int explen, tempbufindex;
static char *tempbuf;
static int tempbufsize;
+ int is_pascal_string;
retry:
prev_lexptr = lexptr;
-
+ is_pascal_string = 0;
tokstart = lexptr;
explen = strlen (lexptr);
/* See if it is a special token of length 3. */
@@ -1129,6 +1131,7 @@ yylex ()
error ("Unmatched single quote.");
namelen -= 2;
tokstart++;
+ is_pascal_string = 1;
uptokstart = uptok(tokstart,namelen);
goto tryname;
}
@@ -1648,6 +1651,16 @@ yylex ()
/* Any other kind of symbol */
yylval.ssym.sym = sym;
yylval.ssym.is_a_field_of_this = is_a_field_of_this;
+ if (!sym && is_pascal_string)
+ {
+ /* Handle this as a normal pascal string. */
+ tempbuf = (char *) realloc (tempbuf, namelen + 1);
+ strncpy (tempbuf, tokstart, namelen);
+ tempbuf[namelen] = '\0';
+ yylval.sval.ptr = tempbuf;
+ yylval.sval.length = namelen;
+ return (STRING);
+ }
return NAME;
}
}
> -----Original Message-----
> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] On Behalf Of 'Daniel Jacobowitz'
> Sent: Saturday, October 06, 2007 5:42 PM
> To: Pierre Muller
> Cc: gdb-patches@sourceware.org; gpc@gnu.de
> Subject: Re: [RFC] adding gdb.pascal subdir: updated version
>
> On Sat, Sep 08, 2007 at 12:38:47AM +0200, Pierre Muller wrote:
> > +proc test_string_literal_types_accepted {} {
> > + global gdb_prompt
> > +
> > + # Test various character values.
> > +
> > + gdb_test "pt 'a simple string'" "type = string"
> > +}
>
> Pierre, is this the correct Pascal syntax for a string or not?
>
> We have:
>
> case '\'':
> /* We either have a character constant ('0' or '\177' for
> example)
> or we have a quoted symbol reference ('foo(int,int)' in object
> pascal
> for example). */
>
> and there is a separate case for double-quoted strings.
>
> Resolving that question will take care of one failure for both fpc and
> gpc. The other two GPC failures should be handled like in the patch
> I've attached. The failure at "start" is a GDB bug, so we label that
> a KFAIL ("known failure"). The shouldn't be committed with gdb/NNNN
> still in it. It should either have a bug number in our bug database,
> or else just wait until the patch to fix it is checked in.
>
> The other test is definitely a bug in GPC. I read through the DWARF
> dump and there is no reference to line 10, so GDB will never display
> it. So that's an XFAIL, an expected failure due to our environment.
> It needs to get a little more complicated if the GPC bug is fixed
> some day, using gdb_test_multiple.
>
> --
> Daniel Jacobowitz
> CodeSourcery
>
> diff -u gdb.pascal/hello.exp gdb.pascal/hello.exp
> --- gdb.pascal/hello.exp 7 Sep 2007 21:46:31 -0000
> +++ gdb.pascal/hello.exp 6 Oct 2007 15:39:32 -0000
> @@ -50,6 +50,9 @@
> # This test fails for gpc
> # because debug information for 'main'
> # is in some <implicit code>
> +if { $pascal_compiler_is_gpc } {
> + setup_kfail *-*-* gdb/NNNN
> +}
> gdb_test "" \
> ".* at .*hello.pas.*" \
> "start"
> @@ -64,6 +67,9 @@
> # This test also fails for gpc because the program
> # stops after the string has been written
> # while it should stop before writing it
> +if { $pascal_compiler_is_gpc } {
> + setup_xfail *-*-*
> +}
> gdb_test "cont" \
> "Breakpoint .*:${bp_location2}.*" \
> "Going to second breakpoint"
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC] adding gdb.pascal subdir: updated version
2007-10-08 7:14 ` Pierre Muller
@ 2007-10-08 12:03 ` 'Daniel Jacobowitz'
2007-10-08 12:17 ` Pierre Muller
0 siblings, 1 reply; 13+ messages in thread
From: 'Daniel Jacobowitz' @ 2007-10-08 12:03 UTC (permalink / raw)
To: Pierre Muller; +Cc: gdb-patches, gpc
On Mon, Oct 08, 2007 at 09:14:28AM +0200, Pierre Muller wrote:
> I wanted to wait until the pascal subdirectory of the testsuite
> is added to start coping with this BIG problem...
OK, in that case that test should be XFAIL'd also. With the two
XFAILs the gdb.pascal changes are OK to commit. The start failure
will be sorted out soon too.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [RFC] adding gdb.pascal subdir: updated version
2007-10-08 12:03 ` 'Daniel Jacobowitz'
@ 2007-10-08 12:17 ` Pierre Muller
2007-10-08 12:42 ` 'Daniel Jacobowitz'
0 siblings, 1 reply; 13+ messages in thread
From: Pierre Muller @ 2007-10-08 12:17 UTC (permalink / raw)
To: 'Daniel Jacobowitz'; +Cc: gdb-patches
I am a bit lost in the numerous
changes that we introduced and I am
unsure that I have a current complete and up-to-date
patch, could you commit this change?
Otherwise, I will try to resend a RFA
so that we are sure that we are on the same version.
Pierre Muller
Pascal language maintainer
> -----Original Message-----
> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] On Behalf Of 'Daniel Jacobowitz'
> Sent: Monday, October 08, 2007 2:04 PM
> To: Pierre Muller
> Cc: gdb-patches@sourceware.org; gpc@gnu.de
> Subject: Re: [RFC] adding gdb.pascal subdir: updated version
>
> On Mon, Oct 08, 2007 at 09:14:28AM +0200, Pierre Muller wrote:
> > I wanted to wait until the pascal subdirectory of the testsuite
> > is added to start coping with this BIG problem...
>
> OK, in that case that test should be XFAIL'd also. With the two
> XFAILs the gdb.pascal changes are OK to commit. The start failure
> will be sorted out soon too.
>
>
> --
> Daniel Jacobowitz
> CodeSourcery
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC] adding gdb.pascal subdir: updated version
2007-10-08 12:17 ` Pierre Muller
@ 2007-10-08 12:42 ` 'Daniel Jacobowitz'
2007-10-08 13:42 ` Pierre Muller
0 siblings, 1 reply; 13+ messages in thread
From: 'Daniel Jacobowitz' @ 2007-10-08 12:42 UTC (permalink / raw)
To: Pierre Muller; +Cc: gdb-patches
On Mon, Oct 08, 2007 at 02:17:54PM +0200, Pierre Muller wrote:
> I am a bit lost in the numerous
> changes that we introduced and I am
> unsure that I have a current complete and up-to-date
> patch, could you commit this change?
Here's what I checked in. It has a KFAIL for the string type problem,
an XFAIL for gpc's missing line number, and a failure for the GPC
name-of-main issue (could have been a KFAIL but I was tired of waiting
for gnats, and it looks like it will be fixed soon).
--
Daniel Jacobowitz
CodeSourcery
2007-10-08 Pierre Muller <muller@ics.u-strasbg.fr>
Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (ALL_SUBDIRS): Add gdb.pascal.
* configure.ac (AC_OUTPUT): Add gdb.pascal/Makefile.
* configure: Regenerated.
* gdb.pascal/Makefile.in, gdb.pascal/hello.exp, gdb.pascal/hello.pas,
gdb.pascal/types.exp, lib/pascal.exp: New files.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/Makefile.in,v
retrieving revision 1.18
diff -u -p -r1.18 Makefile.in
--- Makefile.in 27 Mar 2007 18:09:35 -0000 1.18
+++ Makefile.in 8 Oct 2007 12:40:12 -0000
@@ -37,7 +37,7 @@ RPATH_ENVVAR = @RPATH_ENVVAR@
ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
gdb.dwarf2 \
gdb.fortran gdb.server gdb.java gdb.mi \
- gdb.objc gdb.threads gdb.trace gdb.xml \
+ gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
$(SUBDIRS)
EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
Index: configure
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure,v
retrieving revision 1.24
diff -u -p -r1.24 configure
--- configure 23 Sep 2007 13:56:56 -0000 1.24
+++ configure 8 Oct 2007 12:40:12 -0000
@@ -3104,7 +3104,7 @@ done
- ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
+ ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/configure.ac,v
retrieving revision 1.8
diff -u -p -r1.8 configure.ac
--- configure.ac 23 Sep 2007 13:56:56 -0000 1.8
+++ configure.ac 8 Oct 2007 12:40:12 -0000
@@ -115,6 +115,6 @@ AC_OUTPUT([Makefile \
gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
gdb.fortran/Makefile gdb.server/Makefile \
- gdb.java/Makefile gdb.mi/Makefile \
- gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
+ gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile \
+ gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile \
gdb.xml/Makefile])
Index: gdb.pascal/Makefile.in
===================================================================
RCS file: gdb.pascal/Makefile.in
diff -N gdb.pascal/Makefile.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/Makefile.in 8 Oct 2007 12:40:12 -0000
@@ -0,0 +1,24 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = hello/hello
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+ @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+ -find . -name '*.o' -print | xargs rm -f
+ -find . -name '*.ali' -print | xargs rm -f
+ -find . -name 'b~*.ad[sb]' -print | xargs rm -f
+ -rm -f *~ a.out xgdb *.x *.ci *.tmp
+ -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+ -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+ -rm -f $(MISCELLANEOUS) twice-tmp.c
+
+distclean maintainer-clean realclean: clean
+ -rm -f *~ core
+ -rm -f Makefile config.status config.log
+ -rm -f *-init.exp
+ -rm -fr *.log summary detail *.plog *.sum *.psum site.*
Index: gdb.pascal/hello.exp
===================================================================
RCS file: gdb.pascal/hello.exp
diff -N gdb.pascal/hello.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.exp 8 Oct 2007 12:40:12 -0000
@@ -0,0 +1,75 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+load_lib "pascal.exp"
+
+set testfile "hello"
+set srcfile ${testfile}.pas
+set binfile ${objdir}/${subdir}/${testfile}
+
+if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+ pass "setting breakpoint 1"
+}
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+ pass "setting breakpoint 2"
+}
+
+# Verify that "start" lands inside the right procedure.
+if { [gdb_start_cmd] < 0 } {
+ untested start
+ return -1
+}
+
+# This test fails for gpc
+# because debug information for 'main'
+# is in some <implicit code>
+gdb_test "" \
+ ".* at .*hello.pas.*" \
+ "start"
+
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location1}.*" \
+ "Going to first breakpoint"
+gdb_test "print st" \
+ ".* = ''.*" \
+ "Empty string check"
+
+# This test also fails for gpc because the program
+# stops after the string has been written
+# while it should stop before writing it
+if { $pascal_compiler_is_gpc } {
+ setup_xfail *-*-*
+}
+gdb_test "cont" \
+ "Breakpoint .*:${bp_location2}.*" \
+ "Going to second breakpoint"
+gdb_test "print st" \
+ ".* = 'Hello, world!'.*" \
+ "String after assignment check"
Index: gdb.pascal/hello.pas
===================================================================
RCS file: gdb.pascal/hello.pas
diff -N gdb.pascal/hello.pas
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/hello.pas 8 Oct 2007 12:40:12 -0000
@@ -0,0 +1,15 @@
+program hello;
+
+var
+ st : string;
+
+procedure print_hello;
+begin
+ Writeln('Before assignment'); { set breakpoint 1 here }
+ st:='Hello, world!';
+ writeln(st); {set breakpoint 2 here }
+end;
+
+begin
+ print_hello;
+end.
Index: gdb.pascal/types.exp
===================================================================
RCS file: gdb.pascal/types.exp
diff -N gdb.pascal/types.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb.pascal/types.exp 8 Oct 2007 12:40:12 -0000
@@ -0,0 +1,110 @@
+# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc.
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was adapted from old Chill tests by Stan Shebs
+# (shebs@cygnus.com).
+# Adapted to pascal by Pierre Muller
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+set prms_id 0
+set bug_id 0
+
+# Set the current language to pascal. This counts as a test. If it
+# fails, then we skip the other tests.
+
+proc set_lang_pascal {} {
+ global gdb_prompt
+
+ if [gdb_test "set language pascal" ""] {
+ return 0;
+ }
+
+ if ![gdb_test "show language" ".* source language is \"pascal\".*"] {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+proc test_integer_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various decimal values.
+ # Should be integer*4 probably.
+ gdb_test "pt 123" "type = int"
+}
+proc test_character_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ gdb_test "pt 'a'" "type = char"
+}
+
+proc test_string_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various character values.
+
+ setup_kfail *-*-* gdb/2326
+ gdb_test "pt 'a simple string'" "type = string"
+}
+
+proc test_logical_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test the only possible values for a logical, TRUE and FALSE.
+
+ gdb_test "pt TRUE" "type = bool"
+ gdb_test "pt FALSE" "type = bool"
+}
+
+proc test_float_literal_types_accepted {} {
+ global gdb_prompt
+
+ # Test various floating point formats
+
+ # this used to guess whether to look for "real*4" or
+ # "real*8" based on a target config variable, but noone
+ # maintained it properly.
+
+ gdb_test "pt .44" "type = double"
+ gdb_test "pt 44.0" "type = double"
+ gdb_test "pt 10e20" "type = double"
+ gdb_test "pt 10E20" "type = double"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_pascal] then {
+ test_integer_literal_types_accepted
+ test_logical_literal_types_accepted
+ test_character_literal_types_accepted
+ test_string_literal_types_accepted
+ test_float_literal_types_accepted
+} else {
+ warning "$test_name tests suppressed." 0
+}
Index: lib/pascal.exp
===================================================================
RCS file: lib/pascal.exp
diff -N lib/pascal.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lib/pascal.exp 8 Oct 2007 12:40:12 -0000
@@ -0,0 +1,152 @@
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib libgloss.exp
+
+set pascal_init_done 0
+
+# This procedure looks for a suitable pascal compiler
+# For now only GNU pascal compiler and Free Pascal compiler
+# are searched.
+# First, environment variable GPC is checked
+# if present, GPC compiler is assumed to be the value of
+# that environment variable.
+# Second, environment variable FPC is checked
+# if present, Free Pascal compiler is assumed to be the value of
+# that environment variable.
+# Third, gpc executable is searched using `which gpc`
+# Lastly, fpc executable is searched using `which fpc`
+# Using environment variable allows to force
+# which compiler is used in testsuite
+
+proc pascal_init {} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+ global gpc_compiler
+ global fpc_compiler
+ global env
+
+ if { $pascal_init_done == 1 } {
+ return
+ }
+
+ set pascal_compiler_is_gpc 0
+ set pascal_compiler_is_fpc 0
+ set gpc_compiler [transform gpc]
+ set fpc_compiler [transform fpc]
+
+ if ![is_remote host] {
+ if { [info exists env(GPC)] } {
+ set pascal_compiler_is_gpc 1
+ set gpc_compiler $env(GPC)
+ verbose -log "Assuming GNU Pascal ($gpc_compiler)"
+ } elseif { [info exists env(FPC)] } {
+ set pascal_compiler_is_fpc 1
+ set fpc_compiler $env(FPC)
+ verbose -log "Assuming Free Pascal ($fpc_compiler)"
+ } elseif { [which $gpc_compiler] != 0 } {
+ set pascal_compiler_is_gpc 1
+ verbose -log "GNU Pascal compiler found"
+ } elseif { [which $fpc_compiler] != 0 } {
+ set pascal_compiler_is_fpc 1
+ verbose -log "Free Pascal compiler found"
+ }
+ }
+ set pascal_init_done 1
+}
+
+proc gpc_compile {source dest type options} {
+ global gpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -c"
+ }
+
+ if { $type == "preprocess" } {
+ append add_flags " -E"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -S"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $gpc_compiler "-o $dest --automake $add_flags $source"]
+ return $result
+}
+
+proc fpc_compile {source dest type options} {
+ global fpc_compiler
+ set add_flags ""
+ if {$type == "object"} {
+ append add_flags " -Cn"
+ }
+
+ if { $type == "preprocess" } {
+ return "Free Pascal can not preprocess"
+ }
+
+ if { $type == "assembly" } {
+ append add_flags " -al"
+ }
+
+ foreach i $options {
+ if { $i == "debug" } {
+ if [board_info $dest exists debug_flags] {
+ append add_flags " [board_info $dest debug_flags]";
+ } else {
+ append add_flags " -g"
+ }
+ }
+ }
+
+ set result [remote_exec host $fpc_compiler "-o$dest $add_flags $source"]
+ return $result
+}
+
+proc gdb_compile_pascal {source dest type options} {
+ global pascal_init_done
+ global pascal_compiler_is_gpc
+ global pascal_compiler_is_fpc
+
+ if { $pascal_init_done == 0 } {
+ pascal_init
+ }
+
+ if { $pascal_compiler_is_fpc == 1 } {
+ set result [fpc_compile $source $dest $type $options]
+ } elseif { $pascal_compiler_is_gpc == 1 } {
+ set result [gpc_compile $source $dest $type $options]
+ } else {
+ unsupported "No pascal compiler found"
+ return "No pascal compiler. Compilation failed."
+ }
+
+ if ![file exists $dest] {
+ unsupported "Pascal compilation failed: $result"
+ return "Pascal compilation failed."
+ }
+}
+
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [RFC] adding gdb.pascal subdir: updated version
2007-10-08 12:42 ` 'Daniel Jacobowitz'
@ 2007-10-08 13:42 ` Pierre Muller
2007-10-08 13:56 ` 'Daniel Jacobowitz'
0 siblings, 1 reply; 13+ messages in thread
From: Pierre Muller @ 2007-10-08 13:42 UTC (permalink / raw)
To: 'Daniel Jacobowitz'; +Cc: gdb-patches, gpc
Thanks for checking this in...
Running
"make RUNTESTFLAGS=--dir=gdb.pascal"
I got the following result with GPC:
=== gdb Summary ===
# of expected passes 15
# of unexpected failures 1
# of expected failures 1
# of known failures 1
/usr/local/src/cvs/build/gdb/testsuite/../../gdb/gdb version
6.7.50-20071008-cvs -nx
The problem with fpc is that it does not work with cygwin,
because cygwin type directories are used, that fpc does not handle.
And I have no access to a linux machine here...
The gpc specific failure should disappear as soon as
I get the pascal_main_name patch in.
The known failure is about the string problem,
for which I have a fix (only partial) pending.
The expected failure is gpc specific too, and
comes from the wrong debug information generated.
By the way, is this dependent on the type of debug info generated?
Does stabs and dwarf both generate the wrong line number information?
Pierre Muller
GDB pascal language maintainer
> -----Original Message-----
> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] On Behalf Of 'Daniel Jacobowitz'
> Sent: Monday, October 08, 2007 2:42 PM
> To: Pierre Muller
> Cc: gdb-patches@sourceware.org
> Subject: Re: [RFC] adding gdb.pascal subdir: updated version
>
> On Mon, Oct 08, 2007 at 02:17:54PM +0200, Pierre Muller wrote:
> > I am a bit lost in the numerous
> > changes that we introduced and I am
> > unsure that I have a current complete and up-to-date
> > patch, could you commit this change?
>
> Here's what I checked in. It has a KFAIL for the string type problem,
> an XFAIL for gpc's missing line number, and a failure for the GPC
> name-of-main issue (could have been a KFAIL but I was tired of waiting
> for gnats, and it looks like it will be fixed soon).
>
>
> --
> Daniel Jacobowitz
> CodeSourcery
>
> 2007-10-08 Pierre Muller <muller@ics.u-strasbg.fr>
> Daniel Jacobowitz <dan@codesourcery.com>
>
> * Makefile.in (ALL_SUBDIRS): Add gdb.pascal.
> * configure.ac (AC_OUTPUT): Add gdb.pascal/Makefile.
> * configure: Regenerated.
> * gdb.pascal/Makefile.in, gdb.pascal/hello.exp,
> gdb.pascal/hello.pas,
> gdb.pascal/types.exp, lib/pascal.exp: New files.
>
> Index: Makefile.in
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/Makefile.in,v
> retrieving revision 1.18
> diff -u -p -r1.18 Makefile.in
> --- Makefile.in 27 Mar 2007 18:09:35 -0000 1.18
> +++ Makefile.in 8 Oct 2007 12:40:12 -0000
> @@ -37,7 +37,7 @@ RPATH_ENVVAR = @RPATH_ENVVAR@
> ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
> gdb.dwarf2 \
> gdb.fortran gdb.server gdb.java gdb.mi \
> - gdb.objc gdb.threads gdb.trace gdb.xml \
> + gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
> $(SUBDIRS)
>
> EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
> Index: configure
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/configure,v
> retrieving revision 1.24
> diff -u -p -r1.24 configure
> --- configure 23 Sep 2007 13:56:56 -0000 1.24
> +++ configure 8 Oct 2007 12:40:12 -0000
> @@ -3104,7 +3104,7 @@ done
>
>
>
> -
> ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
> gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
> gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
> gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
> gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
> +
> ac_config_files="$ac_config_files Makefile gdb.ada/Makefile
> gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile
> gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile
> gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile
> gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile
> gdb.xml/Makefile"
> cat >confcache <<\_ACEOF
> # This file is a shell script that caches the results of configure
> # tests run on this system so they can be shared between configure
> Index: configure.ac
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/configure.ac,v
> retrieving revision 1.8
> diff -u -p -r1.8 configure.ac
> --- configure.ac 23 Sep 2007 13:56:56 -0000 1.8
> +++ configure.ac 8 Oct 2007 12:40:12 -0000
> @@ -115,6 +115,6 @@ AC_OUTPUT([Makefile \
> gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
> gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
> gdb.fortran/Makefile gdb.server/Makefile \
> - gdb.java/Makefile gdb.mi/Makefile \
> - gdb.objc/Makefile gdb.threads/Makefile gdb.trace/Makefile \
> + gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile \
> + gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile \
> gdb.xml/Makefile])
> Index: gdb.pascal/Makefile.in
> ===================================================================
> RCS file: gdb.pascal/Makefile.in
> diff -N gdb.pascal/Makefile.in
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/Makefile.in 8 Oct 2007 12:40:12 -0000
> @@ -0,0 +1,24 @@
> +VPATH = @srcdir@
> +srcdir = @srcdir@
> +
> +EXECUTABLES = hello/hello
> +
> +MISCELLANEOUS =
> +
> +all info install-info dvi install uninstall installcheck check:
> + @echo "Nothing to be done for $@..."
> +
> +clean mostlyclean:
> + -find . -name '*.o' -print | xargs rm -f
> + -find . -name '*.ali' -print | xargs rm -f
> + -find . -name 'b~*.ad[sb]' -print | xargs rm -f
> + -rm -f *~ a.out xgdb *.x *.ci *.tmp
> + -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
> + -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
> + -rm -f $(MISCELLANEOUS) twice-tmp.c
> +
> +distclean maintainer-clean realclean: clean
> + -rm -f *~ core
> + -rm -f Makefile config.status config.log
> + -rm -f *-init.exp
> + -rm -fr *.log summary detail *.plog *.sum *.psum site.*
> Index: gdb.pascal/hello.exp
> ===================================================================
> RCS file: gdb.pascal/hello.exp
> diff -N gdb.pascal/hello.exp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/hello.exp 8 Oct 2007 12:40:12 -0000
> @@ -0,0 +1,75 @@
> +# Copyright 2007 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see
> <http://www.gnu.org/licenses/>.
> +
> +if $tracelevel then {
> + strace $tracelevel
> +}
> +
> +load_lib "pascal.exp"
> +
> +set testfile "hello"
> +set srcfile ${testfile}.pas
> +set binfile ${objdir}/${subdir}/${testfile}
> +
> +if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}"
> executable [list debug ]] != "" } {
> + return -1
> +}
> +
> +gdb_exit
> +gdb_start
> +gdb_reinitialize_dir $srcdir/$subdir
> +gdb_load ${binfile}
> +set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
> +set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
> +
> +if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
> + pass "setting breakpoint 1"
> +}
> +if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
> + pass "setting breakpoint 2"
> +}
> +
> +# Verify that "start" lands inside the right procedure.
> +if { [gdb_start_cmd] < 0 } {
> + untested start
> + return -1
> +}
> +
> +# This test fails for gpc
> +# because debug information for 'main'
> +# is in some <implicit code>
> +gdb_test "" \
> + ".* at .*hello.pas.*" \
> + "start"
> +
> +gdb_test "cont" \
> + "Breakpoint .*:${bp_location1}.*" \
> + "Going to first breakpoint"
> +gdb_test "print st" \
> + ".* = ''.*" \
> + "Empty string check"
> +
> +# This test also fails for gpc because the program
> +# stops after the string has been written
> +# while it should stop before writing it
> +if { $pascal_compiler_is_gpc } {
> + setup_xfail *-*-*
> +}
> +gdb_test "cont" \
> + "Breakpoint .*:${bp_location2}.*" \
> + "Going to second breakpoint"
> +gdb_test "print st" \
> + ".* = 'Hello, world!'.*" \
> + "String after assignment check"
> Index: gdb.pascal/hello.pas
> ===================================================================
> RCS file: gdb.pascal/hello.pas
> diff -N gdb.pascal/hello.pas
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/hello.pas 8 Oct 2007 12:40:12 -0000
> @@ -0,0 +1,15 @@
> +program hello;
> +
> +var
> + st : string;
> +
> +procedure print_hello;
> +begin
> + Writeln('Before assignment'); { set breakpoint 1 here }
> + st:='Hello, world!';
> + writeln(st); {set breakpoint 2 here }
> +end;
> +
> +begin
> + print_hello;
> +end.
> Index: gdb.pascal/types.exp
> ===================================================================
> RCS file: gdb.pascal/types.exp
> diff -N gdb.pascal/types.exp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb.pascal/types.exp 8 Oct 2007 12:40:12 -0000
> @@ -0,0 +1,110 @@
> +# Copyright 1994, 1995, 1997, 1998, 2007 Free Software Foundation,
> Inc.
> +# Copyright 2007 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see
> <http://www.gnu.org/licenses/>.
> +
> +# Please email any bugs, comments, and/or additions to this file to:
> +# bug-gdb@prep.ai.mit.edu
> +
> +# This file was adapted from old Chill tests by Stan Shebs
> +# (shebs@cygnus.com).
> +# Adapted to pascal by Pierre Muller
> +
> +if $tracelevel then {
> + strace $tracelevel
> +}
> +
> +set prms_id 0
> +set bug_id 0
> +
> +# Set the current language to pascal. This counts as a test. If it
> +# fails, then we skip the other tests.
> +
> +proc set_lang_pascal {} {
> + global gdb_prompt
> +
> + if [gdb_test "set language pascal" ""] {
> + return 0;
> + }
> +
> + if ![gdb_test "show language" ".* source language is
> \"pascal\".*"] {
> + return 1;
> + } else {
> + return 0;
> + }
> +}
> +
> +proc test_integer_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various decimal values.
> + # Should be integer*4 probably.
> + gdb_test "pt 123" "type = int"
> +}
> +proc test_character_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various character values.
> +
> + gdb_test "pt 'a'" "type = char"
> +}
> +
> +proc test_string_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various character values.
> +
> + setup_kfail *-*-* gdb/2326
> + gdb_test "pt 'a simple string'" "type = string"
> +}
> +
> +proc test_logical_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test the only possible values for a logical, TRUE and FALSE.
> +
> + gdb_test "pt TRUE" "type = bool"
> + gdb_test "pt FALSE" "type = bool"
> +}
> +
> +proc test_float_literal_types_accepted {} {
> + global gdb_prompt
> +
> + # Test various floating point formats
> +
> + # this used to guess whether to look for "real*4" or
> + # "real*8" based on a target config variable, but noone
> + # maintained it properly.
> +
> + gdb_test "pt .44" "type = double"
> + gdb_test "pt 44.0" "type = double"
> + gdb_test "pt 10e20" "type = double"
> + gdb_test "pt 10E20" "type = double"
> +}
> +
> +# Start with a fresh gdb.
> +
> +gdb_exit
> +gdb_start
> +gdb_reinitialize_dir $srcdir/$subdir
> +
> +if [set_lang_pascal] then {
> + test_integer_literal_types_accepted
> + test_logical_literal_types_accepted
> + test_character_literal_types_accepted
> + test_string_literal_types_accepted
> + test_float_literal_types_accepted
> +} else {
> + warning "$test_name tests suppressed." 0
> +}
> Index: lib/pascal.exp
> ===================================================================
> RCS file: lib/pascal.exp
> diff -N lib/pascal.exp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ lib/pascal.exp 8 Oct 2007 12:40:12 -0000
> @@ -0,0 +1,152 @@
> +# Copyright 2007 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see
> <http://www.gnu.org/licenses/>.
> +
> +load_lib libgloss.exp
> +
> +set pascal_init_done 0
> +
> +# This procedure looks for a suitable pascal compiler
> +# For now only GNU pascal compiler and Free Pascal compiler
> +# are searched.
> +# First, environment variable GPC is checked
> +# if present, GPC compiler is assumed to be the value of
> +# that environment variable.
> +# Second, environment variable FPC is checked
> +# if present, Free Pascal compiler is assumed to be the value of
> +# that environment variable.
> +# Third, gpc executable is searched using `which gpc`
> +# Lastly, fpc executable is searched using `which fpc`
> +# Using environment variable allows to force
> +# which compiler is used in testsuite
> +
> +proc pascal_init {} {
> + global pascal_init_done
> + global pascal_compiler_is_gpc
> + global pascal_compiler_is_fpc
> + global gpc_compiler
> + global fpc_compiler
> + global env
> +
> + if { $pascal_init_done == 1 } {
> + return
> + }
> +
> + set pascal_compiler_is_gpc 0
> + set pascal_compiler_is_fpc 0
> + set gpc_compiler [transform gpc]
> + set fpc_compiler [transform fpc]
> +
> + if ![is_remote host] {
> + if { [info exists env(GPC)] } {
> + set pascal_compiler_is_gpc 1
> + set gpc_compiler $env(GPC)
> + verbose -log "Assuming GNU Pascal ($gpc_compiler)"
> + } elseif { [info exists env(FPC)] } {
> + set pascal_compiler_is_fpc 1
> + set fpc_compiler $env(FPC)
> + verbose -log "Assuming Free Pascal ($fpc_compiler)"
> + } elseif { [which $gpc_compiler] != 0 } {
> + set pascal_compiler_is_gpc 1
> + verbose -log "GNU Pascal compiler found"
> + } elseif { [which $fpc_compiler] != 0 } {
> + set pascal_compiler_is_fpc 1
> + verbose -log "Free Pascal compiler found"
> + }
> + }
> + set pascal_init_done 1
> +}
> +
> +proc gpc_compile {source dest type options} {
> + global gpc_compiler
> + set add_flags ""
> + if {$type == "object"} {
> + append add_flags " -c"
> + }
> +
> + if { $type == "preprocess" } {
> + append add_flags " -E"
> + }
> +
> + if { $type == "assembly" } {
> + append add_flags " -S"
> + }
> +
> + foreach i $options {
> + if { $i == "debug" } {
> + if [board_info $dest exists debug_flags] {
> + append add_flags " [board_info $dest debug_flags]";
> + } else {
> + append add_flags " -g"
> + }
> + }
> + }
> +
> + set result [remote_exec host $gpc_compiler "-o $dest --automake
> $add_flags $source"]
> + return $result
> +}
> +
> +proc fpc_compile {source dest type options} {
> + global fpc_compiler
> + set add_flags ""
> + if {$type == "object"} {
> + append add_flags " -Cn"
> + }
> +
> + if { $type == "preprocess" } {
> + return "Free Pascal can not preprocess"
> + }
> +
> + if { $type == "assembly" } {
> + append add_flags " -al"
> + }
> +
> + foreach i $options {
> + if { $i == "debug" } {
> + if [board_info $dest exists debug_flags] {
> + append add_flags " [board_info $dest debug_flags]";
> + } else {
> + append add_flags " -g"
> + }
> + }
> + }
> +
> + set result [remote_exec host $fpc_compiler "-o$dest $add_flags
> $source"]
> + return $result
> +}
> +
> +proc gdb_compile_pascal {source dest type options} {
> + global pascal_init_done
> + global pascal_compiler_is_gpc
> + global pascal_compiler_is_fpc
> +
> + if { $pascal_init_done == 0 } {
> + pascal_init
> + }
> +
> + if { $pascal_compiler_is_fpc == 1 } {
> + set result [fpc_compile $source $dest $type $options]
> + } elseif { $pascal_compiler_is_gpc == 1 } {
> + set result [gpc_compile $source $dest $type $options]
> + } else {
> + unsupported "No pascal compiler found"
> + return "No pascal compiler. Compilation failed."
> + }
> +
> + if ![file exists $dest] {
> + unsupported "Pascal compilation failed: $result"
> + return "Pascal compilation failed."
> + }
> +}
> +
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [RFC] adding gdb.pascal subdir: updated version
2007-10-08 13:42 ` Pierre Muller
@ 2007-10-08 13:56 ` 'Daniel Jacobowitz'
0 siblings, 0 replies; 13+ messages in thread
From: 'Daniel Jacobowitz' @ 2007-10-08 13:56 UTC (permalink / raw)
To: Pierre Muller; +Cc: gdb-patches
On Mon, Oct 08, 2007 at 03:42:33PM +0200, Pierre Muller wrote:
> By the way, is this dependent on the type of debug info generated?
> Does stabs and dwarf both generate the wrong line number information?
I don't know, but it's likely. My desktop is AMD64 so I can not
really test stabs.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2007-10-08 13:56 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <000601c77c0a$26b91750$742b45f0$@u-strasbg.fr>
[not found] ` <20070412154722.GA4189@caradoc.them.org>
[not found] ` <001201c77de2$008bc7b0$01a35710$@u-strasbg.fr>
[not found] ` <002a01c7b3cf$1cd594f0$5680bed0$@u-strasbg.fr>
[not found] ` <20070705143246.GA4958@caradoc.them.org>
2007-07-17 22:17 ` [RFC] adding gdb.pascal subdir Pierre Muller
2007-07-18 9:16 ` 'Daniel Jacobowitz'
2007-07-18 12:39 ` Pierre Muller
2007-09-07 22:16 ` [RFC] adding gdb.pascal subdir: updated version Pierre Muller
2007-09-07 22:38 ` Pierre Muller
2007-09-07 22:45 ` Maxim Grigoriev
2007-10-06 15:42 ` 'Daniel Jacobowitz'
2007-10-08 7:14 ` Pierre Muller
2007-10-08 12:03 ` 'Daniel Jacobowitz'
2007-10-08 12:17 ` Pierre Muller
2007-10-08 12:42 ` 'Daniel Jacobowitz'
2007-10-08 13:42 ` Pierre Muller
2007-10-08 13:56 ` 'Daniel Jacobowitz'
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox