On 24 Aug 2015 14:42, Patrik Jakobsson wrote: > We need to be able to store private data in the tcb across it's > lifetime. To ensure proper destruction of the data a free_priv_data > callback must be provided if an allocation is stored in priv_data. The > callback is executed automatically when the life of the tcb ends. > > * defs.h: Add extern declaration of free_tcb_priv_data. > (struct tcb): Add priv_data and free_priv_data. > * strace.c (free_tcb_priv_data): New function > (drop_tcb): Execute free_tcb_priv_data callback > * syscall.c (trace_syscall_exiting): Execute free_tcb_priv_data callback > > Signed-off-by: Patrik Jakobsson <patrik.jakobsson@xxxxxxxxxxxxxxx> > --- > defs.h | 6 ++++++ > strace.c | 14 ++++++++++++++ > syscall.c | 1 + > 3 files changed, 21 insertions(+) > > diff --git a/defs.h b/defs.h > index 9059026..bc3bd83 100644 > --- a/defs.h > +++ b/defs.h > @@ -266,6 +266,10 @@ struct tcb { > int u_error; /* Error code */ > long scno; /* System call number */ > long u_arg[MAX_ARGS]; /* System call arguments */ > + > + void *priv_data; /* Private data for syscall decoding functions */ > + void (*free_priv_data)(void *); /* Callback for freeing priv_data */ should we name these _priv_data and _free_priv_data and provides accessor functions ? i worry that code paths might stomp on each other by accident and we don't end up noticing. static void set_tcb_priv_data(struct tcb *tcp, void *data, void (*free_data)(void *)) { assert(tcp->_priv_data == NULL && tcp->_free_priv_data == NULL); ... } -mike
Attachment:
signature.asc
Description: Digital signature
_______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx