dejagnu
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Patch for multi-sim.exp baseboard


From: Steve Ellcey
Subject: Patch for multi-sim.exp baseboard
Date: Mon, 11 May 2015 16:13:00 -0700
User-agent: Heirloom mailx 12.5 6/20/10

This is an update to the multi-sim.patch to make it more flexible when
searching for the dynamic linker and system libraries.  This change uses
'--print-search-dirs' to find directories to search instead of
'--print-sysroot' because using the latter still meant you had to know
where to look under the sysroot (lib or usr/lib for example).  We
(Imagination) are making some changes in the sysroot layout for the GCC
toolchain we build and having multi-sim.exp be more flexible allows us
to support both the old and new layouts with the same baseboard when
testing.

Steve Ellcey
address@hidden


2015-05-11  Steve Ellcey  <address@hidden>

        * baseboards/multi-sim.exp (get_library_dirlist): New proc.
        (dynamic_linker_flag): Use get_library_dirlist to find dynamic
        linker.
        (rpath_flags): Use get_library_dirlist to set rpath.


diff --git a/baseboards/multi-sim.exp b/baseboards/multi-sim.exp
index c588fd7..bf79118 100644
--- a/baseboards/multi-sim.exp
+++ b/baseboards/multi-sim.exp
@@ -40,25 +40,38 @@ load_generic_config "sim"
 # basic-sim.exp is a basic description for the standard Cygnus simulator.
 load_base_board_description "basic-sim"
 
+proc get_library_dirlist { args } {
+  global board
+  set compiler "[board_info $board compiler]"
+  set mflags "[board_info $board multilib_flags]"
+  set result [remote_exec host "$compiler $mflags --print-search-dirs"]
+  set regresult [regexp {(libraries: =)(\S*)} $result dummy1 dummy2 libdirlist]
+  if {$regresult == 0} {
+    perror "Could not find compilers library search path."
+  }
+  return [split $libdirlist :]
+}
+
 proc dynamic_linker_flag { args } {
   global board
   set compiler "[board_info $board compiler]"
   set mflags "[board_info $board multilib_flags]"
-  set result [remote_exec host "$compiler $mflags --print-sysroot"]
-  set output [lindex $result 1]
-  set toutput [string trimright $output]
-  set dynlinkerdir "$toutput/usr/lib"
-  set dynlinker [glob -directory $dynlinkerdir ld-*.so]
+  set searchdirs [get_library_dirlist]
+  foreach i $searchdirs {
+    set dynlinker [glob -nocomplain -directory $i ld-*.so]
+    if { $dynlinker != "" } break
+  }
   verbose "dynamic_linker_flag: -Wl,--dynamic-linker=$dynlinker"
   return "-Wl,--dynamic-linker=$dynlinker"
 }
+
 proc rpath_flags { args } {
   global board
   set compiler "[board_info $board compiler]"
   set mflags "[board_info $board multilib_flags] [libgloss_include_flags] 
[newlib_include_flags] [libgloss_link_flags] [libgloss_link_flags]"
   set rpathflags ""
   set gccpath [get_multilibs]
-  foreach i {libgcc_s.so  libstdc++.so libgfortran.so libatomic.so libc.so} {
+  foreach i {libgcc_s.so  libstdc++.so libgfortran.so libatomic.so} {
     set result [remote_exec host "$compiler $mflags --print-file-name=$i"]
     set output [lindex $result 1]
     set rpathdir [file dirname $output]
@@ -86,6 +99,10 @@ proc rpath_flags { args } {
       set rpathflags "$rpathflags -Wl,-rpath=$rpathdir"
     }
   }
+  set searchdirs [get_library_dirlist]
+  foreach i $searchdirs {
+    set rpathflags "$rpathflags -Wl,-rpath=$i"
+  }
   verbose "rpath_flags: $rpathflags"
   return $rpathflags
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]