support multiple processes at once

This commit is contained in:
George Hotz 2014-07-17 13:43:06 -07:00
parent 7aa4d259c5
commit 3b8f8ee0c5
2 changed files with 28 additions and 30 deletions

View File

@ -14,7 +14,6 @@ sudo pip install pyelftools blist flask-socketio
echo "making symlinks"
sudo ln -sf $(pwd)/qira /usr/local/bin/qira
sudo ln -sf $(pwd)/qira-server /usr/local/bin/qira-server
sudo ln -sf $(pwd)/qemu/qira-i386 /usr/local/bin/qira-i386
sudo ln -sf $(pwd)/qemu/qira-arm /usr/local/bin/qira-arm
sudo ln -sf $(pwd)/qemu/qira-sparc /usr/local/bin/qira-sparc

View File

@ -189,36 +189,35 @@ def init_bindserver():
ss2.listen(5)
def start_bindserver(myss, parent_id, start_cl, loop = False):
if loop:
if os.fork() != 0:
return
if os.fork() != 0:
return
# bindserver runs in a fork
while 1:
# bindserver runs in a fork
if os.fork() == 0:
print "**** listening on",myss
(cs, address) = myss.accept()
run_id = get_next_run_id()
print "**** ID",run_id,"CLIENT",cs, address, cs.fileno()
print "**** listening on",myss
(cs, address) = myss.accept()
fd = cs.fileno()
# python nonblocking is a lie...
fcntl.fcntl(fd, fcntl.F_SETFL, fcntl.fcntl(fd, fcntl.F_GETFL, 0) & ~os.O_NONBLOCK)
os.dup2(fd, 0)
os.dup2(fd, 1)
os.dup2(fd, 2)
for i in range(3, fd+1):
try:
os.close(i)
except:
pass
# fingerprint here
os.execvp('qira-i386', ["qira-i386", "-qirachild",
"%d %d %d" % (parent_id, start_cl, run_id), "-singlestep",
"/tmp/qira_binary"]+sys.argv[2:])
if not loop:
break
print os.wait()
print "**** CLIENT DONE"
# fork off the child if we are looping
if loop:
if os.fork() != 0:
continue
run_id = get_next_run_id()
print "**** ID",run_id,"CLIENT",cs, address, cs.fileno()
fd = cs.fileno()
# python nonblocking is a lie...
fcntl.fcntl(fd, fcntl.F_SETFL, fcntl.fcntl(fd, fcntl.F_GETFL, 0) & ~os.O_NONBLOCK)
os.dup2(fd, 0)
os.dup2(fd, 1)
os.dup2(fd, 2)
for i in range(3, fd+1):
try:
os.close(i)
except:
pass
# fingerprint here
os.execvp('qira-i386', ["qira-i386", "-qirachild",
"%d %d %d" % (parent_id, start_cl, run_id), "-singlestep",
"/tmp/qira_binary"]+sys.argv[2:])
def delete_old_runs():
# delete the logs
@ -239,8 +238,8 @@ if __name__ == '__main__':
if len(sys.argv) < 2:
print "usage: %s <target binary>" % sys.argv[0]
exit(-1)
#delete_old_runs()
delete_old_runs()
# creates the file symlink, program is constant through server run
program = qira_trace.Program(os.path.realpath(sys.argv[1]))