diff options
author | Tom de Vries <tdevries@suse.de> | 2020-04-24 11:31:06 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2020-04-24 11:31:06 +0200 |
commit | f80cb3b46ae19c6a7c39916916374410f5cc37bc (patch) | |
tree | 6a95aee1f661b212d9c2614759cc3d683476b397 /gdb/contrib | |
parent | 2482f30615136c7ed2082561f8e9dba48ee3ee25 (diff) | |
download | gdb-f80cb3b46ae19c6a7c39916916374410f5cc37bc.zip gdb-f80cb3b46ae19c6a7c39916916374410f5cc37bc.tar.gz gdb-f80cb3b46ae19c6a7c39916916374410f5cc37bc.tar.bz2 |
[gdb/contrib] Use temp dir for gdb-add-index in cc-with-tweaks.sh
When running test-case gdb.dwarf2/gdb-index.exp cleanly by issuing this
command:
...
$ rm -Rf build/gdb/testsuite/outputs/gdb.dwarf2/gdb-index
...
before running, it passes both with native and target board
cc-with-gdb-index.
But when we run the test-case first with native and then with
cc-with-gdb-index without intermediate cleanup, we get instead:
...
Running src/gdb/testsuite/gdb.dwarf2/gdb-index.exp ...
gdb compile failed, cc-with-tweaks.sh: Index file \
build/gdb/testsuite/outputs/gdb.dwarf2/gdb-index/gdb-index.gdb-index \
exists, won't clobber.
=== gdb Summary ===
# of untested testcases 1
...
What happens is that the native run produces a file
build/gdb/testsuite/outputs/gdb.dwarf2/gdb-index/gdb-index.gdb-index, which
causes gdb/contrib/cc-with-tweaks.sh to hit this code:
...
index_file="${output_file}.gdb-index"
if [ "$want_index" = true ] && [ -f "$index_file" ]
then
echo "$myname: Index file $index_file exists, won't clobber." >&2
exit 1
fi
...
The gdb-add-index script has a problem that it uses temp files alongside the
executable, filed as PR25843.
The code in cc-with-tweaks.sh attempts to detect the case that creating such a
temp file would overwrite an pre-existing file. It however does this only for
a single file, while gdb-add-index uses more temporary files:
- <exec>.gdb-index
- <exec>.debug_names
- <exec>.debug_str
- <exec>.debug_str.merge
- <exec>.debug_str.err
Fix this by working around PR25843 in a more generic way:
- move the executable into a temp directory
- execute gdb-add-index, allowing it to create any temp file alongside the
executable in the temp directory
- move the executable back to the original location
Tested on x86_64-linux, with target board cc-with-debug-index.
gdb/ChangeLog:
2020-04-24 Tom de Vries <tdevries@suse.de>
* contrib/cc-with-tweaks.sh: Remove <exec>.gdb-index file handling.
Run gdb-add-index inside temp dir.
Diffstat (limited to 'gdb/contrib')
-rwxr-xr-x | gdb/contrib/cc-with-tweaks.sh | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/gdb/contrib/cc-with-tweaks.sh b/gdb/contrib/cc-with-tweaks.sh index 7cad3ac..2998a9d 100755 --- a/gdb/contrib/cc-with-tweaks.sh +++ b/gdb/contrib/cc-with-tweaks.sh @@ -144,13 +144,6 @@ then exit $? fi -index_file="${output_file}.gdb-index" -if [ "$want_index" = true ] && [ -f "$index_file" ] -then - echo "$myname: Index file $index_file exists, won't clobber." >&2 - exit 1 -fi - output_dir="${output_file%/*}" [ "$output_dir" = "$output_file" ] && output_dir="." @@ -176,12 +169,16 @@ if [ "$want_objcopy_compress" = true ]; then fi if [ "$want_index" = true ]; then + get_tmpdir + mv "$output_file" "$tmpdir" + tmpfile="$tmpdir/$(basename $output_file)" # Filter out these messages which would stop dejagnu testcase run: # echo "$myname: No index was created for $file" 1>&2 # echo "$myname: [Was there no debuginfo? Was there already an index?]" 1>&2 - GDB=$GDB $GDB_ADD_INDEX $index_options "$output_file" 2>&1 \ + GDB=$GDB $GDB_ADD_INDEX $index_options "$tmpfile" 2>&1 \ | grep -v "^${GDB_ADD_INDEX##*/}: " >&2 rc=${PIPESTATUS[0]} + mv "$tmpfile" "$output_file" [ $rc != 0 ] && exit $rc fi @@ -237,5 +234,4 @@ if [ "$want_dwp" = true ]; then fi fi -rm -f "$index_file" exit $rc |