[v5,0/1] RFC: Add <sys/tagged-address.h>

Message ID 20210805131358.300475-1-hjl.tools@gmail.com
Headers
Series RFC: Add <sys/tagged-address.h> |

Message

H.J. Lu Aug. 5, 2021, 1:13 p.m. UTC
  We need an API for tagged address manipulation so that we can use it
within glibc to make glibc LAM compatible and enable LAM in memmove
tests as well as to enable LAM in GCC libsanitizer/hwasan.

If it is needed only for LAM, what is the best way to make it a public
glibc header? Should it be added to <sys/platform/x86.h>?

Changes in v5:

Add restrictions:

1. All bits between 0 and N - 1, where N is the number of tagged address
bits, are used in address translation.
2. All pointers participating in a pointer arithmetic operation should have
the same tag if they point to the same memory object so that pointer
equality operation can be performed on tagged pointers.

Changes in v4:

1. Document that the zero return value from get_tagged_address_bits
indicates that tag bits are not the highest bits in address.
2. Document that the zero value of TAGGED_ADDRESS_MASK indicates the
invalid address mask.
3. Add <bits/tagged-address-mask.h> to provide TAGGED_ADDRESS_MASK.
4. Add C++ support to TAGGED_ADDRESS_MASK.

Changes in v3:

1. set_tagged_address_mask can be only called once before main.
2. Add more tests.

---
By default, the number of the address bits used in address translation
is the number of address bits.  But it can be changed by ARM Top-byte
Ignore (TBI) or Intel Linear Address Masking (LAM).

<sys/tagged-address.h> provides an API for tagged address manipulation.

H.J. Lu (1):
  <sys/tagged-address.h>: An API for tagged address

 NEWS                                          |  2 +-
 bits/tagged-address-mask.h                    | 47 +++++++++++
 bits/tagged-address-valid-bits.h              | 28 +++++++
 csu/libc-start.c                              |  3 +
 elf/dl-support.c                              |  5 ++
 include/sys/tagged-address.h                  |  9 +++
 manual/Makefile                               |  3 +-
 manual/ctype.texi                             |  2 +-
 manual/memory.texi                            |  2 +-
 manual/tagged-address.texi                    | 80 +++++++++++++++++++
 misc/Makefile                                 | 35 ++++++--
 misc/Versions                                 |  7 ++
 misc/set-tagged-address-mask.c                | 41 ++++++++++
 misc/sys/tagged-address.h                     | 45 +++++++++++
 misc/tagged-address.c                         | 55 +++++++++++++
 misc/tst-tagged-address-1-static.c            |  1 +
 misc/tst-tagged-address-1.c                   | 53 ++++++++++++
 misc/tst-tagged-address-2-static.c            |  1 +
 misc/tst-tagged-address-2.c                   | 44 ++++++++++
 misc/tst-tagged-address-3-static.c            |  1 +
 misc/tst-tagged-address-3.c                   | 48 +++++++++++
 misc/tst-tagged-address-4-static.c            |  1 +
 misc/tst-tagged-address-4.c                   | 35 ++++++++
 misc/tst-tagged-address-5.c                   | 25 ++++++
 misc/tst-tagged-address-6.c                   | 34 ++++++++
 misc/tst-tagged-address-7.c                   | 40 ++++++++++
 misc/tst-tagged-address-mod-5.c               | 45 +++++++++++
 misc/tst-tagged-address-mod-6.c               | 34 ++++++++
 misc/tst-tagged-address-mod-7.c               | 34 ++++++++
 sysdeps/generic/inline-tagged-address.h       | 43 ++++++++++
 sysdeps/generic/ldsodefs.h                    |  4 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  5 ++
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  5 ++
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  5 ++
 34 files changed, 813 insertions(+), 9 deletions(-)
 create mode 100644 bits/tagged-address-mask.h
 create mode 100644 bits/tagged-address-valid-bits.h
 create mode 100644 include/sys/tagged-address.h
 create mode 100644 manual/tagged-address.texi
 create mode 100644 misc/set-tagged-address-mask.c
 create mode 100644 misc/sys/tagged-address.h
 create mode 100644 misc/tagged-address.c
 create mode 100644 misc/tst-tagged-address-1-static.c
 create mode 100644 misc/tst-tagged-address-1.c
 create mode 100644 misc/tst-tagged-address-2-static.c
 create mode 100644 misc/tst-tagged-address-2.c
 create mode 100644 misc/tst-tagged-address-3-static.c
 create mode 100644 misc/tst-tagged-address-3.c
 create mode 100644 misc/tst-tagged-address-4-static.c
 create mode 100644 misc/tst-tagged-address-4.c
 create mode 100644 misc/tst-tagged-address-5.c
 create mode 100644 misc/tst-tagged-address-6.c
 create mode 100644 misc/tst-tagged-address-7.c
 create mode 100644 misc/tst-tagged-address-mod-5.c
 create mode 100644 misc/tst-tagged-address-mod-6.c
 create mode 100644 misc/tst-tagged-address-mod-7.c
 create mode 100644 sysdeps/generic/inline-tagged-address.h