mbox

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

Message ID 20210924165338.2326917-1-hjl.tools@gmail.com
Headers

Message

H.J. Lu Sept. 24, 2021, 4:53 p.m. UTC
  Changes in v7:

1. Move set_translated_address_mask to libc_nonshared.a.

Changes in v6:

1. Update and simplify the API by only exporting:

/* Set the mask for address bits used in address translation.  Return 0
   on success.  Return -1 on error.  */
extern int set_translated_address_mask (uintptr_t __mask);

/* Non-zero if constant address BITS is a valid tagged address bits.  */
#define TRANSLATED_ADDRESS_VALID_BITS(BITS)

/* A mask for constant address BITS used in address translation.  */
#define TRANSLATED_ADDRESS_MASK(BITS)

2. Properly use _Static_assert for C and static_assert for C++.

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            | 19 +++++++++
 manual/Makefile                         |  3 +-
 manual/ctype.texi                       |  2 +-
 manual/memory.texi                      |  2 +-
 manual/tagged-address.texi              | 48 +++++++++++++++++++++
 misc/Makefile                           | 48 ++++++++++++++++++---
 misc/set-translated-address-mask.c      | 49 ++++++++++++++++++++++
 misc/sys/tagged-address.h               | 33 +++++++++++++++
 misc/tagged-address.c                   | 50 ++++++++++++++++++++++
 misc/tst-tagged-address-1-static.c      |  1 +
 misc/tst-tagged-address-1.c             | 55 +++++++++++++++++++++++++
 misc/tst-tagged-address-2-static.c      |  1 +
 misc/tst-tagged-address-2.c             | 45 ++++++++++++++++++++
 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             | 36 ++++++++++++++++
 misc/tst-tagged-address-5.c             | 25 +++++++++++
 misc/tst-tagged-address-6.c             | 34 +++++++++++++++
 misc/tst-tagged-address-7.c             | 41 ++++++++++++++++++
 misc/tst-tagged-address-mod-5.c         | 47 +++++++++++++++++++++
 misc/tst-tagged-address-mod-6.c         | 34 +++++++++++++++
 misc/tst-tagged-address-mod-7.c         | 35 ++++++++++++++++
 sysdeps/generic/inline-tagged-address.h | 43 +++++++++++++++++++
 sysdeps/generic/ldsodefs.h              |  4 ++
 30 files changed, 782 insertions(+), 8 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-translated-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