This is the mail archive of the gdb@sourceware.cygnus.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]

Anyone know some reasonably portable way to determine the return address of a function?


    Date: Tue, 06 Jun 2000 18:52:45 -0400
    From: "George T. Talbot" <george@moberg.com>

    I'm working on some library code in Linux, and, for debugging purposes, I'd
    like to be able to call dlinfo() on the return address of a function in my
    library so that I can track usage of the function:

    #define magic()         ...woudln't I like to know...

If you're using gcc, look in the gcc documentation at
__builtin_return_address.

    void    some_library_function(void)
    {
	    void*   return_address = magic();
	    Dl_info info;

	    if (dlinfo(return_address, &info))
		    fprintf(some_log_file, "some_library_function() called from %s in executable
    %s.\n",
			    info.dli_sname, info.dli_fname);
	    else
		    fprintf(some_log_file, "some_library_function() called from unknown
    caller.\n");


	    ...do the actual work...
    }

    -----
    void    some_code(void)
    {
	    ...
	    some_library_function();
	    ...
    }


    In other words, I want magic() above to return the address in some_code()
    where some_library_function() was called.

    Please cc: me if you post a reply to the list, in case I miss your reply.
    --
    George T. Talbot
    <george at moberg dot com>


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