This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


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

Re: [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."
+    }
+}
+


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