This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: gdb 5.3 bug


Dear Daniel!
Thank you very match for your advise!
Snapshot gdb+dejagnu-20030228 works just fine!
Thank a lot all guys who is involved in gdb development. 
I am sorry but I have to bother you with another gdb problem.
The problem is I can't step into the function through the pointer
if the function resides in dynamically loaded shared object (library).
Here is the simple test case:

1. Shared object:
---------- cut here --------
#include <iostream>
using namespace std;

extern "C" {
    void my_func()
    {
        cout << "This is my_func" << endl;
    }

}
---------- cut here --------
2. Main:
#include <iostream>
#include <memory>
#include <dlfcn.h>
#include <link.h>

using namespace std;

void * handle;

typedef void  ( *Func_t)();

Func_t getFunc() 
{
    Func_t p = (Func_t)dlsym ( handle, "my_func" );
    if ( NULL == p )
    {
        cout << dlerror() << endl;
        exit(2);
    }
    return p;
}

int main()
{
    handle = (void*) ::dlopen("./func_so/bin/i386-sun-solaris/func_so.so", RTLD_NOW | RTLD_LOCAL | RTLD_GROUP);
    if (handle == NULL)
    {
        cout << dlerror() << endl;
        exit(2);
    }

    Func_t f = getFunc();
    f();
}
---------- cut here --------

This testcase works, but I can't step into f() (last line) in gdb.
Is it possible to work around or fix this problem?
Thanks in advance!

----
Lev Assinovsky
Aelita Software Corporation
O&S Core Division, Programmer
ICQ# 165072909


> -----Original Message-----
> From: Daniel Jacobowitz [mailto:drow at mvista dot com]
> Sent: Friday, February 28, 2003 8:19 PM
> To: Lev Assinovsky; gdb at sources dot redhat dot com
> Subject: Re: gdb 5.3 bug
> 
> 
> On Thu, Feb 27, 2003 at 02:09:30PM -0500, Daniel Jacobowitz wrote:
> > On Thu, Feb 27, 2003 at 09:11:14PM +0300, Lev Assinovsky wrote:
> > > GNU gdb 5.3
> > > Copyright 2002 Free Software Foundation, Inc.
> > > GDB is free software, covered by the GNU General Public 
> License, and you are
> > > welcome to change it and/or distribute copies of it under 
> certain conditions.
> > > Type "show copying" to see the conditions.
> > > There is absolutely no warranty for GDB.  Type "show 
> warranty" for details.
> > > This GDB was configured as "i386-pc-solaris2.8"...
> > > (gdb) l
> > > 
> > > Program received signal SIGSEGV, Segmentation fault.
> > > 0x08136671 in finish_block (symbol=0x6e5f5f3a, 
> listhead=0x82241f4, old_blocks=0x3a787863, start=1634562671, 
> > >     end=1634562720, objfile=0x8263fe0) at buildsym.c:304
> > > 304           struct type *ftype = SYMBOL_TYPE (symbol);
> > > (gdb) 
> > > 
> > > 
> > > Any clue what might be the reason of gdb crash?
> > 
> > OK, the value of "symbol" is obviously wrong.  Could you 
> privately send
> > me the binary?  If that's not possible, at least a 
> backtrace would be
> > useful...
> 
> 
> Lev,
> 
> You're in luck, this has already been fixed.  It appears to 
> be a bug in
> the Sun compilers - it outputs end-of-function markers without a
> corresponding beginning-of-function marker.  If you get a GDB snapshot
> from CVS (http://sources.redhat.com/gdb/) it should handle 
> your program
> gracefully.
> 
> -- 
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]