[patch] Add a dummy interrupt handler to nios2 crt0.s

Sandra Loosemore <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
The attached patch addresses another request from the QEMU maintainers 
in my quest to get the nios2 bare-metal support patches committed there: 
  the corresponding libgloss BSP needs to provide an interrupt handler 
so the QEMU emulation can point at it.

http://lists.nongnu.org/archive/html/qemu-devel/2019-03/msg07063.html

I added a dummy routine and placed it immediately after the 32-byte 
reset vector.  This matches where the real hardware (a 3c120 board) 
we've also used for testing expects to find the interrupt handler.

The dummy handler busy-waits in a loop, which is not terribly useful by 
itself, but you could set a breakpoint on it in the debugger, at least.

OK?

-Sandra
nios2-crt0.patch (text/x-patch, 1.3 KB)
commit 56b4f94c123976e9de0e2b324f790a3ae3ec460f
Author: Sandra Loosemore <[email protected]>
Date:   Tue Apr 2 12:33:35 2019 -0700

    Add a dummy interrupt handler to nios2 crt0.s.
    
    The location of the handler at offset 0x20 from the start of memory,
    immediately after the 32-byte reset vector, matches the expectations
    of real hardware (e.g., a 3c120 board).

diff --git a/libgloss/nios2/crt0.S b/libgloss/nios2/crt0.S
index 77eacb3..c4dd4c6 100644
--- a/libgloss/nios2/crt0.S
+++ b/libgloss/nios2/crt0.S
@@ -1,6 +1,6 @@
 /* crt0.S -- startup code for Nios II QEMU generic-nommu board emulation.
 
-   Copyright (c) 2018 Mentor Graphics
+   Copyright (c) 2018-2019 Mentor Graphics
 
    The authors hereby grant permission to use, copy, modify, distribute,
    and license this software and its documentation for any purpose, provided
@@ -81,6 +81,18 @@ __reset:
 
 	.size __reset, . - __reset
 
+/* Provide a stub interrupt handler that waits in a busy loop.
+   The alignment puts it at offset 0x20 from the base of RAM.  */
+
+	.align 5
+
+        .globl  __interrupt_handler
+        .type   __interrupt_handler, @function
+__interrupt_handler:
+0:
+	br 0b
+
+	.size __interrupt_handler, . - __interrupt_handler
 
 /* __start is the ELF entry point.  */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.