Fix bti support (#830)
authorBill Roberts <152999275+billatarm@users.noreply.github.com>
Tue, 19 Mar 2024 16:44:55 +0000 (11:44 -0500)
committerGitHub <noreply@github.com>
Tue, 19 Mar 2024 16:44:55 +0000 (12:44 -0400)
* bti: add identifier to ffi_closure_SYSV_V_alt

This was missing BTI_C identifier.

Old Code:
ffi_closure_SYSV_V_alt:
0000fffff7f70500:   ldr     x17, [sp, #8]

Signed-off-by: Bill Roberts <bill.roberts@arm.com>
* testsuite: fix whitespace in Makefile.am

Signed-off-by: Bill Roberts <bill.roberts@arm.com>
* aarch64: correct comment describing BTI

The comment is incorrect, BTI is enabled per mapping via mprotect with
PROT_BTI flag set, not per-process. When the loader loads the library,
if the GNU Notes section is missing this, PROT_BTI will not be enabled
for that mapping, but is independent of other mappings.

Signed-off-by: Bill Roberts <bill.roberts@arm.com>
---------

Signed-off-by: Bill Roberts <bill.roberts@arm.com>
src/aarch64/sysv.S
testsuite/Makefile.am

index fdd0e8b7bba8fd35bdaa9fa13dad501fc6e3b1c9..60cfa505bc856d7fbf263f867fbef7a1ce886f1d 100644 (file)
@@ -68,7 +68,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
 #define BTI_J hint #36
 /*
  * The ELF Notes section needs to indicate if BTI is supported, as the first ELF loaded that doesn't
- * declare this support disables it for the whole process.
+ * declare this support disables it for memory region containing the loaded library.
  */
 # define GNU_PROPERTY_AARCH64_BTI (1 << 0)         /* Has Branch Target Identification */
        .text
@@ -527,6 +527,7 @@ L(do_closure):
 #if defined(FFI_EXEC_STATIC_TRAMP)
        .align 4
 CNAME(ffi_closure_SYSV_V_alt):
+       BTI_C
        /* See the comments above trampoline_code_table. */
        ldr     x17, [sp, #8]                   /* Load closure in x17 */
        add     sp, sp, #16                     /* Restore the stack */
@@ -541,6 +542,7 @@ CNAME(ffi_closure_SYSV_V_alt):
 
        .align 4
 CNAME(ffi_closure_SYSV_alt):
+       BTI_C
        /* See the comments above trampoline_code_table. */
        ldr     x17, [sp, #8]                   /* Load closure in x17 */
        add     sp, sp, #16                     /* Restore the stack */
index d286cf7f2f641c34409f954cc244a4e3a54367ff..6ba98e12cd1dc922cc1bba448c84ff7c1646c186 100644 (file)
@@ -8,7 +8,7 @@ CLEANFILES = *.exe core* *.log *.sum
 
 EXTRA_DIST = config/default.exp emscripten/build.sh emscripten/conftest.py \
        emscripten/node-tests.sh emscripten/test.html emscripten/test_libffi.py \
-  emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \
+       emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \
        lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \
        libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp libffi.bhaible/test-call.c \
        libffi.bhaible/test-callback.c libffi.bhaible/testcases.c libffi.call/align_mixed.c \