targets/plc_debug.c
changeset 954 ab487d32ce9a
parent 944 52a17be9c4d1
child 969 1950fe687dde
equal deleted inserted replaced
953:1fb6cf5a4c4d 954:ab487d32ce9a
   182     BufferIterator(varp, vartype, 0);
   182     BufferIterator(varp, vartype, 0);
   183 }
   183 }
   184 
   184 
   185 extern int TryEnterDebugSection(void);
   185 extern int TryEnterDebugSection(void);
   186 extern long AtomicCompareExchange(long*, long, long);
   186 extern long AtomicCompareExchange(long*, long, long);
       
   187 extern long long AtomicCompareExchange64(long long* , long long , long long);
   187 extern void LeaveDebugSection(void);
   188 extern void LeaveDebugSection(void);
   188 extern void ValidateRetainBuffer(void);
   189 extern void ValidateRetainBuffer(void);
   189 extern void InValidateRetainBuffer(void);
   190 extern void InValidateRetainBuffer(void);
   190 
   191 
   191 void __publish_debug(void)
   192 void __publish_debug(void)
   374             old_cursor = LogCursor[level];
   375             old_cursor = LogCursor[level];
   375             buffpos = (uint32_t)old_cursor;
   376             buffpos = (uint32_t)old_cursor;
   376             tail.msgidx = (old_cursor >> 32); 
   377             tail.msgidx = (old_cursor >> 32); 
   377             new_cursor = ((uint64_t)(tail.msgidx + 1)<<32) 
   378             new_cursor = ((uint64_t)(tail.msgidx + 1)<<32) 
   378                          | (uint64_t)((buffpos + size + sizeof(mTail)) & LOG_BUFFER_MASK);
   379                          | (uint64_t)((buffpos + size + sizeof(mTail)) & LOG_BUFFER_MASK);
   379         }while(!__sync_bool_compare_and_swap(&LogCursor[level],old_cursor,new_cursor));
   380         }while(AtomicCompareExchange64(
       
   381             (long long*)&LogCursor[level],
       
   382             (long long)old_cursor,
       
   383             (long long)new_cursor)!=old_cursor);
   380 
   384 
   381         copy_to_log(level, buffpos, buf, size);
   385         copy_to_log(level, buffpos, buf, size);
   382         copy_to_log(level, (buffpos + size) & LOG_BUFFER_MASK, &tail, sizeof(mTail));
   386         copy_to_log(level, (buffpos + size) & LOG_BUFFER_MASK, &tail, sizeof(mTail));
   383 
   387 
   384         return 1; /* Success */
   388         return 1; /* Success */