[PATCH v2 0/4] Add tests for Guarded Control Stack

Yury Khrustalev yury.khrustalev@arm.com
Fri Jan 24 12:28:54 GMT 2025


This patch adds AArch64 specific tests related to Guarded Control Stack [1].

There is no urgency to include this into the 2.41 release of Glibc.

There might be better ways of arranging these tests in terms of using
the test framework of the library. Any feedback is appreciated.

These tests are supposed to be built for AArch64 target and will run on
systems with and without GCS support. In the latter case they would be
reported as UNSUPPORTED.

The tests use "-z gcs=<value>" linker flag that may not be supported by
older binutils. In this case it is expected that the tests will run on
a system that does not support GCS. Linker will show a warning about
unused command line flag.

If tests are intended to be run on a system that supports GCS, then it
is expected that they are built with a toolchain that supports GCS.

When runtime target supports GCS, tests are run with all supported
values of the GCS tunable to check its effects.

Regression tested on aarch64 and no regressions have been found.

OK for trunk?

[1] https://developer.arm.com/documentation/ddi0487/ka/ (chapter D11)

Changes since v1:
 - Fixed test compilation error due to undefine macro GCS_MAGIC.

Link to v1: https://inbox.sourceware.org/libc-alpha/20250123141401.3257507-1-yury.khrustalev@arm.com/

---

Yury Khrustalev (4):
  aarch64: Add tests for Guarded Control Stack
  aarch64: Add GCS tests for transitive dependencies
  aarch64: Add GCS tests for dlopen
  aarch64: Add GCS test with signal handler

 Makeconfig                                    |   2 +-
 sysdeps/unix/sysv/linux/aarch64/Makefile      | 121 ++++++++++++++++++
 .../unix/sysv/linux/aarch64/tst-gcs-abort.sh  |  40 ++++++
 .../linux/aarch64/tst-gcs-disabled-static.c   |   1 +
 .../sysv/linux/aarch64/tst-gcs-disabled.c     |   2 +
 .../linux/aarch64/tst-gcs-dlopen-disabled.c   |   3 +
 .../linux/aarch64/tst-gcs-dlopen-enforced.c   |   3 +
 .../aarch64/tst-gcs-dlopen-optional-off.c     |   3 +
 .../aarch64/tst-gcs-dlopen-optional-on.c      |   3 +
 .../linux/aarch64/tst-gcs-dlopen-override.c   |   3 +
 .../unix/sysv/linux/aarch64/tst-gcs-dlopen.c  |  62 +++++++++
 .../linux/aarch64/tst-gcs-enforced-abort.c    |   2 +
 .../aarch64/tst-gcs-enforced-static-abort.c   |   1 +
 .../linux/aarch64/tst-gcs-enforced-static.c   |   1 +
 .../sysv/linux/aarch64/tst-gcs-enforced.c     |   2 +
 .../unix/sysv/linux/aarch64/tst-gcs-helper.h  |  39 ++++++
 .../unix/sysv/linux/aarch64/tst-gcs-mod1.c    |  27 ++++
 .../unix/sysv/linux/aarch64/tst-gcs-mod2.c    |  25 ++++
 .../unix/sysv/linux/aarch64/tst-gcs-mod3.c    |  25 ++++
 .../sysv/linux/aarch64/tst-gcs-noreturn.c     | 100 +++++++++++++++
 .../sysv/linux/aarch64/tst-gcs-optional-off.c |   2 +
 .../sysv/linux/aarch64/tst-gcs-optional-on.c  |   2 +
 .../aarch64/tst-gcs-optional-static-off.c     |   1 +
 .../aarch64/tst-gcs-optional-static-on.c      |   1 +
 .../linux/aarch64/tst-gcs-override-static.c   |   1 +
 .../sysv/linux/aarch64/tst-gcs-override.c     |   2 +
 .../linux/aarch64/tst-gcs-shared-disabled.c   |   2 +
 .../aarch64/tst-gcs-shared-enforced-abort.c   |   2 +
 .../linux/aarch64/tst-gcs-shared-optional.c   |   2 +
 .../linux/aarch64/tst-gcs-shared-override.c   |   2 +
 .../unix/sysv/linux/aarch64/tst-gcs-shared.c  |  41 ++++++
 .../sysv/linux/aarch64/tst-gcs-skeleton.c     |  43 +++++++
 32 files changed, 565 insertions(+), 1 deletion(-)
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-abort.sh
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-disabled-static.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-disabled.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-dlopen-disabled.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-dlopen-enforced.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-dlopen-optional-off.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-dlopen-optional-on.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-dlopen-override.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-dlopen.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-enforced-abort.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-enforced-static-abort.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-enforced-static.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-enforced.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-helper.h
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-mod1.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-mod2.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-mod3.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-noreturn.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-optional-off.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-optional-on.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-optional-static-off.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-optional-static-on.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-override-static.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-override.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-shared-disabled.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-shared-enforced-abort.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-shared-optional.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-shared-override.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-shared.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/tst-gcs-skeleton.c

-- 
2.39.5



More information about the Libc-alpha mailing list