This is the mail archive of the gdb-patches@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: [commit] new observer.[hc] files


static void
observer_normal_stop_notification_stub (const void *data,
					const void *unused_args)
{
  observer_normal_stop_ftype *notify = (observer_normal_stop_ftype *) data;
  (*notify) ();
}


Is this extra indirection really necessary?  Because I'm 99% sure it
won't work on several 64-bit platforms.  Function pointers and data
pointers are not required to have the same size; on IA-64 I believe
that a function pointer is 128 bits and a data pointer is 64 bits.

Like the PowerABI? That has a 32 bit pointer but a 64 bit function descriptor. void* ends up containing the address of the function descriptor. Anyway, "defs.h" has the comment:


/* NOTE: cagney/2000-03-04: This typedef is strictly for the
   make_cleanup function declarations below. Do not use this typedef
   as a cast when passing functions into the make_cleanup() code.
   Instead either use a bounce function or add a wrapper function.
   Calling a f(char*) function with f(void*) is non-portable. */
typedef void (make_cleanup_ftype) (void *);

Once the code gets converted into a SED script, it can always be changed to something more strict.

Why not require all observer functions to take the same arguments
instead?

Per the original thread, it is to ensure strongly typed interfaces.


Andrew



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