From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31338 invoked by alias); 8 Jul 2009 15:45:49 -0000 Received: (qmail 31328 invoked by uid 22791); 8 Jul 2009 15:45:48 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_55,J_CHICKENPOX_61,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: sourceware.org Received: from sif.is.scarlet.be (HELO sif.is.scarlet.be) (193.74.71.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 08 Jul 2009 15:45:38 +0000 Received: from [172.17.1.10] (ip-81-11-241-231.dsl.scarlet.be [81.11.241.231]) by sif.is.scarlet.be (8.14.2/8.14.2) with ESMTP id n68FjMiL019907; Wed, 8 Jul 2009 17:45:23 +0200 Subject: Re: How to fix solib path name? From: Danny Backx Reply-To: danny.backx@scarlet.be To: Pedro Alves Cc: gdb-patches@sourceware.org In-Reply-To: <1247067073.3870.69.camel@pavilion> References: <1247063678.3870.59.camel@pavilion> <200907081556.09821.pedro@codesourcery.com> <200907081607.22830.pedro@codesourcery.com> <1247067073.3870.69.camel@pavilion> Content-Type: multipart/mixed; boundary="=-7FMYGHODHe9bpgEBZwAx" Date: Wed, 08 Jul 2009 15:45:00 -0000 Message-Id: <1247067931.3870.76.camel@pavilion> Mime-Version: 1.0 X-DCC-scarlet.be-Metrics: sif 20001; Body=3 Fuz1=3 Fuz2=3 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00258.txt.bz2 --=-7FMYGHODHe9bpgEBZwAx Content-Type: text/plain Content-Transfer-Encoding: 7bit Content-length: 3356 On Wed, 2009-07-08 at 17:31 +0200, Danny Backx wrote: > On Wed, 2009-07-08 at 16:07 +0100, Pedro Alves wrote: > > Maybe we can make gdbserver smarter even on CE < 6? I think I > > remember that if you had toolhelp.dll on the device, you'd get > > absolute paths, but I'm not sure if that's a valid memory I have. > > > > I've added one printf statement to gdbserver/server.c just after where > it assembles the library name list. > > Output on the infamous C++ hello2.exe below. Two out of the three are > absolute path names. Not sure why the other one isn't. > > Is it best to adapt gdbserver for this ? If the answer to my question is yes, then it's not a hard fix. It's attached. 2009-07-08 Danny Backx * server.c : Strip path from DLL names. Result is below. (Initial spooky messages due to gdb reading the wrong directory to find the DLL. The i386 gdb tried to read an ARM dll.) Danny pavilion: {109} i386-mingw32ce-gdb hello2.exe GNU gdb 6.8 Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=i386-mingw32ce"... (gdb) target remote ebox:9999 Remote debugging using ebox:9999 [New Thread 68419598] Error while mapping shared library sections: "/opt/mingw32ce/bin/libgcc_s_sjlj-1.dll": not in executable format: File format not recognized. Error while mapping shared library sections: libstdc++-6.dll: No such file or directory. Error while mapping shared library sections: coredll.dll: No such file or directory. Error while reading shared library symbols: "/opt/mingw32ce/bin/libgcc_s_sjlj-1.dll": can't read symbols: File format not recognized. Symbol file not found for libstdc++-6.dll Symbol file not found for coredll.dll WinMainCRTStartup (hInst=0x407000e, hPrevInst=0x0, lpCmdLine=0x2a01fc70, nCmdShow=5) at /home/danny/src/cegcc/svn.sf.net/cegcc/trunk/cegcc/src/mingw/crt3.c:35 35 { Current language: auto; currently c (gdb) info sharedlibrary >From To Syms Read Shared Object Library No /opt/mingw32ce/bin/libgcc_s_sjlj-1.dll No libstdc++-6.dll No coredll.dll (gdb) set solib-search-path /opt/x86mingw32ce/bin:/opt/x86mingw32ce/i386-mingw32ce/lib:/opt/x86mingw32ce/i386-mingw32ce/bin Error while mapping shared library sections: coredll.dll: No such file or directory. Reading symbols from /opt/x86mingw32ce/bin/libgcc_s_sjlj-1.dll...done. Loaded symbols for /opt/x86mingw32ce/bin/libgcc_s_sjlj-1.dll Reading symbols from /opt/x86mingw32ce/i386-mingw32ce/lib/libstdc ++-6.dll...done. Loaded symbols for /opt/x86mingw32ce/i386-mingw32ce/lib/libstdc++-6.dll Symbol file not found for coredll.dll (gdb) info sharedlibrary >From To Syms Read Shared Object Library 0x41fc1000 0x41fcc1fc Yes /opt/x86mingw32ce/bin/libgcc_s_sjlj-1.dll 0x41ee1000 0x41fb2974 Yes /opt/x86mingw32ce/i386-mingw32ce/lib/libstdc++-6.dll No coredll.dll -- Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info --=-7FMYGHODHe9bpgEBZwAx Content-Disposition: attachment; filename="x" Content-Type: text/x-patch; name="x"; charset="UTF-8" Content-Transfer-Encoding: 7bit Content-length: 970 Index: server.c =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/server.c,v retrieving revision 1.102 diff -u -r1.102 server.c --- server.c 30 Jun 2009 16:35:25 -0000 1.102 +++ server.c 8 Jul 2009 15:43:37 -0000 @@ -929,14 +929,24 @@ for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next) { struct dll_info *dll = (struct dll_info *) dll_ptr; - char *name; + char *name, *lastdir, *q; strcpy (p, " name); - strcpy (p, name); + + /* Strip directory names */ + lastdir = 0; + for (q=name; *q; q++) + if (*q == '\\' || *q == '/') + lastdir = q; + if (lastdir) + strcpy(p, lastdir+1); + else + strcpy (p, name); free (name); p = p + strlen (p); + strcpy (p, "\">base_addr); --=-7FMYGHODHe9bpgEBZwAx--