I'm getting an "out of scratch space in action" error and I don't know
why. The amount of data being copied around is very small:


# dtrace -n 'simple$target:::start {printf("%s\n",
args[0]->data_string);}' -c "./simple" 
dtrace: description 'simple$target:::start ' matched 1 probe
dtrace: pid 1601 has exited
dtrace: error on enabled probe ID 1 (ID 66120:
simple1601:simple:main:start): out of scratch space in action #1 at DIF
offset 148


# cat simple.d     
typedef struct _my_data {
        uint32_t length; /* length of data buffer */
        uint32_t data;   /* Pointer to data */
} my_data;

typedef struct data {
        string data_string;
} data_t;

translator data_t  < my_data *P > {
    data_string = strjoin("@",
        stringof(copyin((uintptr_t)(*((uint32_t *)
        copyin((uintptr_t)&P->data, sizeof (uint32_t)))), *((uint32_t *)
        copyin((uintptr_t)&P->length, sizeof (uint32_t))))));
};


# cat simple.c
typedef struct _my_data {
        unsigned int length;
        char *data;
} my_data;

#include "s.h"

int main() {
        my_data data;

        data.length = strlen("TEST");
        data.data = malloc(data.length);
        memcpy(data.data, "TEST", data.length);

        SIMPLE_START(&data);
}


If I remove the "strjoin" in the translator it works fine.

-M

_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to