This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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
commit 56b4f94c123976e9de0e2b324f790a3ae3ec460f
Author: Sandra Loosemore <sandra@codesourcery.com>
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.  */
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]