mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-12 20:58:48 +00:00
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.
This commit is contained in:
parent
4d43927194
commit
a912286e38
@ -1,3 +1,12 @@
|
||||
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.
|
||||
|
||||
2007-10-02 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* gdb.cp/classes.exp (do_tests): Always step to the line after the
|
||||
|
@ -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 \
|
||||
|
2
gdb/testsuite/configure
vendored
2
gdb/testsuite/configure
vendored
@ -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
|
||||
|
@ -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])
|
||||
|
24
gdb/testsuite/gdb.pascal/Makefile.in
Normal file
24
gdb/testsuite/gdb.pascal/Makefile.in
Normal file
@ -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.*
|
75
gdb/testsuite/gdb.pascal/hello.exp
Normal file
75
gdb/testsuite/gdb.pascal/hello.exp
Normal file
@ -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"
|
15
gdb/testsuite/gdb.pascal/hello.pas
Normal file
15
gdb/testsuite/gdb.pascal/hello.pas
Normal file
@ -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.
|
110
gdb/testsuite/gdb.pascal/types.exp
Normal file
110
gdb/testsuite/gdb.pascal/types.exp
Normal file
@ -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
|
||||
}
|
152
gdb/testsuite/lib/pascal.exp
Normal file
152
gdb/testsuite/lib/pascal.exp
Normal file
@ -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."
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user