diff options
author | Yury Khrustalev <yury.khrustalev@arm.com> | 2024-11-26 11:38:30 +0000 |
---|---|---|
committer | Yury Khrustalev <yury.khrustalev@arm.com> | 2025-01-20 09:36:19 +0000 |
commit | d3f2b71ef1d146137a25dd1367d97a14fac341c6 (patch) | |
tree | a55bdd5a2980acc4ee4c680bed50763017a0cb9b | |
parent | a335acb8b86351afa8e3721b7e62ed32b86708b8 (diff) | |
download | glibc-d3f2b71ef1d146137a25dd1367d97a14fac341c6.zip glibc-d3f2b71ef1d146137a25dd1367d97a14fac341c6.tar.gz glibc-d3f2b71ef1d146137a25dd1367d97a14fac341c6.tar.bz2 |
aarch64: Fix tests not compatible with targets supporting GCS
- Add GCS marking to some of the tests when target supports GCS
- Fix tst-ro-dynamic-mod.map linker script to avoid removing
GNU properties
- Add header with macros for GNU properties
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
-rw-r--r-- | elf/tst-asm-helper.h | 49 | ||||
-rw-r--r-- | elf/tst-big-note-lib.S | 2 | ||||
-rw-r--r-- | elf/tst-ro-dynamic-mod.map | 7 | ||||
-rw-r--r-- | sysdeps/aarch64/tst-vpcs-mod.S | 4 |
4 files changed, 57 insertions, 5 deletions
diff --git a/elf/tst-asm-helper.h b/elf/tst-asm-helper.h new file mode 100644 index 0000000..6f91ac2 --- /dev/null +++ b/elf/tst-asm-helper.h @@ -0,0 +1,49 @@ +/* Test header that defines macros for GNU properties that need to be + used in some test assembly files where sysdep.h cannot be included + for some reason. + Copyright (C) 2024-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* GNU_PROPERTY_AARCH64_* macros from elf.h for use in asm code. */ +#define FEATURE_1_AND 0xc0000000 +#define FEATURE_1_BTI 1 +#define FEATURE_1_PAC 2 +#define FEATURE_1_GCS 4 + +/* Add a NT_GNU_PROPERTY_TYPE_0 note. */ +#define GNU_PROPERTY(type, value) \ + .section .note.gnu.property, "a"; \ + .p2align 3; \ + .word 4; \ + .word 16; \ + .word 5; \ + .asciz "GNU"; \ + .word type; \ + .word 4; \ + .word value; \ + .word 0; \ + .text + +/* Add GNU property note with the supported features to all asm code + where sysdep.h is included. */ +#if HAVE_AARCH64_BTI && HAVE_AARCH64_PAC_RET +GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC|FEATURE_1_GCS) +#elif HAVE_AARCH64_BTI +GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_GCS) +#endif diff --git a/elf/tst-big-note-lib.S b/elf/tst-big-note-lib.S index 244ca40..3608686 100644 --- a/elf/tst-big-note-lib.S +++ b/elf/tst-big-note-lib.S @@ -20,6 +20,8 @@ On a typical Linux system with 8MiB "ulimit -s", that was enough to trigger stack overflow in open_verify. */ +#include "tst-asm-helper.h" + #define NOTE_SIZE 8*1024*1024 .pushsection .note.big,"a" diff --git a/elf/tst-ro-dynamic-mod.map b/elf/tst-ro-dynamic-mod.map index 2fe4a29..2a15848 100644 --- a/elf/tst-ro-dynamic-mod.map +++ b/elf/tst-ro-dynamic-mod.map @@ -3,14 +3,13 @@ SECTIONS . = SIZEOF_HEADERS; .dynamic : { *(.dynamic) } :text :dynamic .rodata : { *(.data*) *(.bss*) } :text - /DISCARD/ : { - *(.note.gnu.property) - } - .note : { *(.note.*) } :text :note + .note : { *(.note) } :text :note + .note.gnu.property : { *(.note.gnu.property) } :text :gnu_property } PHDRS { text PT_LOAD FLAGS(5) FILEHDR PHDRS; dynamic PT_DYNAMIC FLAGS(4); note PT_NOTE FLAGS(4); + gnu_property PT_GNU_PROPERTY FLAGS(4); } diff --git a/sysdeps/aarch64/tst-vpcs-mod.S b/sysdeps/aarch64/tst-vpcs-mod.S index 972e1a6..613a4d1 100644 --- a/sysdeps/aarch64/tst-vpcs-mod.S +++ b/sysdeps/aarch64/tst-vpcs-mod.S @@ -17,6 +17,8 @@ License along with the GNU C Library. If not, see <https://www.gnu.org/licenses/>. */ +#include "tst-asm-helper.h" + .variant_pcs vpcs_call .global vpcs_call .type vpcs_call, %function @@ -121,7 +123,7 @@ vpcs_call_regs: /* Emulate a BL using B, but save x30 before the branch. */ adr x30, .L_return_addr stp x30, x29, [x1, 240] - b vpcs_call + bl vpcs_call .L_return_addr: /* Restore callee-saved registers. */ |