mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
186 lines
5.0 KiB
Plaintext
186 lines
5.0 KiB
Plaintext
# Copyright 2007-2022 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
|
|
gdb_persistent_global pascal_compiler_is_gpc
|
|
gdb_persistent_global pascal_compiler_is_fpc
|
|
gdb_persistent_global gpc_compiler
|
|
gdb_persistent_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 destfile type options} {
|
|
global gpc_compiler
|
|
set add_flags ""
|
|
set dest [target_info name]
|
|
|
|
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"
|
|
}
|
|
}
|
|
if { $i == "class" } {
|
|
if [board_info $dest exists pascal_class_flags] {
|
|
append add_flags " [board_info $dest pascal_class_flags]"
|
|
} else {
|
|
append add_flags " --extended-syntax"
|
|
}
|
|
}
|
|
}
|
|
|
|
set result [remote_exec host $gpc_compiler "-o $destfile --automake $add_flags $source"]
|
|
return $result
|
|
}
|
|
|
|
proc fpc_compile {source destfile type options} {
|
|
global fpc_compiler
|
|
set add_flags ""
|
|
set dest [target_info name]
|
|
|
|
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"
|
|
}
|
|
}
|
|
if { $i == "class" } {
|
|
if [board_info $dest exists pascal_class_flags] {
|
|
append add_flags " [board_info $dest pascal_class_flags]"
|
|
} else {
|
|
append add_flags " -Mobjfpc"
|
|
}
|
|
}
|
|
}
|
|
|
|
set result [remote_exec host $fpc_compiler "-o$destfile $add_flags $source"]
|
|
return $result
|
|
}
|
|
|
|
proc gdb_compile_pascal {source destfile type options} {
|
|
global pascal_init_done
|
|
global pascal_compiler_is_gpc
|
|
global pascal_compiler_is_fpc
|
|
|
|
if { $pascal_init_done == 0 } {
|
|
pascal_init
|
|
}
|
|
|
|
file delete $destfile
|
|
|
|
if { $pascal_compiler_is_fpc == 1 } {
|
|
set result [fpc_compile $source $destfile $type $options]
|
|
} elseif { $pascal_compiler_is_gpc == 1 } {
|
|
set result [gpc_compile $source $destfile $type $options]
|
|
} else {
|
|
unsupported "no pascal compiler found"
|
|
return "No pascal compiler. Compilation failed."
|
|
}
|
|
|
|
if ![file exists $destfile] {
|
|
unsupported "Pascal compilation failed: $result"
|
|
return "Pascal compilation failed."
|
|
}
|
|
}
|
|
|
|
# Auxiliary function to set the language to pascal.
|
|
# The result is 1 (true) for success, 0 (false) for failure.
|
|
|
|
proc set_lang_pascal {} {
|
|
if [gdb_test_no_output "set language pascal"] {
|
|
return 0
|
|
}
|
|
if [gdb_test "show language" ".* source language is \"pascal\"." \
|
|
"set language to \"pascal\""] {
|
|
return 0
|
|
}
|
|
return 1
|
|
}
|