It's hard to grade fortify support since it can only work for statically sized buffers and avoids checks in cases where the compiler can see it never overflows.
Some implementations primarily (or only) use inline checks and won't be detected. Some also cover more libc functions.
There's also SafeStack but the LLVM implementation is a bit half-baked and there isn't production integration into the runtime for Linux. Android ended up using ShadowCallStack instead due to SafeStack limitations / issues. Could still detect it being used though.
Also worth noting that stack canaries can still be used alongside either of those. ShadowCallStack just protects return addresses and SafeStack tries to put anything that cannot have overflows (no references to it) on a separate safe stack so unsafe stack can still have canaries.
Can probably detect ShadowCallStack and SafeStack via the presence of related symbols. Clang CFI could be detected via the CFI metadata. It has subsets that can be enabled (https://clang.llvm.org/docs/ControlFlowIntegrity.html#available-schemes…) and protects all indirect calls when fully enabled.