From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id DF880385DC1D for ; Fri, 17 Apr 2020 11:46:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DF880385DC1D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 7C6A8ABEF; Fri, 17 Apr 2020 11:46:38 +0000 (UTC) Date: Fri, 17 Apr 2020 13:46:37 +0200 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH][gdb/contrib] Use temp dir for gdb-add-index in cc-with-tweaks.sh Message-ID: <20200417114635.GA32265@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-30.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2020 11:46:41 -0000 Hi, 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. Any comments? Thanks, - Tom [gdb/contrib] Use temp dir for gdb-add-index in cc-with-tweaks.sh gdb/ChangeLog: 2020-04-17 Tom de Vries * contrib/cc-with-tweaks.sh: Remove .gdb-index file handling. Run gdb-add-index inside temp dir. --- gdb/contrib/cc-with-tweaks.sh | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/gdb/contrib/cc-with-tweaks.sh b/gdb/contrib/cc-with-tweaks.sh index 7cad3ac7ee..2998a9d218 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