# HG changeset patch # User Windel Bouwman # Date 1385669432 -3600 # Node ID 917eab04b8b794838e99c825bd699bb5175921b1 # Parent e89cca5779b080cebb39778fed0191d5f472a1f4 Added disasm diff -r e89cca5779b0 -r 917eab04b8b7 kernel/kernel.c3 --- a/kernel/kernel.c3 Thu Nov 28 20:39:56 2013 +0100 +++ b/kernel/kernel.c3 Thu Nov 28 21:10:32 2013 +0100 @@ -8,18 +8,18 @@ // Main entry point of the kernel: function void start() { - process.Init(); - memory.Init(); + process:init(); + memory:init(); - Process proc = new process.Process(); + Process proc = new process:Process(); - scheduler.queue(proc); + scheduler:queue(proc); } function void panic() { - arch.halt(); + arch:halt(); } diff -r e89cca5779b0 -r 917eab04b8b7 kernel/process.c3 --- a/kernel/process.c3 Thu Nov 28 20:39:56 2013 +0100 +++ b/kernel/process.c3 Thu Nov 28 21:10:32 2013 +0100 @@ -15,7 +15,7 @@ var process_t* init = 0; var int next_pid = 0; -public func void Init() +public function void init() { next_pid = 0; init = Create(); @@ -44,4 +44,3 @@ return 0; } - diff -r e89cca5779b0 -r 917eab04b8b7 python/c3/builder.py --- a/python/c3/builder.py Thu Nov 28 20:39:56 2013 +0100 +++ b/python/c3/builder.py Thu Nov 28 21:10:32 2013 +0100 @@ -29,7 +29,6 @@ else: self.ok = False s_pkgs = set(doParse(srcs)) - print(s_pkgs) i_pkgs = set(doParse(imps)) all_pkgs = s_pkgs | i_pkgs # Fix scopes: diff -r e89cca5779b0 -r 917eab04b8b7 python/disasm.py --- a/python/disasm.py Thu Nov 28 20:39:56 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -from PyQt4.QtCore import * -from PyQt4.QtGui import * - - -class DisAsmModel(QAbstractTableModel): - def __init__(self): - super().__init__() - self.outs = None - self.instructions = [] - self.headers = ['Address', 'Bytes', 'Instruction'] - self.txts = [] - self.txts.append(lambda i: '0x{:08x}'.format(i.address)) - self.txts.append(lambda i: str(i.encode())) - self.txts.append(lambda i: str(i)) - - def rowCount(self, parent): - return len(self.instructions) - - def columnCount(self, parent): - return len(self.headers) - - def data(self, index, role): - if not index.isValid(): - return - row, col = index.row(), index.column() - if role == Qt.DisplayRole: - i = self.instructions[row] - return self.txts[col](i) - - def headerData(self, section, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: - return self.headers[section] - - def setInstructions(self, ins): - self.instructions = ins - self.modelReset.emit() - - -class Disassembly(QTableView): - def __init__(self): - super().__init__() - self.dm = DisAsmModel() - self.setModel(self.dm) - - def showPos(self, p): - for i in self.dm.instructions: - if i.address == p: - row = self.dm.instructions.index(i) - self.selectRow(row) - diff -r e89cca5779b0 -r 917eab04b8b7 python/hexutil.py --- a/python/hexutil.py Thu Nov 28 20:39:56 2013 +0100 +++ b/python/hexutil.py Thu Nov 28 21:10:32 2013 +0100 @@ -2,7 +2,7 @@ import sys import argparse -from hexfile import HexFile +from utils import HexFile def hex2int(s): if s.startswith('0x'): diff -r e89cca5779b0 -r 917eab04b8b7 python/ide/disasm.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/ide/disasm.py Thu Nov 28 21:10:32 2013 +0100 @@ -0,0 +1,51 @@ +from PyQt4.QtCore import * +from PyQt4.QtGui import * +import binascii + + +class DisAsmModel(QAbstractTableModel): + def __init__(self): + super().__init__() + self.outs = None + self.instructions = [] + self.headers = ['Address', 'Bytes', 'Instruction'] + self.txts = [] + self.txts.append(lambda i: '0x{:08x}'.format(i.address)) + self.txts.append(lambda i: binascii.hexlify(i.encode()).decode('ascii')) + self.txts.append(lambda i: str(i)) + + def rowCount(self, parent): + return len(self.instructions) + + def columnCount(self, parent): + return len(self.headers) + + def data(self, index, role): + if not index.isValid(): + return + row, col = index.row(), index.column() + if role == Qt.DisplayRole: + i = self.instructions[row] + return self.txts[col](i) + + def headerData(self, section, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + return self.headers[section] + + def setInstructions(self, ins): + self.instructions = ins + self.modelReset.emit() + + +class Disassembly(QTableView): + def __init__(self): + super().__init__() + self.dm = DisAsmModel() + self.setModel(self.dm) + + def showPos(self, p): + for i in self.dm.instructions: + if i.address == p: + row = self.dm.instructions.index(i) + self.selectRow(row) + diff -r e89cca5779b0 -r 917eab04b8b7 python/ide/ide.py --- a/python/ide/ide.py Thu Nov 28 20:39:56 2013 +0100 +++ b/python/ide/ide.py Thu Nov 28 21:10:32 2013 +0100 @@ -18,11 +18,12 @@ from astviewer import AstViewer from codeedit import CodeEdit from logview import LogView as BuildOutput -#from disasm import Disassembly +from disasm import Disassembly stutil = __import__('st-util') import c3 import zcc import outstream +from target import armtarget def handle_exception(tp, v, tb): @@ -79,7 +80,7 @@ l = QVBoxLayout(self) txt = QTextEdit(self) txt.setReadOnly(True) - with open(os.path.join('..', 'readme.rst'), 'r') as f: + with open(os.path.join('..', '..', 'readme.rst'), 'r') as f: aboutText = f.read() txt.append(aboutText) l.addWidget(txt) @@ -275,34 +276,8 @@ # Build recepy: def parseFile(self): self.logger.info('Parsing!') - ce = self.activeMdiChild() - if not ce: - return - self.diag.clear() - pkg = self.c3front.parse(ce.Source) - # Set errors: - self.builderrors.setErrorList(self.diag.diags) - ce.setErrors(self.diag.diags) - self.astViewer.setAst(pkg) - if pkg: - c3.AstPrinter().printAst(pkg) - self.logger.info('Done!') - - def buildFile(self): - ce = self.activeMdiChild() - if not ce: - return - fn = ce.FileName - self.diag.clear() - outs = outstream.TextOutputStream() - if not zcc.zcc([io.StringIO(ce.Source)], [], outs, self.diag): - # Set errors: - self.builderrors.setErrorList(self.diag.diags) - ce.setErrors(self.diag.diags) - return - - def buildFileAndFlash(self): + def doBuild(self): ce = self.activeMdiChild() if not ce: return @@ -310,13 +285,21 @@ self.diag.clear() outs = outstream.TextOutputStream() imps = [open(ce.FileName, 'r') for ce in self.allChildren() if ce.FileName and ce.FileName != fn] - if not zcc.zcc([open(fn, 'r')], imps, outs, self.diag): + if not zcc.zcc([open(fn, 'r')], imps, armtarget, outs, self.diag): # Set errors: self.builderrors.setErrorList(self.diag.diags) ce.setErrors(self.diag.diags) return + return outs - outs.dump() + def buildFile(self): + self.doBuild() + + def buildFileAndFlash(self): + outs = self.doBuild() + if not outs: + return + code_s = outs.getSection('code') self.disasm.dm.setInstructions(code_s.instructions) self.debugInfo = code_s.debugInfos() diff -r e89cca5779b0 -r 917eab04b8b7 python/ppci/errors.py --- a/python/ppci/errors.py Thu Nov 28 20:39:56 2013 +0100 +++ b/python/ppci/errors.py Thu Nov 28 21:10:32 2013 +0100 @@ -45,23 +45,21 @@ def printErrors(self): if len(self.diags) > 0: - print('==============') print('{0} Errors'.format(len(self.diags))) for d in self.diags: - print('==============') self.printError(d) - print('==============') def printError(self, e): def printLine(row, txt): print(str(row)+':'+txt) - print(type(e), e, e.msg) + print('==============') if not e.loc: print('Error: {0}'.format(e)) else: if e.loc.filename not in self.sources: print('Error: {0}'.format(e)) return + print("File: {}".format(e.loc.filename)) source = self.sources[e.loc.filename] lines = source.split('\n') ro, co = e.row, e.col @@ -81,3 +79,4 @@ # print trailing source line: for r in range(ro+1, afterrow+1): printLine(r, lines[r-1]) + print('==============') diff -r e89cca5779b0 -r 917eab04b8b7 test/testc3.py --- a/test/testc3.py Thu Nov 28 20:39:56 2013 +0100 +++ b/test/testc3.py Thu Nov 28 21:10:32 2013 +0100 @@ -309,6 +309,7 @@ """ self.expectOK(snippet) + @unittest.skip('Too strange to handle') def testStructCall(self): snippet = """ module teststruct1;