+ /* DEBUG */
+ //fprintf(fp, "\t\tif(resret == 1) {\n");
+ //fprintf(fp, "printk(\"f%%lu e\%%u \", ltt_facility_%s_%X, event_%s);",
+ // facName, checksum, ev->name);
+ //fprintf(fp, "\t\t}\n");
+
+ /* Write the header */
+ fprintf(fp, "\n");
+ fprintf(fp,"\t\tlength = event_length - _offset - header_length;\n");
+ fprintf(fp, "\n");
+ fprintf(fp, "\t\tltt_write_event_header(trace, channel, buff, \n"
+ "\t\t\t\tltt_facility_%s_%X, event_%s, length, _offset,\n"
+ "\t\t\t\t&delta, &tsc);\n",
+ facName, checksum, ev->name);
+ fprintf(fp, "\n");
+
+ if(ev->type != 0)
+ fprintf(fp, "\t\tptr = (char*)buff + _offset + header_length;\n");
+
+ //copy struct, sequence and string to buffer
+ //FIXME : they always come before the structs.
+ seqCount = 0;
+ strCount = 0;
+ flag = 0;
+ structCount = 0;
+ if(ev->type != 0)
+ for(pos1 = 0; pos1 < ev->type->fields.position; pos1++){
+ fld = (field_t *)ev->type->fields.array[pos1];
+ td = fld->type;
+ // if(td->type != STRING && td->type != SEQUENCE && td->type != ARRAY){
+ // if(flag == 0) structCount++;
+ // flag++;
+ // if((structCount > 1 || whichTypeFirst == 2) && flag == 1){
+ // assert(0); // MD : disabled !
+ // fprintf(fp,"\t//copy struct to buffer\n");
+ // fprintf(fp,"\tmemcpy(ptr, &__%d, sizeof(struct %s_%s_%d));\n",
+ // structCount, ev->name, facName,structCount);
+ // fprintf(fp,"\tptr += sizeof(struct %s_%s_%d);\n\n",
+ // ev->name, facName,structCount);
+ // }
+ // }
+ //else if(td->type == SEQUENCE){
+ if(td->type == SEQUENCE){
+ flag = 0;
+ fprintf(fp,"\t\t//copy sequence length and sequence to buffer\n");
+
+ unsigned align = max(alignment, td->alignment);
+ if(align > 1) {
+ fprintf(fp,"\t\tptr+=(%u - ((unsigned int)ptr&(%u-1)))&(%u-1);\n",
+ align, align, align);
+ }
+ fprintf(fp,"\t\t*ptr = seqlength_%d;\n",++seqCount);
+ fprintf(fp,"\t\tptr += sizeof(%s);\n",uintOutputTypes[td->size]);
+ if(align > 1) {
+ fprintf(fp,"\t\tptr+=(%u - ((unsigned int)ptr&(%u-1)))&(%u-1);\n",
+ align, align, align);
+ }
+ fprintf(fp,"\t\tmemcpy(ptr, %s, sizeof(%s) * seqlength_%d);\n",
+ fld->name, getTypeStr(td), seqCount);
+ fprintf(fp,"\t\tptr += sizeof(%s) * seqlength_%d;\n\n",
+ getTypeStr(td), seqCount);
+ }
+ else if(td->type==STRING){
+ flag = 0;
+ fprintf(fp,"\t\t//copy string to buffer\n");
+ fprintf(fp,"\t\tif(strlength_%d > 0){\n",++strCount);
+ unsigned align = max(alignment, td->alignment);
+ if(align > 1) {
+ fprintf(fp,"\t\tptr+=(%u - ((unsigned int)ptr&(%u-1)))&(%u-1);\n",
+ align, align, align);
+ }
+ fprintf(fp,"\t\t\tmemcpy(ptr, %s, strlength_%d + 1);\n",
+ fld->name, strCount);
+ fprintf(fp,"\t\t\tptr += strlength_%d + 1;\n",strCount);
+ fprintf(fp,"\t\t}else{\n");
+ fprintf(fp,"\t\t\t*ptr = '\\0';\n");
+ fprintf(fp,"\t\t\tptr += 1;\n");
+ fprintf(fp,"\t\t}\n\n");
+ }else if(td->type==ARRAY){
+ flag = 0;
+ fprintf(fp,"\t//copy array to buffer\n");
+ unsigned align = max(alignment, td->alignment);
+ if(align > 1) {
+ fprintf(fp,"\t\tptr+=(%u - ((unsigned int)ptr&(%u-1)))&(%u-1);\n",
+ align, align, align);
+ }
+ fprintf(fp,"\tmemcpy(ptr, %s, sizeof(%s) * %d);\n",
+ fld->name, getTypeStr(td), td->size);
+ fprintf(fp,"\tptr += sizeof(%s) * %d;\n\n", getTypeStr(td), td->size);
+ }
+ }
+ if(structCount + seqCount > 1) fprintf(fp,"\n");
+
+
+
+