mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-23 13:21:43 +08:00
This commit is the result of running the gdb/copyright.py script, which automated the update of the copyright year range for all source files managed by the GDB project to be updated to include year 2023.
118 lines
3.8 KiB
Plaintext
118 lines
3.8 KiB
Plaintext
# Copyright 2020-2023 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/>.
|
|
|
|
# Magic constants used to calculate a starting address when linking
|
|
# "jit" shared libraries. When loaded, will be mapped by jit-elf-main
|
|
# to the same address.
|
|
|
|
set jit_load_address 0x7000000
|
|
set jit_load_increment 0x1000000
|
|
|
|
# Compile jit-elf-main.c as an executable.
|
|
#
|
|
# BINSUFFIX is appended to the binary name.
|
|
# OPTIONS is passed to gdb_compile when compiling the program.
|
|
#
|
|
# On success, return 0.
|
|
# On failure, return -1.
|
|
proc compile_jit_main {main_srcfile main_binfile options} {
|
|
global jit_load_address jit_load_increment
|
|
|
|
set options [concat \
|
|
$options \
|
|
additional_flags=-DLOAD_ADDRESS=$jit_load_address \
|
|
additional_flags=-DLOAD_INCREMENT=$jit_load_increment \
|
|
debug]
|
|
|
|
if { [gdb_compile ${main_srcfile} ${main_binfile} \
|
|
executable $options] != "" } {
|
|
set f [file tail $main_binfile]
|
|
untested "failed to compile $f"
|
|
return -1
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
# Compile jit-elf-main.c as a shared library.
|
|
#
|
|
# OPTIONS is passed to gdb_compile when compiling the program.
|
|
#
|
|
# On success, return 0.
|
|
# On failure, return -1.
|
|
proc compile_jit_elf_main_as_so {main_solib_srcfile main_solib_binfile options} {
|
|
global jit_load_address jit_load_increment
|
|
|
|
set options [concat \
|
|
$options \
|
|
additional_flags=-DLOAD_ADDRESS=$jit_load_address \
|
|
additional_flags=-DLOAD_INCREMENT=$jit_load_increment \
|
|
debug]
|
|
|
|
if { [gdb_compile_shlib ${main_solib_srcfile} ${main_solib_binfile} \
|
|
$options] != "" } {
|
|
set f [file tail $main_solib_binfile]
|
|
untested "failed to compile shared library $f"
|
|
return -1
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
# Compile jit-elf-solib.c as a shared library in multiple copies and
|
|
# upload them to the target.
|
|
#
|
|
# OPTIONS_LIST is a list of additional options to pass through to
|
|
# gdb_compile_shlib.
|
|
#
|
|
# On success, return a list of target path to the shared libraries.
|
|
# On failure, return -1.
|
|
proc compile_and_download_n_jit_so {jit_solib_basename jit_solib_srcfile \
|
|
count {options_list {}}} {
|
|
global jit_load_address jit_load_increment
|
|
set binfiles_target {}
|
|
|
|
for {set i 1} {$i <= $count} {incr i} {
|
|
set binfile [standard_output_file ${jit_solib_basename}.$i.so]
|
|
|
|
# Note: compiling without debug info by default: some test
|
|
# do symbol renaming by munging on ELF symbol table, and that
|
|
# wouldn't work for .debug sections. Also, output for "info
|
|
# function" changes when debug info is present.
|
|
set addr [format 0x%x [expr $jit_load_address + $jit_load_increment * [expr $i-1]]]
|
|
|
|
# Use "text_segment=..." to ask the linker to relocate everything in the
|
|
# compiled shared library against a fixed base address. Combined
|
|
# with mapping the resulting binary to the same fixed base it allows
|
|
# to dynamically execute functions from it without any further adjustments.
|
|
set fname [format "jit_function_%04d" $i]
|
|
set options [list \
|
|
${options_list} \
|
|
additional_flags=-DFUNCTION_NAME=$fname \
|
|
text_segment=$addr]
|
|
if { [gdb_compile_shlib ${jit_solib_srcfile} ${binfile} \
|
|
$options] != "" } {
|
|
set f [file tail $binfile]
|
|
untested "failed to compile shared library $f"
|
|
return -1
|
|
}
|
|
|
|
set path [gdb_remote_download target ${binfile}]
|
|
lappend binfiles_target $path
|
|
}
|
|
|
|
return $binfiles_target
|
|
}
|