Changeset 23187 for titan/titan/debug.h


Ignore:
Timestamp:
Aug 31, 2013, 2:25:08 PM (7 years ago)
Author:
nit
Message:

[titan] add new stack trace for dev images

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/debug.h

    r22862 r23187  
    1313// mc debug_level = 50;
    1414// panel debug_level = 60;
     15
     16void __cyg_profile_func_enter(void *this_fn, void* call_size) __attribute__((no_instrument_function));
     17void __cyg_profile_func_enter(void *this_fn, void* call_size)
     18{
     19        int i = 0, freeid = -1;
     20        pthread_t threadid = pthread_self();
     21
     22        for(i = 0; i < MAXSTACKTRACE; i++)
     23        {
     24                if(stacktrace[i].thread == NULL && freeid == -1) freeid = i;
     25                if(stacktrace[i].thread == threadid)
     26                {
     27                        stacktrace[i].func[stacktrace[i].pos] = this_fn;
     28                        stacktrace[i].pos++;
     29                        if(stacktrace[i].pos >= MAXSTACKTRACE - 1) stacktrace[i].pos = MAXSTACKTRACE - 1;
     30                        freeid = -2;
     31                }
     32        }
     33
     34        if(freeid >= -1)
     35        {
     36                stacktrace[freeid].thread = threadid;
     37                stacktrace[freeid].func[stacktrace[freeid].pos] = this_fn;
     38                stacktrace[freeid].pos++;
     39                if(stacktrace[i].pos >= MAXSTACKTRACE) stacktrace[i].pos = MAXSTACKTRACE - 1;
     40        }
     41}
     42
     43void __cyg_profile_func_exit(void *this_fn, void* call_size) __attribute__((no_instrument_function));
     44void __cyg_profile_func_exit(void *this_fn, void* call_size)
     45{
     46        int i = 0;
     47        pthread_t threadid = pthread_self();
     48
     49        for(i = 0; i < MAXSTACKTRACE; i++)
     50        {
     51                if(stacktrace[i].thread == threadid)
     52                {
     53                        stacktrace[i].pos--;
     54                        if(stacktrace[i].pos < 0) stacktrace[i].pos = 0;
     55                        stacktrace[i].func[stacktrace[i].pos] = NULL;
     56                        if(stacktrace[i].pos == 0) stacktrace[i].thread = NULL;
     57                }
     58        }
     59}
    1560
    1661//debug
Note: See TracChangeset for help on using the changeset viewer.