A lot has happened since I kicked out Newlib. There were some minor bugs, but userspace & the window manager are running again.
To improve the performance of interrupt handling, there is now support for thread interruption. This will also be used for implementing signals. Like this, a driver can decide to register a routine as an IRQ handler, and each time the interrupt occurs, the driver's thread is interrupted and may do necessary work. This works fine for keyboard and mouse already. Next thing will be using this mechanism for signals.