From f80cb3b46ae19c6a7c39916916374410f5cc37bc Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 24 Apr 2020 11:31:06 +0200 Subject: [PATCH] [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: - .gdb-index - .debug_names - .debug_str - .debug_str.merge - .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 * contrib/cc-with-tweaks.sh: Remove .gdb-index file handling. Run gdb-add-index inside temp dir. --- gdb/ChangeLog | 5 +++++ gdb/contrib/cc-with-tweaks.sh | 14 +++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 85fa7cf5f76..c2dc2b6ba80 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-04-24 Tom de Vries + + * contrib/cc-with-tweaks.sh: Remove .gdb-index file handling. + Run gdb-add-index inside temp dir. + 2020-04-23 Tom Tromey * windows-tdep.c (is_linked_with_cygwin_dll): Always update "iter" diff --git a/gdb/contrib/cc-with-tweaks.sh b/gdb/contrib/cc-with-tweaks.sh index 7cad3ac7ee7..2998a9d2180 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 -- 2.30.2