# # Set of GDB user defined commands for debugging application % !CPUNAME % # Automatically generated by goil on % !TIMESTAMP % # from root OIL file % !OILFILENAME % # # Trampoline RTOS # % if exists OS::GDBCOMMANDS_S::PORT then % # # Connect to target, load the program, put a pb on main # tar extended-remote : % !OS::GDBCOMMANDS_S::PORT % load break main % end if let internal_rez := @() let standard_rez := @() foreach rez in RESOURCES do if rez::RESOURCEPROPERTY == "INTERNAL" then let internal_rez += rez elsif rez::RESOURCEPROPERTY == "STANDARD" then let standard_rez += rez end if end foreach if OS::USERESSCHEDULER then let standard_rez += @{ NAME: "res_sched" } end if % define tr_print_internal_rez_name% foreach rez in internal_rez do if rez::NAME == "INTERNAL_RES_SCHEDULER" then % if $arg0 == &% !rez::NAME else % if $arg0 == &% !rez::NAME %_rez_desc% end if% printf "% !rez::NAME %" end% end foreach % if $arg0 == 0 printf "NONE" end end define tr_print_rez_name% foreach rez in standard_rez do% if $arg0 == &% !rez::NAME %_rez_desc% if rez::NAME == "res_sched" then % printf "RES_SCHEDULER"% else% printf "% !rez::NAME % "% end if% end% end foreach % end define tr_print_held_rez tr_print_rez_name $arg0 if $arg0 != 0 tr_print_held_rez $arg0->next_res end end define tr_print_task_state set $_state = $arg0 & 0x3 if $_state == 0 printf "SUSPENDED" else if $_state == 1 printf "READY" else if $_state == 2 printf "RUNNING" else if $_state == 3 printf "WAITING" end end end end end define tr_print_event set $_tr_displayed_event_count = 0 set $_tr_task_events = $arg0% foreach ev in EVENTS do % if $_tr_task_events & % !ev::MASK % == % !ev::MASK % printf "% !ev::NAME % " set $_tr_task_events = $_tr_task_events & ~% !ev::MASK % set $_tr_displayed_event_count = $_tr_displayed_event_count + 1 end% end foreach % if $_tr_task_events != 0 printf "\%d",$_tr_task_events set $_tr_displayed_event_count = $_tr_displayed_event_count + 1 end if $_tr_displayed_event_count == 0 printf "" end end % foreach task in TASKS do % define _% !task::NAME % printf "Task % !task::NAME % (id = \%d, %if exists task::EVENT then %EXTENDED% else %BASIC% end if%):\\n", % !task::NAME %_task_stat_desc.id printf "\tstate = " tr_print_task_state % !task::NAME %_task_desc.state printf "\\n\tpriority = \%d/\%d\\n",% !task::NAME %_task_desc.priority >> % ! PRIORITY_SHIFT %,% !task::NAME %_task_stat_desc.base_priority printf "\tactivate_count = \%d/\%d\\n",% !task::NAME %_task_desc.activate_count,% !task::NAME %_task_stat_desc.max_activate_count printf "\tinternal_resource = " tr_print_internal_rez_name % !task::NAME %_task_stat_desc.internal_resource printf "\\n" printf "\tresources = [ " tr_print_held_rez % !task::NAME %_task_desc.resources printf "]\\n"% if exists task::EVENT then% printf "\twait event(s) = " tr_print_event % !task::NAME %_task_evts.evt_wait printf "\\n" printf "\tgot event(s) = " tr_print_event % !task::NAME %_task_evts.evt_set printf "\\n"% end if% end document _% !task::NAME % Displays the task descriptor of _% !task::NAME % synthetically end define b_% !task::NAME % b % !task::NAME %_function end document b_% !task::NAME % Places a breakpoint on the first instruction of the task _% !task::NAME % end % end foreach % define tr_print_task_name_from_id set $_found = 0% foreach proc in PROCESSES do% if $arg0 == % !INDEX % printf "% !proc::NAME %" set $_found = 1 end% end foreach % if $arg0 == % ![PROCESSES length]% printf "IDLE" set $_found = 1 end if $_found == 0 printf "NONE" end end % foreach rez in standard_rez do % define _% !rez::NAME % printf "Resource % !rez::NAME % (id = \%d, STANDARD):\\n",% !rez::NAME % printf "\tceiling priority = \%d\\n",% !rez::NAME %_rez_desc.ceiling_priority printf "\towner = " tr_print_task_name_from_id % !rez::NAME %_rez_desc.owner printf "\\n" if % !rez::NAME %_rez_desc.owner != -1 printf "\towner prev priority = \%d\\n",% !rez::NAME %_rez_desc.owner_prev_priority >> % ! PRIORITY_SHIFT % end end document _% !rez::NAME % Displays the resource descriptor of _% !rez::NAME % synthetically end % end foreach foreach rez in internal_rez do % define _% !rez::NAME let rezDescName := rez::NAME if rez::NAME != "INTERNAL_RES_SCHEDULER" then let rezDescName := rezDescName + "_rez_desc" end if % printf "Resource % !rez::NAME % (INTERNAL):\\n" printf "\tceiling priority = \%d\\n",% !rezDescName %.ceiling_priority printf "\ttaken = \%d\\n",% !rezDescName %.taken if % !rez::NAME %_rez_desc.taken == 1 printf "\towner prev priority = \%d\\n",% !rezDescName %.owner_prev_priority >> % ! PRIORITY_SHIFT % end end document _% !rez::NAME % Displays the resource descriptor of _% !rez::NAME % synthetically end % end foreach % define tr_print_counter_name% foreach cnt in COUNTERS do % if $arg0 == &% !cnt::NAME %_counter_desc printf "% !cnt::NAME %" end% end foreach% end define tr_print_alarm_state if $arg0 == 0 printf "SLEEP" else if $arg0 == 1 printf "ACTIVE" else if $arg0 == 2 printf "AUTOSTART" else printf "?" end end end end % let use_activate_task_action := false let use_set_event_action := false foreach alarm in ALARMS do if alarm::ACTION == "ACTIVATETASK" then let use_activate_task_action := true elsif alarm::ACTION == "SETEVENT" then let use_set_event_action := true end if end foreach % define tr_print_event_name_for_mask% foreach event in EVENTS do% if $arg0 == % !event::NAME % printf "% !event::NAME %" end% end foreach% end define tr_print_alarm_action% if use_activate_task_action then% set $_action_ptr = ((tpl_action*)$arg0)->action if ((int)$_action_ptr & ~1) == tpl_action_activate_task printf "ActivateTask(" tr_print_task_name_from_id ((tpl_task_activation_action*)$arg0)->task_id printf ")" end% end if if use_set_event_action then% if ((int)$_action_ptr & ~1) == tpl_action_setevent printf "SetEvent(" tr_print_task_name_from_id ((tpl_setevent_action*)$arg0)->task_id printf ", " tr_print_event_name_for_mask ((tpl_setevent_action*)$arg0)->mask printf ")" end% end if% if ((int)$_action_ptr & ~1) == tpl_action_callback output ((tpl_callback_action*)$arg0)->callback end end % foreach alarm in ALARMS do % define _% !alarm::NAME% printf "Alarm % !alarm::NAME% (id = \%d):\\n",% !alarm::NAME % printf "\tcounter = " tr_print_counter_name % !alarm::NAME %_alarm_desc.stat_part->counter printf "(\%d)\\n",% !alarm::NAME %_alarm_desc.stat_part->counter->current_date printf "\tstate = " tr_print_alarm_state % !alarm::NAME %_alarm_desc.state printf "\\n" if % !alarm::NAME %_alarm_desc.state == 1 printf "\tdate = \%d\\n",% !alarm::NAME %_alarm_desc.date if % !alarm::NAME %_alarm_desc.cycle != 0 printf "\tcycle = \%d\\n",% !alarm::NAME %_alarm_desc.cycle end end printf "\taction = " tr_print_alarm_action ((tpl_alarm_static*)% !alarm::NAME %_alarm_desc.stat_part)->action printf "\\n" end document _% !alarm::NAME % Displays the alarm descriptor of _% !alarm::NAME % synthetically end % end foreach % define tr_print_alarm_name% foreach alarm in ALARMS do% if $arg0 == &% !alarm::NAME %_alarm_desc printf "% !alarm::NAME %" end% end foreach% end define tr_print_alarm_list if $arg0 != $arg1 tr_print_alarm_name $arg0 printf "(\%d) ",$arg0->date tr_print_alarm_list $arg0->next_to $arg1 end end % foreach cnt in COUNTERS do % define _% !cnt::NAME % printf "Counter % !cnt::NAME %:\\n" printf "\tticks per base = \%d\\n",% !cnt::NAME %_counter_desc.ticks_per_base printf "\tmax allowed value = \%d\\n",% !cnt::NAME %_counter_desc.max_allowed_value printf "\tmin cycle = \%d\\n",% !cnt::NAME %_counter_desc.min_cycle printf "\tcurrent tick = \%d\\n",% !cnt::NAME %_counter_desc.current_tick printf "\tcurrent date = \%d\\n",% !cnt::NAME %_counter_desc.current_date printf "\talarms = [ " tr_print_alarm_list % !cnt::NAME %_counter_desc.next_to 0 tr_print_alarm_list % !cnt::NAME %_counter_desc.first_to % !cnt::NAME %_counter_desc.next_to printf "]\\n" end document _% !cnt::NAME % Displays the counter descriptor of _% !cnt::NAME % end % end foreach % define p_kernel printf "tpl_kern:\\n" printf "\trunning = " tr_print_task_name_from_id tpl_kern.running_id printf "\\n\telected = " tr_print_task_name_from_id tpl_kern.elected_id printf "\\n\tneed schedule = \%d\\n",tpl_kern.need_schedule printf "\tneed switch = \%d\\n",tpl_kern.need_switch & 1 printf "\tneed save = \%d\\n",tpl_kern.need_switch >> 1 if tpl_kern.running_id != -1 if tpl_kern.s_running != tpl_stat_proc_table[tpl_kern.running_id] printf "warning: tpl_kern pointer to static running proc descriptor does not correspond to running id\\n" end if tpl_kern.running != tpl_dyn_proc_table[tpl_kern.running_id] printf "warning: tpl_kern pointer to dynamic running proc descriptor does not correspond to running id\\n" end end if tpl_kern.elected_id != -1 if tpl_kern.s_elected != tpl_stat_proc_table[tpl_kern.elected_id] printf "warning: tpl_kern pointer to static elected proc descriptor does not correspond to elected id\\n" end if tpl_kern.elected != tpl_dyn_proc_table[tpl_kern.elected_id] printf "warning: tpl_kern pointer to dynamic elected proc descriptor does not correspond to elected id\\n" end end end define indentby set $_indent = $arg0 + 2 while $_indent > 0 printf " " set $_indent = $_indent - 1 end end define p_ready_list_node indentby $arg1 printf "[\%d](\%d,\%d) ",tpl_ready_list[$arg0].key,tpl_ready_list[$arg0].key >> % !PRIORITY_SHIFT %,tpl_ready_list[$arg0].key & % !RANK_MASK % tr_print_task_name_from_id tpl_ready_list[$arg0].id printf "\\n" if ($arg0<<1) <= tpl_ready_list[0].key p_ready_list_node ($arg0<<1) ($arg1+2) end if (($arg0<<1)+1) <= tpl_ready_list[0].key p_ready_list_node (($arg0<<1)+1) ($arg1+2) end end define p_ready_list printf "ready_list [\%d]:\\n", tpl_ready_list[0].key if tpl_ready_list[0].key > 0 p_ready_list_node 1 0 else printf "EMPTY\\n" end end