This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] Fix: binutils testsuite builds status wrapper unconditionally
- From: Anton Kolesov <Anton dot Kolesov at synopsys dot com>
- To: "binutils at sourceware dot org" <binutils at sourceware dot org>
- Cc: "Jeremy Bennett (Jeremy dot bennett at embecosm dot com)" <Jeremy dot bennett at embecosm dot com>, "Simon Cook (simon dot cook at embecosm dot com)" <simon dot cook at embecosm dot com>
- Date: Fri, 13 Sep 2013 12:19:26 +0000
- Subject: [PATCH] Fix: binutils testsuite builds status wrapper unconditionally
- Authentication-results: sourceware.org; auth=none
Hi All,
I've encountered a problem with binutils test suite in a situation when libc doesnât implement function _exit and tests are run using Dejagnu gdb-comm configuration. I'm proposing a patch that help resolves this problem in a situation, when status wrapper is not required in the first place.
binutils/testsuite/binutils-all/objcopy.exp always builds Dejagnu status wrapper and links test prog with it. Testglue wraps around function _exit regardless of its existence and if this functions doesn't exists and symbol _exit will always points to _wrap__exit. On the other hand Dejagnu gdb-comm.exp while performing execution tests sets breakpoints at functions abort() and _exit(), and of the latter one doesn't exist then at exit(). However because of status wrapper, function _exit always exists even if never called. As a result gdb-comm "waits" for an application exit at _exit() instead of exit(). As a results test fails due to timeout.
Attached patch makes objcopy.exp aware of target_info field needs_status_wrapper. This field is already used by GCC test suite. So if status wrapper is disabled for GCC it will automatically be disabled for objcopy.exp. Default behavior is unchanged, if this field is not set then status wrapper will be used.
This patch resolves problem in my setup, when function _exit doesn't exists and status wrapper is not required. It will not help with situation when _exit is not defined but status wrapper is required.
I have also created a bug report in Bugzilla: https://sourceware.org/bugzilla/show_bug.cgi?id=15951
--
Anton Kolesov
binutils/testsuite/ChangeLog
2013-09-13 Anton Kolesov <akolesov@synopsys.com>
* binutils-all/objcopy.exp (copy_setup): Do not build wrapper Dejagnu
wrapper if target_info needs_status_wrapper is set to 0 or an empty
string.
diff -urN binutils-ref/binutils/testsuite/binutils-all/objcopy.exp binutils-2.23.52/binutils/testsuite/binutils-all/objcopy.exp
--- binutils-ref/binutils/testsuite/binutils-all/objcopy.exp 2012-03-13 04:41:22.000000000 +0400
+++ binutils-2.23.52/binutils/testsuite/binutils-all/objcopy.exp 2013-09-13 15:41:07.650678480 +0400
@@ -561,7 +561,14 @@
global test_prog
global host_triplet
- set res [build_wrapper testglue.o]
+ if { [target_info exists needs_status_wrapper] == 0 || \
+ ([target_info needs_status_wrapper] != "" && \
+ [target_info needs_status_wrapper] != "0") } {
+ set res [build_wrapper testglue.o]
+ } else {
+ set res ""
+ }
+
set flags { debug }
if { [istarget *-*-uclinux*] && ![istarget tic6x-*-*] } {