* baseboards/multi-sim.exp (get_library_dirlist): New.
authorSteve Ellcey <sellcey@imgtec.com>
Thu, 14 May 2015 06:29:00 +0000 (16:29 +1000)
committerBen Elliston <bje@gnu.org>
Thu, 14 May 2015 06:29:00 +0000 (16:29 +1000)
(dynamic_linker_flag): Use get_library_dirlist to find dynamic
linker.
(rpath_flags): Use get_library_dirlist to set rpath.

Signed-off-by: Ben Elliston <bje@gnu.org>
ChangeLog
baseboards/multi-sim.exp

index 230f0f2..d578e23 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-05-14  Steve Ellcey  <sellcey@imgtec.com>
+
+       * baseboards/multi-sim.exp (get_library_dirlist): New.
+       (dynamic_linker_flag): Use get_library_dirlist to find dynamic
+       linker.
+       (rpath_flags): Use get_library_dirlist to set rpath.
+
 2015-05-12  Steve Ellcey  <sellcey@imgtec.com>
 
        * baseboards/generic-sim.exp: Check $DEJAGNU_SIM_OPTION.
index c588fd7..0f33242 100644 (file)
@@ -40,25 +40,37 @@ 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]
+  foreach i [get_library_dirlist] {
+    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 +98,9 @@ proc rpath_flags { args } {
       set rpathflags "$rpathflags -Wl,-rpath=$rpathdir"
     }
   }
+  foreach i [get_library_dirlist] {
+    set rpathflags "$rpathflags -Wl,-rpath=$i"
+  }
   verbose "rpath_flags: $rpathflags"
   return $rpathflags
 }