Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Mihails Strasuns <mihails.strasuns@intel.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v3 5/9] [gdb/testsuite] add lib/jit-elf-helpers.exp
Date: Tue, 31 Mar 2020 19:13:52 +0200	[thread overview]
Message-ID: <20200331171356.26126-5-mihails.strasuns@intel.com> (raw)
In-Reply-To: <20200331171356.26126-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 | 87 ++++++++-------------------
 gdb/testsuite/gdb.base/jit-elf.exp    | 46 ++------------
 gdb/testsuite/lib/jit-elf-helpers.exp | 78 ++++++++++++++++++++++++
 3 files changed, 108 insertions(+), 103 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 bcd72eb2bf..55154e9866 100644
--- a/gdb/testsuite/gdb.base/jit-elf-so.exp
+++ b/gdb/testsuite/gdb.base/jit-elf-so.exp
@@ -26,71 +26,32 @@ if {[get_compiler_info]} {
     return 1
 }
 
-# Compile the testcase program.
-# OPTIONS is passed to gdb_compile when compiling the program.
-proc compile_jit_main {options} {
-    global srcdir subdir srcfile2 binfile2
-    set testfile jit-elf-main
-    set srcfile2 ${testfile}.c
-    set binfile2 [standard_output_file $testfile.so]
-    set options [concat \
-	$options \
-	debug]
-    if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" \
-	    $options] != "" } {
+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]
+
+# Compile the test case shared library loader.
+proc compile_jit_dlmain {} {
+    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]
+    if { [gdb_compile "${srcdir}/${subdir}/${srcfile_dlmain}" "${binfile}" \
+	    executable {debug shlib_load}] != "" } {
 	untested "Failure to compile jit-elf-main"
     }
 }
 
-# Compile the testcase shared library loader.
-# OPTIONS is passed to gdb_compile when compiling the library.
-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]
-    set options [concat \
-	$options \
-	debug]
-    if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	    executable $options] != "" } {
-	untested "Failure to compile jit-elf-main"
-    }
-}
-
-proc compile_n_jit_so {count} {
-    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}.$i.so]
-	set solib_srcfile "${srcdir}/${subdir}/${solib_testfile}.c"
-	set solib_binfile_test_msg "SHLIBDIR/${solib_testfile}.$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.
-	if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {}] != "" } {
-	    untested "Failure to compile ${solib_binfile_test_msg}"
-	}
-
-	set path [gdb_remote_download target ${solib_binfile}]
-	lappend solib_binfile_targets $path
-    }
-}
-
-compile_jit_main {additional_flags="-DMAIN=jit_dl_main"}
-compile_jit_dlmain {shlib_load}
-compile_n_jit_so 2
+compile_jit_dlmain
 
 proc one_jit_test {count match_str} {
     with_test_prefix "one_jit_test-$count" {
-	global verbose testfile srcfile2 binfile2 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} {
@@ -102,12 +63,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=fake_argv"
@@ -115,13 +76,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"
@@ -132,7 +93,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 afc1ac9f96..bf0e253bb9 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} {
-    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}.$i.so]
-	set solib_srcfile "${srcdir}/${subdir}/${solib_testfile}.c"
-	set solib_binfile_test_msg "SHLIBDIR/${solib_testfile}.$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.
-	if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {}] != "" } {
-	    untested "Failure to compile ${solib_binfile_test_msg}"
-	}
-
-	set path [gdb_remote_download target ${solib_binfile}]
-	lappend 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..f96dfe5ebb
--- /dev/null
+++ b/gdb/testsuite/lib/jit-elf-helpers.exp
@@ -0,0 +1,78 @@
+# 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
+
+# Compile the test case program as a stand-alone binary
+# BINSUFFIX is appended to the resulting binary name
+# OPTIONS is passed to gdb_compile when compiling the program.
+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]
+}
+
+# Compile the test case program as a shared library
+proc compile_jit_main_as_so {} {
+    global srcdir subdir
+    set testfile jit-elf-main
+    set srcfile ${testfile}.c
+    set binfile [standard_output_file $testfile]
+    set options [list \
+	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]
+}
+
+# Compile jit-elf-solib.c as multiple shared libraries
+# distinguished by a numerical suffix.
+# COUNT is amount of shared libraries to build
+proc compile_n_jit_so {count} {
+    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.$i.so]
+	set solib_srcfile "${srcdir}/${subdir}/$solib_testfile.c"
+	set solib_binfile_test_msg "SHLIBDIR/$solib_testfile.$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.
+	if { [gdb_compile_shlib $solib_srcfile $solib_binfile {}] != "" } {
+	    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



  parent reply	other threads:[~2020-03-31 17:12 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <166773>
2020-03-31 17:13 ` [PATCH v3 1/9] [gdb/testsuite] allow more registers in reader test Mihails Strasuns
2020-03-31 17:13   ` [PATCH v3 2/9] [gdb/testsuite] structured rename of jit test files Mihails Strasuns
2020-04-18  2:35     ` Simon Marchi
2020-03-31 17:13   ` [PATCH v3 3/9] [gdb/testsuite] share jit-protocol.h by all jit tests Mihails Strasuns
2020-04-18  2:38     ` Simon Marchi
2020-03-31 17:13   ` [PATCH v3 4/9] [gdb/testsuite] use args as lib list for jit-elf tests Mihails Strasuns
2020-04-18  2:58     ` Simon Marchi
2020-04-20  7:35       ` Strasuns, Mihails
2020-04-20 13:08         ` Simon Marchi
2020-04-20 13:53           ` Simon Marchi
2020-03-31 17:13   ` Mihails Strasuns [this message]
2020-03-31 17:13   ` [PATCH v3 6/9] [gdb/testsuite] use -Ttext-segment " Mihails Strasuns
2020-03-31 17:13   ` [PATCH v3 7/9] [gdb/testsuite] define jit function name via macro Mihails Strasuns
2020-03-31 17:13   ` [PATCH v3 8/9] [gdb/testsuite] add jit-elf-util.h and run jit function Mihails Strasuns
2020-03-31 17:13   ` [PATCH v3 9/9] [gdb/testsuite] handle compilation failures in jit-elf-helpers Mihails Strasuns
2020-04-14 10:08   ` [PATCH v3 1/9] [gdb/testsuite] allow more registers in reader test Strasuns, Mihails
2020-04-18  2:30   ` 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=20200331171356.26126-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