From patchwork Tue Feb 18 12:43:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Strasuns, Mihails" X-Patchwork-Id: 38205 Received: (qmail 113385 invoked by alias); 18 Feb 2020 12:42:51 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 113291 invoked by uid 89); 18 Feb 2020 12:42:51 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.1 spammy=soi, mandatory X-HELO: mga03.intel.com Received: from mga03.intel.com (HELO mga03.intel.com) (134.134.136.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Feb 2020 12:42:48 +0000 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Feb 2020 04:42:47 -0800 Received: from labpc7920x-08.iul.intel.com (HELO localhost) ([172.28.49.153]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Feb 2020 04:42:46 -0800 From: Mihails Strasuns To: gdb-patches@sourceware.org Cc: Mihails Strasuns Subject: [PATCH 5/7] [gdb/testsuite] add lib/jit-elf-helpers.exp Date: Tue, 18 Feb 2020 13:43:37 +0100 Message-Id: <20200218124339.11270-6-mihails.strasuns@intel.com> In-Reply-To: <20200218124339.11270-1-mihails.strasuns@intel.com> References: <20200218124339.11270-1-mihails.strasuns@intel.com> MIME-Version: 1.0 X-IsSubscribed: yes 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 * 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 --- gdb/testsuite/gdb.base/jit-elf-so.exp | 69 +++++++------------------ gdb/testsuite/gdb.base/jit-elf.exp | 39 +------------- gdb/testsuite/lib/jit-elf-helpers.exp | 73 +++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 89 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 eee20e16c2..31a422a5d2 100644 --- a/gdb/testsuite/gdb.base/jit-elf-so.exp +++ b/gdb/testsuite/gdb.base/jit-elf-so.exp @@ -26,67 +26,32 @@ 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 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_main_as_so "" {} compile_jit_dlmain {shlib_load} -compile_n_jit_so 2 {} +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 +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=malloc(sizeof(char*)*$count)" @@ -111,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" @@ -128,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 ba79efaf1c..71affae698 100644 --- a/gdb/testsuite/gdb.base/jit-elf.exp +++ b/gdb/testsuite/gdb.base/jit-elf.exp @@ -23,42 +23,7 @@ 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" - } -} - -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] - } -} +load_lib jit-elf-helpers.exp # Detach, restart GDB, and re-attach to the program. @@ -150,7 +115,7 @@ proc one_jit_test {count match_str reattach} { } compile_jit_main "" {} -compile_n_jit_so 2 {} +compile_n_jit_so 2 "" {} one_jit_test 1 "${hex} jit_function_0001" 0 one_jit_test 2 "${hex} jit_function_0001\[\r\n\]+${hex} jit_function_0002" 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..f63694b8f5 --- /dev/null +++ b/gdb/testsuite/lib/jit-elf-helpers.exp @@ -0,0 +1,73 @@ +# 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 . + +# Compiles jit-elf-main.c as a regular executable + +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" + } +} + +# Compiles jit-elf-main.c as a shared library + +proc compile_jit_main_as_so {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 \ + additional_flags="-DMAIN=jit_dl_main" \ + debug] + if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ + $options] != "" } { + untested "Failure to compile jit-elf-main" + } +} + +# 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 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$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] + } +} \ No newline at end of file