From: Tom de Vries <tdevries@suse.de>
To: Simon Marchi <simark@simark.ca>, gdb-patches@sourceware.org
Subject: [gdb/testsuite] Fix index-cache.exp with cc-with-{gdb-index,debug-names}
Date: Sat, 04 May 2019 08:35:00 -0000 [thread overview]
Message-ID: <a770cb7f-2be6-3e48-58ce-f90773f0adb2@suse.de> (raw)
In-Reply-To: <d10d649c-60fe-a84c-7b12-0eb4bfc542f4@simark.ca>
[-- Attachment #1: Type: text/plain, Size: 1887 bytes --]
[ was: Re: [PATCH][gdb/testsuite] Fix index-cache.exp with
CC_WITH_TWEAKS_FLAGS=-i ]
On 03-05-19 23:17, Simon Marchi wrote:
> On 2019-05-03 6:43 a.m., Tom de Vries wrote:
>> Hi,
>>
>> When running gdb.base/index-cache.exp with target board cc-with-tweaks with
>> CC_WITH_TWEAKS_FLAGS set to "-i", we run into:
>> ...
>> FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: at least one file \
>> was created
>> FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: expected file is there
>> FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: check index-cache stats
>> FAIL: gdb.base/index-cache.exp: test_cache_enabled_hit: check index-cache stats
>> ...
>>
>> The problem is that the target board makes sure that the generated executable
>> contains a .gdb_index section, while the test assumes that the executable
>> doesn't contain this section.
>>
>> Fix this by removing the .gdb_index section from the generated executable.
>>
>> Tested on x86_64-linux with native and CC_WITH_TWEAKS_FLAGS=-i config.
>>
>> OK for trunk?
>>
>> Thanks,
>> - Tom
>
> Hi Tom,
>
> I would slightly prefer that instead of doing this, we would notice that that file
> already has an index (in the form of .gdb_index or .debug_names), and adjust our
> expectations in the test.
>
> In other words, we currently assert that loading the file in GDB will produce some
> files in the cache. However, if we know that the file already has an index, we
> should verify that no file was produced, as this is the behavior we expect when
> loading a file which already has an index.
>
> Stripping the index makes the test pass, but it just goes back to testing the same
> thing as with the default board file. Adjusting our expectation to the presence
> of an index makes the test cover a different use case.
I've implemented this approach, attached below.
OK for trunk?
Thanks,
- Tom
[-- Attachment #2: 0001-gdb-testsuite-Fix-index-cache.exp-with-cc-with-gdb-index-debug-names.patch --]
[-- Type: text/x-patch, Size: 3989 bytes --]
[gdb/testsuite] Fix index-cache.exp with cc-with-{gdb-index,debug-names}
In gdb.base/index-cache.exp, handle the case that binfile contains either a
.gdb_index or .debug_names index section.
Tested on x86_64-linux with native, cc-with-gdb-index and cc-with-debug-names.
gdb/testsuite/ChangeLog:
2019-05-04 Tom de Vries <tdevries@suse.de>
* lib/gdb.exp (exec_has_index_section): New proc.
* gdb.base/index-cache.exp: Handle case that binfile contains an index
section.
---
gdb/testsuite/gdb.base/index-cache.exp | 30 +++++++++++++++++++++++++-----
gdb/testsuite/lib/gdb.exp | 11 +++++++++++
2 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/gdb/testsuite/gdb.base/index-cache.exp b/gdb/testsuite/gdb.base/index-cache.exp
index 4e583abf01..f5e1e4a850 100644
--- a/gdb/testsuite/gdb.base/index-cache.exp
+++ b/gdb/testsuite/gdb.base/index-cache.exp
@@ -22,6 +22,8 @@ if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
return
}
+set has_index_section [exec_has_index_section $binfile]
+
# List the files in DIR on the host (where GDB-under-test runs).
# Return a list of two elements:
# - 0 on success, -1 on failure
@@ -125,7 +127,7 @@ proc_with_prefix test_cache_disabled { cache_dir } {
# Test with the cache enabled, we expect to have exactly one file created.
proc_with_prefix test_cache_enabled_miss { cache_dir } {
- global testfile
+ global testfile has_index_section
lassign [ls_host $cache_dir] ret files_before
@@ -133,7 +135,11 @@ proc_with_prefix test_cache_enabled_miss { cache_dir } {
lassign [ls_host $cache_dir] ret files_after
set nfiles_created [expr [llength $files_after] - [llength $files_before]]
- gdb_assert "$nfiles_created > 0" "at least one file was created"
+ if { $has_index_section } {
+ gdb_assert "$nfiles_created == 0" "no file was created"
+ } else {
+ gdb_assert "$nfiles_created > 0" "at least one file was created"
+ }
set build_id [get_build_id [standard_output_file ${testfile}]]
if { $build_id == "" } {
@@ -143,11 +149,19 @@ proc_with_prefix test_cache_enabled_miss { cache_dir } {
set expected_created_file [list "${build_id}.gdb-index"]
set found_idx [lsearch -exact $files_after $expected_created_file]
- gdb_assert "$found_idx >= 0" "expected file is there"
+ if { $has_index_section } {
+ gdb_assert "$found_idx == -1" "no index cache file generated"
+ } else {
+ gdb_assert "$found_idx >= 0" "expected file is there"
+ }
remote_exec host rm "-f $cache_dir/$expected_created_file"
- check_cache_stats 0 1
+ if { $has_index_section } {
+ check_cache_stats 0 0
+ } else {
+ check_cache_stats 0 1
+ }
}
}
@@ -156,6 +170,8 @@ proc_with_prefix test_cache_enabled_miss { cache_dir } {
# same), but one cache read hit.
proc_with_prefix test_cache_enabled_hit { cache_dir } {
+ global has_index_section
+
# Just to populate the cache.
run_test_with_flags $cache_dir on {}
@@ -166,7 +182,11 @@ proc_with_prefix test_cache_enabled_hit { cache_dir } {
set nfiles_created [expr [llength $files_after] - [llength $files_before]]
gdb_assert "$nfiles_created == 0" "no files were created"
- check_cache_stats 1 0
+ if { $has_index_section } {
+ check_cache_stats 0 0
+ } else {
+ check_cache_stats 1 0
+ }
}
}
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 57866daa11..84c54062c8 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -5107,6 +5107,17 @@ proc rerun_to_main {} {
}
}
+# Return true if EXECUTABLE contains a .gdb_index or .debug_names index section.
+
+proc exec_has_index_section { executable } {
+ set res [catch {exec readelf -S $executable \
+ | grep -E "\.gdb_index|\.debug_names" }]
+ if { $res == 0 } {
+ return 1
+ }
+ return 0
+}
+
# Return true if a test should be skipped due to lack of floating
# point support or GDB can't fetch the contents from floating point
# registers.
next prev parent reply other threads:[~2019-05-04 8:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-03 10:44 [PATCH][gdb/testsuite] Fix index-cache.exp with CC_WITH_TWEAKS_FLAGS=-i Tom de Vries
2019-05-03 21:17 ` Simon Marchi
2019-05-04 8:20 ` [committed][gdb/testsuite] Add cc-with-debug-names.exp Tom de Vries
2019-05-04 8:35 ` Tom de Vries [this message]
2019-05-04 16:28 ` [gdb/testsuite] Fix index-cache.exp with cc-with-{gdb-index,debug-names} Simon Marchi
2019-05-06 6:43 ` Tom de Vries
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=a770cb7f-2be6-3e48-58ce-f90773f0adb2@suse.de \
--to=tdevries@suse.de \
--cc=gdb-patches@sourceware.org \
--cc=simark@simark.ca \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).