In a strict ANSI C compliant compiler, signal handling is implemented in Assembly.
A systems programming language is one one can be used to write a full OS stack, regardless how heap management is done and how much Assembly help is needed.
Off the top of my head, Time and SIMD are the only two first-party efforts that are missing from there.
Things which will, at this rate, probably never be added -- either because there isn't a "standard" solution to these problems or because it doesn't seem worth it:
* async io
* web framework/http
* numerical hierarchies and bignums
* linear algebra / stats
* GUIs
* "human" time / calendars
Bignums in general are a bit too open-ended, but I could see bigints at least being added someday.
And as for async io, I think it's the same story as with HTTP: imaginably included contingent on implementation maturity and user demand.
I apologize for how glib my remark above was, it didn't add much to the conversation, and was more a knee jerk response to the notion that "Systems Language" is now, or ever has been, well defined.
I brought up the handling of signals, because process management is, in practice, a pretty big deal in what I would consider systems programming. But I don't think it's important to all systems programming. Much like I don't think avoiding garbage collection is necessary for all systems programming, though it's clearly an issue for some applications.
What I do find odd is the notion that it is necessary to not have garbage collection, but not having a solid story behind handling signals from the OS receives a pass.
Rust can handle signals, but its implementation is very platform specific (even the currently recommended crate lacks Windows support), and ultimately calls out the FFI. So it seems that saying Rust has support for signals is like saying Go supports manual memory management because you can call C.malloc and C.free...