Skip to content
Snippets Groups Projects
Commit ef435231 authored by Per's avatar Per
Browse files

using Executor

parent ba33dd1e
No related branches found
No related tags found
No related merge requests found
...@@ -47,12 +47,7 @@ def gdb_set_pc(task): ...@@ -47,12 +47,7 @@ def gdb_set_pc(task):
def gdb_call(task): def gdb_call(task):
# call task # call task
print("#### call task %s" % task) print("#### call task %s" % task)
# try: gdb.execute('call %s' % "stub_" + task + "()"a')
gdb.execute('call %s' % "stub_" + task + "()")
# print("<<<<<<<<<<<<<<<<< after call >>>>>>>>>>>>>>>>>")
# except gdb.error:
# print("!!!!!!!!!!!!!!!!! after call !!!!!!!!!!!!!!!!!")
def gdb_bkpt_read(): def gdb_bkpt_read():
...@@ -63,14 +58,14 @@ def gdb_bkpt_read(): ...@@ -63,14 +58,14 @@ def gdb_bkpt_read():
def gdb_setup(): def gdb_setup():
# Commands for making GDB scriptable # Commands for making GDB scriptable
print("gbd init") print("gbd init")
# gdb.execute("set confirm off") gdb.execute("set confirm off")
# gdb.execute("set pagination off") gdb.execute("set pagination off")
# # gdb.execute("set verbose off") gdb.execute("set verbose off")
# # gdb.execute("set height 0") gdb.execute("set height 0")
# # gdb.execute("set unwindonsignal off")
# # gdb.execute("set unwind-on-terminating-exception off")
# gdb.execute("set unwindonsignal on") # gdb.execute("set unwindonsignal on")
gdb.execute("set unwind-on-terminating-exception on") # gdb.execute("set unwindonsignal off")
# gdb.execute("set unwind-on-terminating-exception on")
# gdb.execute("set unwind-on-terminating-exception off")
gdb.execute("show unwindonsignal") gdb.execute("show unwindonsignal")
gdb.execute("show unwind-on-terminating-exception") gdb.execute("show unwind-on-terminating-exception")
...@@ -80,82 +75,73 @@ def gdb_setup(): ...@@ -80,82 +75,73 @@ def gdb_setup():
# Event handling # Event handling
# Ugly hack to avoid race condtitons in the python gdb API
class Executor:
def __init__(self, cmd):
self.__cmd = cmd
def __call__(self):
gdb.execute(self.__cmd)
# GDB event, called on breakpoint # GDB event, called on breakpoint
def stop_event(evt): def stop_event(evt):
global task_nr
print("#### stop event %r" % evt) print("#### stop event %r" % evt)
# gdb.execute("finish")
# gdb.execute("continue")
# gdb.execute("break")
imm = gdb_bkpt_read() imm = gdb_bkpt_read()
print(" imm = {}".format(imm)) print(" imm = {}".format(imm))
if imm == 0: if imm == 0:
print("-- ordinary breakpoint --") print("-- ordinary breakpoint --")
# gdb.execute("return") sys.exit(1)
# gdb_continue()
if imm == 1: if imm == 1:
print("Enter") print(">>>>>>>>>>>>> Enter")
# gdb.execute("return")
# gdb_continue() gdb.post_event(Executor("continue"))
if imm == 2: if imm == 2:
print("Exit") print("<<<<<<<<<<<<< Exit")
# gdb.execute("return") gdb.post_event(Executor("continue"))
# gdb_continue()
if imm == 3: if imm == 3:
print("Finished") print("------------- Finished")
next_task() task_nr = task_nr + 1
# gdb.execute("return") # gdb.execute("si")
gdb.execute("return")
def exit_handler(event):
print("event type: exit")
print("exit code: %d" % (event.exit_code))
# gdb.events.inferior_call_post.connect(exit_handler) gdb.post_event(posted_event_init)
def next_task(): def posted_event_init():
print("")
print("------------- posted_event_init ")
global tasks global tasks
global task_nr global task_nr
print("--------------------------- task nr {}".format(task_nr)) print("------------- task nr {}".format(task_nr))
if task_nr >= len(tasks): if task_nr >= len(tasks):
print("--------------------------- tasks done") print("------------- tasks done")
gdb.execute("quit")
else: else:
try: try:
gdb_call(tasks[task_nr]) gdb_call(tasks[task_nr])
print("--------------------------- call done, no bkpts") print("!!!!!!!!!!!!!!!!!!!!!! ERROR !!!!!!!!!!!!!!!!!!!!!!!!")
task_nr = task_nr + 1 sys.exit(1)
next_task()
return
except: except:
print("--------------------------- call except, with bkpts wait to be called") print("------------- call except")
task_nr = task_nr + 1
# globals # globals
tasks = ["EXTI2", "EXTI3", "EXTI3"] # tasks = ["EXTI2", "EXTI3", "EXTI3"]
tasks = ["EXTI3", "EXTI2", "EXTI1"]
task_nr = 0 task_nr = 0
print("simple python script started") print("simple python script started")
gdb_setup() gdb_setup()
gdb.events.stop.connect(stop_event) gdb.events.stop.connect(stop_event)
next_task() gdb.post_event(posted_event_init)
# gdb.execute("b enter")
# gdb.execute("b exit")
# gdb_set_pc("EXTI1")
# for t_nr, task in enumerate(tasks):
# print("-------------- t_nr {}".format(t_nr))
# # gdb_set_pc(task)
# gdb_call(tasks[t_nr])
...@@ -29,7 +29,12 @@ pub fn app(app: &App, ownerships: &Ownerships) -> Tokens { ...@@ -29,7 +29,12 @@ pub fn app(app: &App, ownerships: &Ownerships) -> Tokens {
quote!(#(#root)*) quote!(#(#root)*)
} }
fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) { fn idle(
app: &App,
ownerships: &Ownerships,
main: &mut Vec<Tokens>,
root: &mut Vec<Tokens>,
) {
let krate = krate(); let krate = krate();
let mut mod_items = vec![]; let mut mod_items = vec![];
...@@ -547,9 +552,10 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -547,9 +552,10 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
for rname in &task.resources { for rname in &task.resources {
let ceiling = ownerships[rname].ceiling(); let ceiling = ownerships[rname].ceiling();
let _rname = Ident::new(format!("_{}", rname.as_ref())); let _rname = Ident::new(format!("_{}", rname.as_ref()));
let resource = app.resources let resource = app.resources.get(rname).expect(&format!(
.get(rname) "BUG: resource {} has no definition",
.expect(&format!("BUG: resource {} has no definition", rname)); rname
));
let ty = &resource.ty; let ty = &resource.ty;
let _static = if resource.expr.is_some() { let _static = if resource.expr.is_some() {
...@@ -707,7 +713,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) { ...@@ -707,7 +713,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
fn #_stub_tname() { fn #_stub_tname() {
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe { #_tname(); } unsafe { #_tname(); }
//unsafe { bkpt_3(); } unsafe { bkpt_3(); }
} }
}); });
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment