From ba8feaed74fe911ceef2aced9d7209ea8f802bf9 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Sat, 19 Mar 2022 14:48:32 -0700 Subject: [PATCH] fix missing vector table on ARM (#34) --- src/core/microzig.zig | 25 ++++++++++++------------- src/modules/cpus/cortex-m/cortex-m.zig | 2 +- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/core/microzig.zig b/src/core/microzig.zig index 67293df..5302885 100644 --- a/src/core/microzig.zig +++ b/src/core/microzig.zig @@ -98,21 +98,20 @@ comptime { // that is either called (Cortex-M) or executed (AVR) when initalized. // Allow board and chip to override CPU vector table. - const vector_table = if (board != void and @hasDecl(board, "vector_table")) - board.vector_table + const export_opts = .{ + .name = "vector_table", + .section = "microzig_flash_start", + .linkage = .Strong, + }; + + if ((board != void and @hasDecl(board, "vector_table"))) + @export(board.vector_table, export_opts) else if (@hasDecl(chip, "vector_table")) - chip.vector_table + @export(chip.vector_table, export_opts) else if (@hasDecl(cpu, "vector_table")) - cpu.vector_table - else - null; - if (@TypeOf(vector_table) != @TypeOf(null)) { // ugh, comptime shenanigans - @export(vector_table, .{ - .name = "vector_table", - .section = "microzig_flash_start", - .linkage = .Strong, - }); - } + @export(cpu.vector_table, export_opts) + else if (@hasDecl(app, "interrupts")) + @compileError("interrupts not configured"); } /// This is the logical entry point for microzig. diff --git a/src/modules/cpus/cortex-m/cortex-m.zig b/src/modules/cpus/cortex-m/cortex-m.zig index 33b90da..bd1ecda 100644 --- a/src/modules/cpus/cortex-m/cortex-m.zig +++ b/src/modules/cpus/cortex-m/cortex-m.zig @@ -85,7 +85,7 @@ fn isValidField(field_name: []const u8) bool { const VectorTable = microzig.chip.VectorTable; // will be imported by microzig.zig to allow system startup. -pub const vector_table: VectorTable = blk: { +pub var vector_table: VectorTable = blk: { var tmp: microzig.chip.VectorTable = .{ .initial_stack_pointer = microzig.config.end_of_stack, .Reset = .{ .C = microzig.cpu.startup_logic._start },