id,summary,reporter,owner,description,type,status,priority,component,version,resolution,keywords,cc,game 11972,TINSEL: immediate SIGBUS on strict-alignment architectures,dwatteau,lephilousophe,"This is on OpenBSD/loongson 6.8, a MIPS64, little-endian system with strict-alignment constraints. This is the same setup I used in #6220. sizeof(void *) == 8. When unaligned access are done, OpenBSD doesn't intercept them, so it usually gives a hard SIGBUS. {{{SCUMM_NEED_ALIGNMENT}}} is defined. This is with the {{{dw-dos-cd-demo-en.zip}}} file from the Demos page, with ScummVM 2.2.1pre1. The game immediately crashes at startup, before anything is ever displayed. {{{ Thread 1 received signal SIGBUS, Bus error. Tinsel::FadeProcess (coroParam=@0x13990adf10: 0x13990b2800, param=0x13990adf3c) at engines/tinsel/faders.cpp:109 109 _ctx->pPalette = (PALETTE *)LockMem(pFade->pPalQ->hPal); (gdb) bt full #0 Tinsel::FadeProcess (coroParam=@0x13990adf10: 0x13990b2800, param=0x13990adf3c) at engines/tinsel/faders.cpp:109 _ctx = 0x13990b2800 tmpHolder = {_ctx = @0x13990adf10} #1 0x0000000f8982288c in Common::CoroutineScheduler::schedule (this=0x144c12f900) at common/coroutines.cpp:232 pProc = 0x13990adf00 pNext = i = #2 0x00000013eeba1060 in Tinsel::TinselEngine::NextGameCycle (this=0x13ea7b8200) at engines/tinsel/tinsel.cpp:1032 No locals. #3 0x00000013eeba09bc in Tinsel::TinselEngine::run (this=0x13ea7b8200) at engines/tinsel/tinsel.cpp:977 timerVal = 153809 #4 0x0000000f8946e954 in runGame (plugin=, system=..., edebuglevels=...) at base/main.cpp:292 dir = { = {_vptr$ArchiveMember = 0xf89b31bd0 }, _realNode = {, Common::impl::no_base > >> = { >> = {}, }, _refCount = 0x13f580c840, _deletion = 0x13f580d4c0, _pointer = 0x1433eb6f80}} target = {static npos = 4294967295, static _builtinCapacity = 20, _size = 10, _str = 0xfffffc8af8 ""dw-demo-cd"", {_storage = ""dw-demo-cd\000\000\000\000\000\000\000\000\000"", _extern = {_refCount = 0x2d6f6d65642d7764, _capacity = 25699}}} err = {_code = Common::kNoError, _desc = {static npos = 4294967295, static _builtinCapacity = 20, _size = 8, _str = 0xfffffc8ad0 ""No error"", { _storage = ""No error\000\000\000\000\000\000\000\000\070\214\374\377"", _extern = { _refCount = 0x726f727265206f4e, _capacity = 0}}}} caption = {static npos = 4294967295, static _builtinCapacity = 20, _size = 31, _str = 0x144f8d5ae0 ""Discworld (CD Demo/DOS/English)"", { _storage = ""\200oRb\024\000\000\000 \000\000\000\377\000\000\000\227\315"", , _extern = {_refCount = 0x1462526f80, _capacity = 32}}} tokenizer = {_str = {static npos = 4294967295, static _builtinCapacity = 20, _size = 0, _str = 0xfffffc8a18 """", { _storage = ""\000!z\t\000\000\000\000\nO[10\000\000\000\240"", , _extern = {_refCount = 0x97a2100, _capacity = 828067594}}}, _delimiters = {static npos = 4294967295, static _builtinCapacity = 20, _size = 2, _str = 0xfffffc8a40 "" ,"", { _storage = "" ,\000mmvm\000\212\370\226\211\017\000\000\000\005\v\000"", _extern = { _refCount = 0x6d766d6d002c20, _capacity = 2308372618}}}, _tokenBegin = 0, _tokenEnd = 0} previousLanguage = {static npos = 4294967295, static _builtinCapacity = 20, _size = 1, _str = 0xfffffc8a70 ""C"", {_storage = ""C\000\233\241\023"", '\000' , ""`\243\233\241"", _extern = {_refCount = 0x13a19b0043, _capacity = 0}}} gameKeymaps = {_capacity = 1, _size = 1, _storage = 0x13996bfbc0} result = {_code = 21, _desc = {static npos = 4294967295, static _builtinCapacity = 20, _size = 1649075712, _str = 0x0, {_storage = "" \000\000\000\017\000\000\000\005\v\000\000\000\000\000\000 s\263\211"", _extern = {_refCount = 0xf00000020, _capacity = 2821}}}} engine = 0x9f5cf63571a28a60 metaEngine = keymapper = 0x13ff5b4f00 #5 scummvm_main (argc=, argv=) at base/main.cpp:561 result = {_code = 3562524055, _desc = {static npos = 4294967295, static _builtinCapacity = 20, _size = 2573983264, _str = 0x13a19b9d70 <__isthreaded> ""\001"", { _storage = ""#\000\000\000\000\000\000\000\227\315W\324\361\353\246M\300\322"", , _extern = {_refCount = 0x23, _capacity = 3562524055}}}} chainedGame = {static npos = 4294967295, static _builtinCapacity = 20, _size = 0, _str = 0xfffffc8a18 """", { _storage = ""\000!z\t\000\000\000\000\nO[10\000\000\000\240"", , _extern = { _refCount = 0x97a2100, _capacity = 828067594}}} saveSlot = plugin = specialDebug = {static npos = 4294967295, static _builtinCapacity = 20, _size = 0, _str = 0xfffffc8948 """", { _storage = ""\000!z\t\000\000\000\000\nO[10\000\000\000\240"", , _extern = { _refCount = 0x97a2100, _capacity = 828067594}}} command = {static npos = 4294967295, static _builtinCapacity = 20, _size = 10, _str = 0xfffffc8920 ""dw-demo-cd"", {_storage = ""dw-demo-cd\000\235\023\000\000\000\000$\302\234"", _extern = {_refCount = 0x2d6f6d65642d7764, _capacity = 2634048611}}} settings = {_nodePool = {> = { = {_chunkSize = 80, _pages = {_capacity = 0, _size = 0, _storage = 0x0}, _next = 0xfffffc85b0, _chunksPerPage = 8}, _storage = ""\000\206\374\377\377\000\000\000X\021\233\241\023\000\000\000`P\215O\024\000\000\000؄\353\334\023"", '\000' , ""\020\231j\027\024\000\000\000`\243\233\241\023\000\000\000\204\016\225\241\023\000\000\000\\\016\225\241\023\000\000\000P\206\374\377\377\000\000\000P'\272\036\024\000\000\000\240\024\313\311\023\000\000\000\227\315W\324\361\353\246M@\324Jb\024\000\000\000p\235\233\241\023\000\000\000#\000\000\000\000\000\000\000X\021\233\241\023\000\000\000`P\215O\024\000\000\000؄\353\334\023\000\000\000\240\206\374\377\377\000\000\000\210\207\374\377\377\000\000\000`\243\233\241\023\000\000\000\020\207\374\377\377\000\000\000`\243\233\241\023\000\000\000\214\034""...}, }, _defaultVal = {static npos = 4294967295, static _builtinCapacity = 20, _size = 0, _str = 0xfffffc88e0 """", {_storage = ""\000s^O\024\000\000\000\274E[O\024\000\000\000\000\000\000"", _extern = {_refCount = 0x144f5e7300, _capacity = 1331381692}}}, _storage = 0x13ae182900, _mask = 15, _size = 0, _deleted = 0, _hash = {}, _equal = {}} res = {_code = Common::kNoError, _desc = {static npos = 4294967295, static _builtinCapacity = 20, _size = 8, _str = 0xfffffc8570 ""No error"", {_storage = ""No error\000rror\000\000\000\b\206\374\377"", _extern = {_refCount = 0x726f727265206f4e, _capacity = 1869771264}}}} system = #6 0x0000000f89468dc8 in main (argc=-361004544, argv=0x9f5cf63571a28a60) at backends/platform/sdl/posix/posix-main.cpp:45 res = (gdb) where #0 Tinsel::FadeProcess (coroParam=@0x13990adf10: 0x13990b2800, param=0x13990adf3c) at engines/tinsel/faders.cpp:109 #1 0x0000000f8982288c in Common::CoroutineScheduler::schedule (this=0x144c12f900) at common/coroutines.cpp:232 #2 0x00000013eeba1060 in Tinsel::TinselEngine::NextGameCycle (this=0x13ea7b8200) at engines/tinsel/tinsel.cpp:1032 #3 0x00000013eeba09bc in Tinsel::TinselEngine::run (this=0x13ea7b8200) at engines/tinsel/tinsel.cpp:977 #4 0x0000000f8946e954 in runGame (plugin=, system=..., edebuglevels=...) at base/main.cpp:292 #5 scummvm_main (argc=, argv=) at base/main.cpp:561 #6 0x0000000f89468dc8 in main (argc=-361004544, argv=0x9f5cf63571a28a60) at backends/platform/sdl/posix/posix-main.cpp:45 (gdb) list 104 if (TinselV2) 105 // Note that this palette is being faded 106 FadingPalette(pFade->pPalQ, true); 107 108 // get pointer to palette - reduce pointer indirection a bit 109 _ctx->pPalette = (PALETTE *)LockMem(pFade->pPalQ->hPal); 110 111 for (_ctx->pColMult = pFade->pColorMultTable; *_ctx->pColMult >= 0; _ctx->pColMult++) { 112 // go through all multipliers in table - until a negative entry 113 }}} ",defect,closed,normal,Engine: Tinsel,,fixed,"alignment,strict-alignment,sigbus",,Discworld