Skip to content

SDL3 crashes when kernel.debug is used #205

Description

@walkero-gr

I was chasing a crash on a port I work on, and at the end it seems to come from SDL3 port when kernel.debug is used. I confirmed that with a simple "Hello world" example, which when compiled and as soon as it is executed, there is a crash with the following debug information in serial.

Kernel used 54.57.

[_impl_AddTask] Adding Task 0x613CC940, AsyncWB - textinput process (0x61FB7550)
[_impl_AddTask] Task = 0x613CC940, ETask = 0xEFCAD6B0, Context = 0xEFCA03E0
[_impl_AddTask] Stack bottom = 0x61D460A0, Stack top = 0x61D4A090, Stack pointer = 0x61D4A060
[_impl_AddTask] Task added to ready list
[_impl_AddTask] Adding Task 0x613CC7C0, CON/con-handler 53.82  (0x61FB7650)
[_impl_AddTask] Task = 0x613CC7C0, ETask = 0xEFCAD780, Context = 0xEFCA07C0
[_impl_AddTask] Stack bottom = 0x61D500A0, Stack top = 0x61D54090, Stack pointer = 0x61D54060
[_impl_AddTask] Task added to ready list
[_impl_AddTask] Adding Task 0x613CC640, Background CLI (0x6030C790)
[_impl_AddTask] Task = 0x613CC640, ETask = 0xEFCAD100, Context = 0xEFC657C0
[_impl_AddTask] Stack bottom = 0x6093E0A0, Stack top = 0x60942090, Stack pointer = 0x60942060
[_impl_AddTask] Task added to ready list
[_impl_RemTask] Removing 0x613CC940 (self) = AsyncWB - textinput process
[_impl_RemTask] Freeing tracked resources
[_impl_RemTask] Done freeing resources
[HAL_DfltTrapHandler] *** Warning: Fatal exception in task 0x613CC640 (Background CLI, etask = 0xEFCAD100)
[HAL_Alert] ALERT! 0x80000003
 54.57 (29.7.2023) Pegasos 2 debug
Machine model: 5 (Pegasos II)
Dump of context at 0xEFC657C0
Trap type: DSI exception
Machine State (raw): 0x02007030
Machine State (verbose): [User] [FPU on] [IAT on] [DAT on] 
Instruction pointer: in module kernel.debug+0x0003A444 (0x0183A444)
Crashed process: sdl3_hello (0x613CC640)
DSI verbose error description: Access not found in hash or BAT (page fault)
Access was a store operation
 0: 01851E90 60903B40 00000000 020D2E1C 61FAAC70 00000000 021E3B50 021E3B70
 8: CCCCCCCC CCCCCCCC CCCCCCCC 60903B20 42442488 609A64D8 608E5A60 00000001
16: 00000000 00000000 625EA760 00000000 00000002 00000003 00009000 613CC640
24: 00001000 FFFFFFFF 608E9F28 60903B88 01851E90 020B0000 020D2E1C 61FAAC70
CR: 42448484   XER: 00000000  CTR: 0183A3D0  LR: 01851E90
DSISR: 42000000  DAR: CCCCCCD0

FP0 : 0000000082004000 3FF0000000000000 3FF0000000000000 3FF0000000000000
FP4 : 3FF0000000000000 4061800000000000 4061800000000000 0000000000000000
FP8 : 0000000000000008 0000000000000008 00000000000001AE 3FF0000000000000
FP12: 43300000000000FF 4330000000000100 0000000000000000 0000000000000000
FP16: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
FP20: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
FP24: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
FP28: 3FF0000000000000 3FF0000000000000 3FF0000000000000 3FF0000000000000
FPSCR: 82004000

V0 : 00000000000000000000000000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
V2 : 01000100010001000100010001000100 FF787878FFB6B6B6FFC3C3C3FFB5B5B5
V4 : FF014CB4FF01B34DFF01C43CFF01C43C 00000000000000000000000000000000
V6 : FF017888FF01B64AFF01C33DFF01B54B 0C0D0E0F101112131415161718191A1B
V8 : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
V10: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 01010101010101010101010101010101
V12: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
V14: 78887888B64AB64AC33DC33DB54BB54B FFA8C7F0FFA8C7F0FFC3C3C3FF6C6C6C
V16: A758EF10A758EF10C23DC23D6B946B94 FF787878FFB6B6B6FFC3C3C3FFB5B5B5
V18: 01000100010001000100010001000100 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
V20: 00000000000000000000000000000000 00000000000000000000000000000000
V22: 00000000000000000000000000000000 00000000000000000000000000000000
V24: 00000000000000000000000000000000 00000000000000000000000000000000
V26: 00000000000000000000000000000000 00000000000000000000000000000000
V28: 00000000000000000000000000000000 00000000000000000000000000000000
V30: 00000000000000000000000000000000 00000000000000000000000000000000
VSCR: 00000000 VRSAVE: 00000000

Kernel command line: serial debuglevel=5

Registers pointing to code:
r0 : native kernel module kernel.debug+0x00051e90
r3 : native kernel module kernel.debug+0x008d2e1c
r6 : native kernel module kernel.debug+0x009e3b50
r7 : native kernel module kernel.debug+0x009e3b70
r15: module sdl3_hello at 0x00000001 (section 0 @ 0xFFFFFFDC)
r28: native kernel module kernel.debug+0x00051e90
r29: native kernel module kernel.debug+0x008b0000
r30: native kernel module kernel.debug+0x008d2e1c
ip : native kernel module kernel.debug+0x0003a444
lr : native kernel module kernel.debug+0x00051e90
ctr: native kernel module kernel.debug+0x0003a3d0

Stack trace:
(0x60903B40) native kernel module kernel.debug+0x0003a444
(0x60903B60) native kernel module kernel.debug+0x00051e90
(0x60903B80) [src/thread/amigaos4/SDL_syssem.c:175] sdl3_hello:SDL_WaitSemaphoreTimeoutNS()+0x240 (section 1 @ 0x7BD44)
(0x60903BD0) [src/thread/generic/SDL_syscond.c:126] sdl3_hello:SDL_BroadcastCondition()+0x24 (section 1 @ 0x7CB64)
(0x60903BF0) [src/thread/generic/SDL_sysrwlock.c:193] sdl3_hello:SDL_UnlockRWLock()+0x4c (section 1 @ 0x7D114)
(0x60903C10) [src/SDL_hashtable.c:363] sdl3_hello:SDL_FindInHashTable()+0x128 (section 1 @ 0xB17B0)
(0x60903C50) [src/SDL_utils.c:208] sdl3_hello:SDL_FindObject()+0x3c (section 1 @ 0x7C78)
(0x60903C70) [src/render/SDL_render.c:3398] sdl3_hello:SDL_SetRenderDrawColorFloat()+0xac (section 1 @ 0x558A4)
(0x60903CA0) sdl3_hello:main()+0xe4 (section 1 @ 0x300)
(0x60903D40) native kernel module newlib.library.kmod+0x00002614
(0x60903D90) native kernel module newlib.library.kmod+0x00003340
(0x60903F40) native kernel module newlib.library.kmod+0x00003864
(0x60903F70) sdl3_hello:_start()+0x1e0 (section 1 @ 0xA40)
(0x60903FC0) native kernel module kernel.debug+0x00088da0
(0x60903FD0) native kernel module kernel.debug+0x00088e18

Disassembly of crash site:
 0183A434: 815F0000   lwz               r10,0(r31)
 0183A438: 3D20CCCC   lis               r9,-13108
 0183A43C: 811F0004   lwz               r8,4(r31)
 0183A440: 6129CCCC   ori               r9,r9,52428
>0183A444: 910A0004   stw               r8,4(r10)
 0183A448: 815F0004   lwz               r10,4(r31)
 0183A44C: 811F0000   lwz               r8,0(r31)
 0183A450: 910A0000   stw               r8,0(r10)
 0183A454: 913F0000   stw               r9,0(r31)
 0183A458: 913F0004   stw               r9,4(r31)
Stack pointer (0x60903B40) is inside bounds
Redzone is OK (4)

68k register dump
DATA: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
ADDR: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Page information:
Page not found

Ready Tasks
                                       SHARED (pri   5, sigrec 0x88000100, sigwait 0xC0000000, masked 0x80000000)
                    IDF0/FastFileSystem 53.2  (pri   5, sigrec 0x20000000, sigwait 0xA8000100, masked 0x20000000)
                    IDF1/FastFileSystem 53.2  (pri   5, sigrec 0x20000000, sigwait 0xA8000100, masked 0x20000000)
                                    Workbench (pri   1, sigrec 0x80000100, sigwait 0x80000000, masked 0x80000000)
                                RinghioServer (pri   0, sigrec 0x10000000, sigwait 0xD8001000, masked 0x10000000)
                                      AmiDock (pri   0, sigrec 0x00000100, sigwait 0x00000100, masked 0x00000100)
                               TCP/IP Control (pri   0, sigrec 0x40000000, sigwait 0xF8009080, masked 0x40000000)
                                    hub.usbfd (pri   0, sigrec 0x90000000, sigwait 0x30000000, masked 0x10000000)
                                    hub.usbfd (pri   0, sigrec 0x98000000, sigwait 0x30000000, masked 0x10000000)
                                ELF Collector (pri  -5, sigrec 0x00000100, sigwait 0x00000100, masked 0x00000100)
                        appdir envarc manager (pri -50, sigrec 0x00000100, sigwait 0x00000100, masked 0x00000100)
                                    idle.task (pri -128, sigrec 0x00000000, sigwait 0x00000000, masked 0x00000000)

Waiting Tasks
                                 input.device (pri  20, sigrec 0x00000000, sigwait 0x80000000, masked 0x00000000)
                  UHCI Controller Task Unit 1 (pri  15, sigrec 0x00000000, sigwait 0xBC001000, masked 0x00000000)
                                   page_sweep (pri  12, sigrec 0x00000000, sigwait 0x80000000, masked 0x00000000)
                  UHCI Controller Task Unit 0 (pri  15, sigrec 0x00000000, sigwait 0xBC001000, masked 0x00000000)
               peg2ide.device - chip 0 port 1 (pri  12, sigrec 0x00000000, sigwait 0xC0000000, masked 0x00000000)
                                    USB stack (pri  18, sigrec 0x00000000, sigwait 0xFC00D000, masked 0x00000000)
                              hidtablet.usbfd (pri  10, sigrec 0x00000100, sigwait 0x50000000, masked 0x00000000)
                   DH0/SmartFilesystem 1.290  (pri  10, sigrec 0x10000000, sigwait 0xE0000100, masked 0x00000000)
               peg2ide.device - chip 0 port 0 (pri  12, sigrec 0x20000000, sigwait 0xC0000000, masked 0x00000000)
                            dos_signal_server (pri  -5, sigrec 0x00000000, sigwait 0x0000F000, masked 0x00000000)
                     Workbench DosList Notify (pri   1, sigrec 0x00000100, sigwait 0x00003000, masked 0x00000000)
                                 Mounter Task (pri  -1, sigrec 0x00000000, sigwait 0xB0001000, masked 0x00000000)
                                  Mounter GUI (pri   0, sigrec 0x00000000, sigwait 0x80007000, masked 0x00000000)
                    Mounter Companion Process (pri  -1, sigrec 0x00000000, sigwait 0x80003000, masked 0x00000000)
            application.library messageserver (pri   0, sigrec 0x00000000, sigwait 0xC0000000, masked 0x00000000)
                           dos_filedir_notify (pri   4, sigrec 0x80000000, sigwait 0x40001000, masked 0x00000000)
                       CON/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                           TCP/IP Superserver (pri   0, sigrec 0x00000000, sigwait 0xD0000080, masked 0x00000000)
                      ICD1/CDFileSystem 53.8  (pri  10, sigrec 0x00000000, sigwait 0x00000100, masked 0x00000000)
                      ICD0/CDFileSystem 53.8  (pri  10, sigrec 0x00000000, sigwait 0x00000100, masked 0x00000000)
                       CD0/CDFileSystem 53.8  (pri  10, sigrec 0x00000000, sigwait 0x00000100, masked 0x00000000)
                 DH1.1/SmartFilesystem 1.290  (pri  10, sigrec 0x10000000, sigwait 0xE0000100, masked 0x00000000)
                   DH1/SmartFilesystem 1.290  (pri  10, sigrec 0x10000000, sigwait 0xE0000100, masked 0x00000000)
                  RANDOM/Random-Handler 52.1  (pri   5, sigrec 0x00000000, sigwait 0x00000100, masked 0x00000000)
              TEXTCLIP/textclip-handler 53.4  (pri   3, sigrec 0x00000100, sigwait 0x80000000, masked 0x00000000)
                    URL/launch-handler 53.39  (pri   5, sigrec 0x00000100, sigwait 0x80000000, masked 0x00000000)
                               ramlib.support (pri  -2, sigrec 0x00000000, sigwait 0x80005000, masked 0x00000000)
                                   ? IPrefs ? (pri   0, sigrec 0x20000000, sigwait 0x0000F000, masked 0x00000000)
                                 ContextMenus (pri   0, sigrec 0x00000000, sigwait 0xE0001000, masked 0x00000000)
                         TCP/IP Configuration (pri   0, sigrec 0x00000000, sigwait 0xF8003000, masked 0x00000000)
                             rtl8139.device.0 (pri   5, sigrec 0x00000100, sigwait 0x78008000, masked 0x00000000)
              ContextMenus Command Dispatcher (pri   1, sigrec 0x00000000, sigwait 0x80001000, masked 0x00000000)
                                      AsyncWB (pri   0, sigrec 0x00000100, sigwait 0xC0001000, masked 0x00000000)
                                       ramlib (pri   1, sigrec 0x00000000, sigwait 0x80001000, masked 0x00000000)
                                     DefIcons (pri   0, sigrec 0x00000100, sigwait 0x80009000, masked 0x00000000)
                                    NoMenuKey (pri   0, sigrec 0x00000100, sigwait 0x00001000, masked 0x00000000)
                                 ClickToFront (pri  21, sigrec 0x00000100, sigwait 0xE000D000, masked 0x00000000)
                       CON/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                                     RAWBInfo (pri   0, sigrec 0x00000100, sigwait 0x80001000, masked 0x00000000)
                       CON/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                       CON/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                       CON/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                         string.gadget server (pri   1, sigrec 0x00000100, sigwait 0x40000000, masked 0x00000000)
                   Workbench Clipboard Server (pri   1, sigrec 0x00000100, sigwait 0x80000000, masked 0x00000000)
                                   RexxMaster (pri   4, sigrec 0x00000100, sigwait 0xC0000000, masked 0x00000000)
                                   TCP/IP Log (pri   0, sigrec 0x00000000, sigwait 0x80003000, masked 0x00000000)
                                      ConClip (pri   0, sigrec 0x00000000, sigwait 0x80000000, masked 0x00000000)
                      diskimage.device unit 1 (pri   4, sigrec 0x00000100, sigwait 0xC0000000, masked 0x00000000)
                      diskimage.device unit 0 (pri   4, sigrec 0x00000100, sigwait 0xC0000000, masked 0x00000000)
                      diskimage.device unit 5 (pri   4, sigrec 0x00000100, sigwait 0xC0000000, masked 0x00000000)
                      diskimage.device unit 4 (pri   4, sigrec 0x00000100, sigwait 0xC0000000, masked 0x00000000)
                       AUDIO/AHI-Handler 6.2  (pri   5, sigrec 0x00000000, sigwait 0x00000100, masked 0x00000000)
                 APPDIR/appdir-handler 54.17  (pri   5, sigrec 0x00000100, sigwait 0x80000000, masked 0x00000000)
                            USB stack Process (pri   0, sigrec 0x00000000, sigwait 0x80001000, masked 0x00000000)
                         MassStorage Notifier (pri   0, sigrec 0x00000000, sigwait 0x80001000, masked 0x00000000)
                            datatypes.library (pri   0, sigrec 0x00000000, sigwait 0x80001000, masked 0x00000000)
                                  DST watcher (pri   0, sigrec 0x00000000, sigwait 0xC0000000, masked 0x00000000)
                       RAM/ram-handler 54.24  (pri  10, sigrec 0x00000100, sigwait 0x80000000, masked 0x00000000)
                       ENV/env-handler 54.18  (pri   5, sigrec 0x00000100, sigwait 0x80000000, masked 0x00000000)
                                        pager (pri   9, sigrec 0x00000000, sigwait 0x80001000, masked 0x00000000)
                       CON/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                       RAW/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                       CON/con-handler 53.82  (pri   5, sigrec 0x00000000, sigwait 0xA0000100, masked 0x00000000)
                          SFS DosList handler (pri  19, sigrec 0x00000000, sigwait 0x80000000, masked 0x00000000)
                             dos_nbmd_process (pri   5, sigrec 0x00000000, sigwait 0x00001100, masked 0x00000000)
                             dos_lock_handler (pri   5, sigrec 0x00000000, sigwait 0x00001100, masked 0x00000000)
                     Exec Command and Control (pri  30, sigrec 0x00000000, sigwait 0x80000000, masked 0x00000000)

Suspended Tasks


[_impl_AddTask] Adding Task 0x611D8500, Background CLI (0x61FB7550)
[_impl_AddTask] Task = 0x611D8500, ETask = 0xEFCAD6B0, Context = 0xEFCA03E0
[_impl_AddTask] Stack bottom = 0x609430A0, Stack top = 0x60947090, Stack pointer = 0x60947060
[_impl_AddTask] Task added to ready list

The example code is the following

#include <SDL3/SDL.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    SDL_Window *window = NULL;
    SDL_Renderer *renderer = NULL;
    SDL_Event event;
    int running = 1;

    // Initialize SDL
    if (!SDL_Init(SDL_INIT_VIDEO)) {
        fprintf(stderr, "Failed to initialize SDL: %s\n", SDL_GetError());
        return 1;
    }

    // Create window
    window = SDL_CreateWindow("SDL3 Hello World", 800, 600, SDL_WINDOW_RESIZABLE);
    if (!window) {
        fprintf(stderr, "Failed to create window: %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    // Create renderer
    renderer = SDL_CreateRenderer(window, NULL);
    if (!renderer) {
        fprintf(stderr, "Failed to create renderer: %s\n", SDL_GetError());
        SDL_DestroyWindow(window);
        SDL_Quit();
        return 1;
    }

    // Main loop
    while (running) {
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
                case SDL_EVENT_QUIT:
                    running = 0;
                    break;
                case SDL_EVENT_KEY_DOWN:
                    if (event.key.key == SDLK_ESCAPE) {
                        running = 0;
                    }
                    break;
                default:
                    break;
            }
        }

        // Clear screen with white
        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
        SDL_RenderClear(renderer);

        // Render "Hello World" text using debug text
        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
        SDL_RenderDebugText(renderer, 350.0f, 280.0f, "Hello World");

        // Present
        SDL_RenderPresent(renderer);

        // Small delay to avoid consuming CPU
        SDL_Delay(16);
    }

    // Cleanup
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingsdl3

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions