A bug in get_board_flags fin ld/testsuite/lib/ld-lib.exp

Jan Dubiec <[email protected]>
Newsgroups gmane.comp.gnu.binutils
Message-ID <[email protected]>
What is the get_board_flags procedure in ld/testsuite/lib/ld-lib.exp 
supposed to do? Return the cflags and ldflags defined in the board 
description file, right? But it doesn't seem to do that.

Unfortunately, I don't know enough about DejaGnu's target/board handling 
to figure out how this should be fixed, so I'd appreciate some help from 
someone more experienced. Some information is provided below.

/J.D.

Adding a few simple diagnostic messages:

diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 25722d86f52..4438a28dcac 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -210,6 +210,12 @@ proc get_board_flags {} {
      global board_cflags
      global board_ldflags

+    verbose "=== get_board_flags ===" 0
+    verbose "script = [info script]" 0
+    verbose "target_info name = '[target_info name]'" 0
+    verbose "arm-qemu cflags = '[board_info arm-qemu cflags]'" 0
+    verbose "arm-qemu ldflags = '[board_info arm-qemu ldflags]'" 0
+
      if [board_info [target_info name] exists cflags] {
         set board_cflags " [board_info [target_info name] cflags]"
      } else {


This produces the following output:

=== get_board_flags ===
script = /mnt/Works/binutils/ld/testsuite/config/default.exp
target_info name = ''
arm-qemu cflags = '  --specs=rdimon.specs'
arm-qemu ldflags = ' -L/mnt/Works/xcomp/build-binutils-arm-linux/ld'

This seems to explain the problem: the board_info array contains the 
expected information, but [target_info name] is empty when 
get_board_flags is called. As a result, get_board_flags returns empty 
cflags and ldflags.

I run the tests with:
make -k check-ld RUNTESTFLAGS="--target_board=arm-qemu --verbose=3 
unique.exp"

Here is the beginning of the log:
		=== ld tests ===

setting trap for SIGINT to interrupted by user
setting trap for SIGQUIT to interrupted by user
setting trap for SIGTERM to terminated
dirlist is /usr/share/dejagnu/baseboards
pushing config for build, name is jdxpc
dirlist is /usr/share/dejagnu/baseboards
pushing config for host, name is jdxpc
target list is arm-qemu
Schedule of variations:
     arm-qemu

target is arm-qemu
Running target arm-qemu
dirlist is /usr/share/dejagnu/baseboards/jdxpc /usr/share/dejagnu/baseboards
Using /usr/share/dejagnu/baseboards/arm-qemu.exp as board description 
file for target.
Using /usr/share/dejagnu/config/sim.exp as generic interface file for 
target.
Using /usr/share/dejagnu/baseboards/basic-sim.exp as board description 
file for target.
Using simulator qemu-system-arm

Transforming gcc to arm-eabi-gcc
compiler is arm-eabi-gcc
GCC path is .
No newlib support for this target
Looking for /mnt/Works/xcomp/sysroot-linux/bin/../arm-eabi/./newlib
No newlib support for this target
Using /mnt/Works/binutils/ld/testsuite/config/default.exp as 
tool-and-target-specific interface file.
[...]


check_compiler_available is called from default.exp, and the call chain is:

check_compiler_available
     -> make_dummy_target_executable
         -> get_board_flags

So it appears that get_board_flags is being called while default.exp is 
being sourced, before target_info name has been initialized.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.