[DTrace-devel] [PATCH 2/5] slight code refactoring to eliminate gratuitous differences between providers

Eugene Loh eugene.loh at oracle.com
Mon Jun 15 09:41:10 PDT 2020


On 06/12/2020 06:03 PM, Kris Van Hees wrote:

> On Thu, Jun 11, 2020 at 05:29:38PM -0400, eugene.loh at oracle.com wrote:
>> diff --git a/libdtrace/dt_prov_syscall.c b/libdtrace/dt_prov_syscall.c
>> @@ -40,19 +40,6 @@ static const char		modname[] = "vmlinux";
>>   
>>   #define SYSCALLSFS		EVENTSFS "syscalls/"
>>   
>> -/*
>> - * We need to skip over an extra field: __syscall_nr.
>> - */
>> -#define SKIP_EXTRA_FIELDS	1
>> -
>> -static const dtrace_pattr_t	pattr = {
>> -{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
>> -{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
>> -{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
>> -{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
>> -{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
>> -};
>> -
>>   struct syscall_data {
>>   	dt_pt_regs	*regs;
>>   	long		syscall_nr;
>> @@ -67,6 +54,19 @@ struct syscall_data {
>>   #define ENTRY_PREFIX	"sys_enter_"
>>   #define EXIT_PREFIX	"sys_exit_"
>>   
>> +/*
>> + * We need to skip over an extra field: __syscall_nr.
>> + */
>> +#define SKIP_EXTRA_FIELDS	1
>> +
>> +static const dtrace_pattr_t	pattr = {
>> +{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
>> +{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
>> +{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
>> +{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
>> +{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
>> +};
>> +
>>   /* Scan the PROBE_LIST file and add probes for any syscalls events. */
>>   static int populate(dtrace_hdl_t *dtp)
>>   {
> I do not understand the rationale for the change.  I can think of some
> re-ordering that could be done, but not what you propose here,  Cam you
> explain why you chose to to this?

Sure.  There is a pattern of overall organization that is evident in the 
various dt_prov_*.c files, with one exception being the placement of the 
stability attributes in this one file.  There is no justification (that 
I know of) for that one egregious exception; meanwhile, uniform 
organization would be nice for developers.

Incidentally, here is that overall organization:

     +---------------  dt_prov_dtrace.c
     | +-------------  dt_prov_fbt.c
     | | +-----------  dt_prov_profile.c
     | | | +---------  dt_prov_sdt.c
     | | | | +-------  dt_prov_syscall.c
     | | | | |
     | | | | |
     v v v v v

     * * * * *  Copyright notice and introductory comments
     * * * * *  include files
     * * * * *  define names like prvname, modname, funname
             *  STABILITY ATTRIBUTES
     * * * * *  define preprocessor symbols (tracefs files, prefixes, 
suffixes)
     * * * *    STABILTIY ATTRIBUTES
     * * * * *  populate()
     * * * * *  trampoline()
     * * * * *  probe_info()
         *      provide()
     * *        probe_fini()
     * * * * *  dt_provimpl_t = { }

You can see that moving the stability attributes in that one file 
improves the uniformity.

(Not all providers have provide() or probe_fini() functions.  Also, the 
inclusion of the profile provider is a little anachronistic -- it 
appeared in a later commit -- so you can omit that column if you like.)



More information about the DTrace-devel mailing list