Cross-layer resilience to tolerate hardware errors in digital systems