From: Mihails Strasuns <mihails.strasuns@intel.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v2 5/8] [gdb/testsuite] add lib/jit-elf-helpers.exp
Date: Fri, 27 Mar 2020 11:39:29 +0100 [thread overview]
Message-ID: <20200327103932.17765-5-mihails.strasuns@intel.com> (raw)
In-Reply-To: <20200327103932.17765-1-mihails.strasuns@intel.com>
New utility library to be used by jit-elf tests responsible for
compiling binary artifacts. In the next commit the compilation process
will become more complicated because of extra mandatory flag - keeping
it in one place will make tests less fragile.
gdb/testsuite/ChangeLog:
2020-02-18 Mihails Strasuns <mihails.strasuns@intel.com>
* lib/jit-elf-helpers.exp: new file
* gdb.base/jit-elf.exp: updated to use jit-elf-helpers.exp
* gdb.base/jit-elf-so.exp: updated to use jit-elf-helpers.exp
Change-Id: I2fda518406aeca55e82df45edd67cef149497bbe
Signed-off-by: Mihails Strasuns <mihails.strasuns@intel.com>
---
gdb/testsuite/gdb.base/jit-elf-so.exp | 71 +++++++-----------------
gdb/testsuite/gdb.base/jit-elf.exp | 46 +++-------------
gdb/testsuite/lib/jit-elf-helpers.exp | 77 +++++++++++++++++++++++++++
3 files changed, 102 insertions(+), 92 deletions(-)
create mode 100644 gdb/testsuite/lib/jit-elf-helpers.exp
diff --git a/gdb/testsuite/gdb.base/jit-elf-so.exp b/gdb/testsuite/gdb.base/jit-elf-so.exp
index ac3e41e8c6..0a1fee2967 100644
--- a/gdb/testsuite/gdb.base/jit-elf-so.exp
+++ b/gdb/testsuite/gdb.base/jit-elf-so.exp
@@ -26,67 +26,34 @@ if {[get_compiler_info]} {
return 1
}
-proc compile_jit_main {options} {
- global srcdir subdir testfile2 srcfile2 binfile2
- set testfile2 jit-elf-main
- set srcfile2 ${testfile2}.c
- set binfile2 [standard_output_file $testfile2.so]
- set options [concat \
- $options \
- debug]
- if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" \
- $options] != "" } {
- untested "Failure to compile jit-elf-main"
- }
-}
+load_lib jit-elf-helpers.exp
+
+global testfile srcfile binfile solib_binfile_targets
+lassign [compile_jit_main_as_so "" {}] testfile srcfile binfile
+set solib_binfile_targets [compile_n_jit_so 2 "" {}]
proc compile_jit_dlmain {options} {
- global srcdir subdir testfile srcfile binfile
- set testfile jit-elf-dlmain
- set srcfile ${testfile}.c
- set binfile [standard_output_file $testfile]
+ global srcdir subdir testfile_dlmain srcfile_dlmain
+ set testfile_dlmain jit-elf-dlmain
+ set srcfile_dlmain ${testfile_dlmain}.c
+ set binfile [standard_output_file $testfile_dlmain]
set options [concat \
$options \
debug]
- if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile_dlmain}" "${binfile}" \
executable $options] != "" } {
untested "Failure to compile jit-elf-main"
}
}
-proc compile_n_jit_so {count options} {
- global srcdir subdir solib_binfile_targets
- set solib_binfile_targets {}
- set solib_testfile jit-elf-solib
-
- for {set i 1} {$i <= $count} {incr i} {
- set solib_binfile [standard_output_file ${solib_testfile}.so.$i]
- set solib_srcfile "${srcdir}/${subdir}/${solib_testfile}.c"
- set solib_binfile_test_msg "SHLIBDIR/${solib_testfile}.so.$i"
-
- # 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.
- if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} $options] != "" } {
- untested "Failure to compile ${solib_binfile_test_msg}"
- }
-
- set path [gdb_remote_download target ${solib_binfile}]
- set solib_binfile_targets [concat $solib_binfile_targets $path]
- }
-}
-
-compile_jit_main {additional_flags="-DMAIN=jit_dl_main"}
compile_jit_dlmain {shlib_load}
-compile_n_jit_so 2 {}
proc one_jit_test {count match_str} {
with_test_prefix "one_jit_test-$count" {
- global verbose testfile srcfile2 binfile2 binfile2_dlopen solib_binfile_targets
+ global verbose testfile_dlmain srcfile_dlmain srcfile binfile solib_binfile_targets
- clean_restart $testfile
- gdb_load_shlib $binfile2
+ clean_restart $testfile_dlmain
+ gdb_load_shlib $binfile
# This is just to help debugging when things fail
if {$verbose > 0} {
@@ -98,12 +65,12 @@ proc one_jit_test {count match_str} {
return
}
- gdb_breakpoint [gdb_get_line_number "break here before-dlopen" ]
+ gdb_breakpoint [gdb_get_line_number "break here before-dlopen" $srcfile_dlmain]
gdb_continue_to_breakpoint "break here before-dlopen"
# Poke desired values directly into inferior instead of using "set args"
# because "set args" does not work under gdbserver.
- gdb_test_no_output "set var jit_libname = \"$binfile2\""
+ gdb_test_no_output "set var jit_libname = \"$binfile\""
incr count
gdb_test "set var argc=$count"
gdb_test "set var argv=malloc(sizeof(char*)*$count)"
@@ -111,13 +78,13 @@ proc one_jit_test {count match_str} {
gdb_test "set var argv\[$i\]=\"[lindex $solib_binfile_targets [expr $i-1]]\""
}
- gdb_breakpoint [gdb_get_line_number "break here after-dlopen" ]
+ gdb_breakpoint [gdb_get_line_number "break here after-dlopen" $srcfile_dlmain]
gdb_continue_to_breakpoint "break here after-dlopen"
- gdb_breakpoint "$srcfile2:[gdb_get_line_number {break here 0} $srcfile2]"
+ gdb_breakpoint "$srcfile:[gdb_get_line_number {break here 0} $srcfile]"
gdb_continue_to_breakpoint "break here 0"
- gdb_breakpoint "$srcfile2:[gdb_get_line_number {break here 1} $srcfile2]"
+ gdb_breakpoint "$srcfile:[gdb_get_line_number {break here 1} $srcfile]"
gdb_continue_to_breakpoint "break here 1"
gdb_test "info function jit_function" "$match_str"
@@ -128,7 +95,7 @@ proc one_jit_test {count match_str} {
gdb_test "maintenance info break"
}
- gdb_breakpoint "$srcfile2:[gdb_get_line_number {break here 2} $srcfile2]"
+ gdb_breakpoint "$srcfile:[gdb_get_line_number {break here 2} $srcfile]"
gdb_continue_to_breakpoint "break here 2"
# All jit librares must have been unregistered
gdb_test "info function jit_function" \
diff --git a/gdb/testsuite/gdb.base/jit-elf.exp b/gdb/testsuite/gdb.base/jit-elf.exp
index 400adfc001..c354ef8226 100644
--- a/gdb/testsuite/gdb.base/jit-elf.exp
+++ b/gdb/testsuite/gdb.base/jit-elf.exp
@@ -23,42 +23,10 @@ if {[get_compiler_info]} {
return 1
}
-proc compile_jit_main {binsuffix options} {
- global srcdir subdir testfile srcfile binfile
- set testfile jit-elf-main
- set srcfile ${testfile}.c
- set binfile [standard_output_file $testfile$binsuffix]
- set options [concat \
- $options \
- debug]
- if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
- executable $options] != "" } {
- untested "Failure to compile jit-elf-main"
- }
-}
+load_lib jit-elf-helpers.exp
-proc compile_n_jit_so {count options} {
- global srcdir subdir solib_binfile_targets
- set solib_binfile_targets {}
- set solib_testfile jit-elf-solib
-
- for {set i 1} {$i <= $count} {incr i} {
- set solib_binfile [standard_output_file ${solib_testfile}.so.$i]
- set solib_srcfile "${srcdir}/${subdir}/${solib_testfile}.c"
- set solib_binfile_test_msg "SHLIBDIR/${solib_testfile}.so.$i"
-
- # 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.
- if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} $options] != "" } {
- untested "Failure to compile ${solib_binfile_test_msg}"
- }
-
- set path [gdb_remote_download target ${solib_binfile}]
- set solib_binfile_targets [concat $solib_binfile_targets $path]
- }
-}
+global testfile srcfile binfile solib_binfile_targets
+set solib_binfile_targets [compile_n_jit_so 2 "" {}]
# Detach, restart GDB, and re-attach to the program.
@@ -149,9 +117,7 @@ proc one_jit_test {count match_str reattach} {
}
}
-compile_jit_main "" {}
-compile_n_jit_so 2 {}
-
+lassign [compile_jit_main "" {}] testfile srcfile binfile
one_jit_test 1 "${hex} jit_function_0001" 0
one_jit_test 2 "${hex} jit_function_0001\[\r\n\]+${hex} jit_function_0002" 0
@@ -159,13 +125,13 @@ one_jit_test 2 "${hex} jit_function_0001\[\r\n\]+${hex} jit_function_0002" 0
# registered. We reuse the normal test, and detach/reattach at
# specific interesting points.
if {[can_spawn_for_attach]} {
- compile_jit_main "-attach" {additional_flags=-DATTACH=1}
+ lassign [compile_jit_main "-attach" {additional_flags=-DATTACH=1}] testfile srcfile binfile
with_test_prefix attach {
one_jit_test 2 "${hex} jit_function_0001\[\r\n\]+${hex} jit_function_0002" 1
}
}
with_test_prefix PIE {
- compile_jit_main "-pie" {additional_flags=-fPIE ldflags=-pie}
+ lassign [compile_jit_main "-pie" {additional_flags=-fPIE ldflags=-pie}] testfile srcfile binfile
one_jit_test 1 "${hex} jit_function_0001" 0
}
diff --git a/gdb/testsuite/lib/jit-elf-helpers.exp b/gdb/testsuite/lib/jit-elf-helpers.exp
new file mode 100644
index 0000000000..7e3dfd2c7a
--- /dev/null
+++ b/gdb/testsuite/lib/jit-elf-helpers.exp
@@ -0,0 +1,77 @@
+# Copyright 2020 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/>.
+
+# Compiles jit-elf-main.c as a regular executable
+
+proc compile_jit_main {binsuffix options} {
+ global srcdir subdir
+ set testfile jit-elf-main
+ set srcfile ${testfile}.c
+ set binfile [standard_output_file $testfile$binsuffix]
+ set options [concat \
+ $options \
+ debug]
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
+ executable $options] != "" } {
+ untested "Failure to compile jit-elf-main"
+ }
+ return [list $testfile $srcfile $binfile]
+}
+
+# Compiles jit-elf-main.c as a shared library
+
+proc compile_jit_main_as_so {binsuffix options} {
+ global srcdir subdir
+ set testfile jit-elf-main
+ set srcfile ${testfile}.c
+ set binfile [standard_output_file $testfile$binsuffix]
+ set options [concat \
+ $options \
+ additional_flags="-DMAIN=jit_dl_main" \
+ debug]
+ if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
+ $options] != "" } {
+ untested "Failure to compile jit-elf-main"
+ }
+ return [list $testfile $srcfile $binfile]
+}
+
+# Compiles jit-elf-solib.c as multiple shared libraries
+# distinguished by a numerical suffix
+
+proc compile_n_jit_so {count binsuffix options} {
+ global srcdir subdir
+ set solib_binfile_targets {}
+ set solib_testfile jit-elf-solib
+
+ for {set i 1} {$i <= $count} {incr i} {
+ set solib_binfile [standard_output_file $solib_testfile.so.$i]
+ set solib_srcfile "${srcdir}/${subdir}/$solib_testfile.c"
+ set solib_binfile_test_msg "SHLIBDIR/$solib_testfile$binsuffix.so.$i"
+
+ # 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.
+ if { [gdb_compile_shlib $solib_srcfile $solib_binfile $options] != "" } {
+ untested "Failure to compile $solib_binfile_test_msg"
+ }
+
+ set path [gdb_remote_download target $solib_binfile]
+ set solib_binfile_targets [concat $solib_binfile_targets $path]
+ }
+
+ return $solib_binfile_targets
+}
--
2.25.2
Intel Deutschland GmbH
Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Christin Eisenschmid, Gary Kershaw
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
next prev parent reply other threads:[~2020-03-27 10:37 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <165972>
2020-03-27 10:39 ` [PATCH v2 1/8] [gdb/testsuite] allow more registers in reader test Mihails Strasuns
2020-03-27 10:39 ` [PATCH v2 2/8] [gdb/testsuite] structured rename of jit test files Mihails Strasuns
2020-03-27 10:39 ` [PATCH v2 3/8] [gdb/testsuite] share jit-protocol.h by all jit tests Mihails Strasuns
2020-03-27 10:39 ` [PATCH v2 4/8] [gdb/testsuite] use args as lib list for jit-elf tests Mihails Strasuns
2020-03-30 3:00 ` Simon Marchi
2020-03-31 15:13 ` Strasuns, Mihails
2020-03-31 16:08 ` Simon Marchi
2020-03-27 10:39 ` Mihails Strasuns [this message]
2020-03-27 10:39 ` [PATCH v2 6/8] [gdb/testsuite] use -Ttext-segment " Mihails Strasuns
2020-03-27 10:39 ` [PATCH v2 7/8] [gdb/testsuite] define jit function name via macro Mihails Strasuns
2020-03-27 10:39 ` [PATCH v2 8/8] [gdb/testsuite] add jit-elf-util.h and run jit function Mihails Strasuns
2020-03-30 2:55 ` [PATCH v2 1/8] [gdb/testsuite] allow more registers in reader test Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200327103932.17765-5-mihails.strasuns@intel.com \
--to=mihails.strasuns@intel.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox