Moving USB mouse during booting was causing a crash in intuition. Input
events were pumped before screen was opened. Same thing could happen during
resolution change. Other places in input handler already check if screen
is actually available.
Generic Gfx_Show implementation clears the "unused" framebuffer when
switching to lower resolution. However in reality it's still the same
memory simply with different stride, so drawing "beyond" the visible
dimensions simply draws on visible framebufffer but with translated
coordinates.
QEMU report support hardware cursor, but that support is broken (capturing
cursor stops drawing it and when in absolute mode (table) cursor position
(which is a native X/Wayland cursor in such case) does not match position
reported to AROS). Use software cursor via fakegfxhidd in case of QEMU and
hardware cursor for VMWare and VirtualBox.
Minimal implementation based on QEMU expectations. Still disabled because
even though QEMU reports hardware cursor support, that support does not
work correctly with either gtk or sdl UIs
Note: code for setting up andMask is missing. For now it is zeroed
resulting in black background under cursor.
Otherwise the node becomes invalid but is still kept in the handlers list
and next time something accesses this list, it stumbles on random memory.
Implementation copied from VIA-AC97 driver.
Always use string retrieved by GetConfigString because it guarantees
that the string is persistand. Using string passed in msg->string might
will end up with ZunePrefsNew field pointing to a different memory then
the matching option in dataspace (which makes a copy) and if the called
releases the string, ZunePrefsNew will be pointing to unallocated memory.
Visible as random "font names" for MUIV_Font_Title when openings
applications
With recent change to muimaster it now opened one more message port per
application. Wanderer was implemented to created three applications:
main, copy and requster. After muimaster changes is not enough free
signals to open third application. The workaround in this commit uses
one of the existing two applications to show the requester and removes
the need for third "requester" application.
Previous code was rejecting loaded data for strings. Visible in:
a) group frame font different than configured
b) string background color different than configured
Introduced new APIs for kernel-level symbol resolution and stack tracing:
- KrnRegisterSymResolver() / KrnUnregisterSymResolver(): manage a global
callback for translating instruction addresses into symbols.
- KrnBacktraceFromRBP(): walk the call stack using frame pointers.
- KrnPrintBacktrace(): print a formatted backtrace using the resolver.
These functions enable debug.library to provide symbolic crash and
exception backtraces in kernel and supervisor mode.
The kick() function was reusing the same variables (v1-v4) for multiple
CPUID calls, which caused the compiler to optimize incorrectly and check
the EDX register from CPUID leaf 0x80000000 instead of 0x80000001 when
testing for Long Mode support (bit 29).
This manifested as a spurious "processor is not x86-64 compatible" error
on Ryzen CPUs, even though the CPUs fully support x86-64. The issue was
visible in the disassembly where the code loaded from the wrong stack
location (-0xc0 instead of -0xa8) when checking the LM bit.
# Use separate variable sets (eax0/ebx0/ecx0/edx0 and eax1/ebx1/ecx1/edx1)
for each CPUID call to prevent register value confusion
# Add block scope for EFER MSR variables to avoid conflicts
# Remove redundant third CPUID call in failure path since we already have
the values from the second call
# Improve cpuid2() implementation with explicit register preservation and
memory clobbers to prevent similar optimization issues
The cpuid2() changes add proper register constraints and use local variables
before dereferencing pointers, ensuring the compiler generates correct code
regardless of optimization level or target CPU.
Fixes boot on AMD Ryzen and potentially other CPUs where this compiler
optimization pattern occurred