mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
RISC-V: Add GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS and GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED
This patch adds two new GNU properties for RISC-V: GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS and GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED. We only add readelf and define the properties in this patch. Ref: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/417
This commit is contained in:
@@ -21287,6 +21287,33 @@ decode_aarch64_feature_1_and (unsigned int bitmask)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
decode_riscv_feature_1_and (unsigned int bitmask)
|
||||||
|
{
|
||||||
|
while (bitmask)
|
||||||
|
{
|
||||||
|
unsigned int bit = bitmask & (- bitmask);
|
||||||
|
|
||||||
|
bitmask &= ~ bit;
|
||||||
|
switch (bit)
|
||||||
|
{
|
||||||
|
case GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED:
|
||||||
|
printf ("CFI_LP_UNLABELED");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS:
|
||||||
|
printf ("CFI_SS");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf (_("<unknown: %x>"), bit);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (bitmask)
|
||||||
|
printf (", ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
decode_1_needed (unsigned int bitmask)
|
decode_1_needed (unsigned int bitmask)
|
||||||
{
|
{
|
||||||
@@ -21477,6 +21504,18 @@ print_gnu_property_note (Filedata * filedata, Elf_Internal_Note * pnote)
|
|||||||
goto next;
|
goto next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (filedata->file_header.e_machine == EM_RISCV)
|
||||||
|
{
|
||||||
|
if (type == GNU_PROPERTY_RISCV_FEATURE_1_AND)
|
||||||
|
{
|
||||||
|
printf ("RISC-V AND feature: ");
|
||||||
|
if (datasz != 4)
|
||||||
|
printf (_("<corrupt length: %#x> "), datasz);
|
||||||
|
else
|
||||||
|
decode_riscv_feature_1_and (byte_get (ptr, 4));
|
||||||
|
goto next;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#as: -defsym __property_zicfilp_unlabeled__=1 -march=rv64i -mabi=lp64
|
||||||
|
#readelf: -n
|
||||||
|
#source: property.s
|
||||||
|
|
||||||
|
Displaying notes found in: .note.gnu.property
|
||||||
|
[ ]+Owner[ ]+Data size[ ]+Description
|
||||||
|
[ ]+GNU[ ]+0x00000010[ ]+NT_GNU_PROPERTY_TYPE_0
|
||||||
|
[ ]+Properties: RISC-V AND feature: CFI_LP_UNLABELED
|
||||||
8
binutils/testsuite/binutils-all/riscv/property-cfi-ss.d
Normal file
8
binutils/testsuite/binutils-all/riscv/property-cfi-ss.d
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#as: -defsym __property_zicfiss__=1 -march=rv64i -mabi=lp64
|
||||||
|
#readelf: -n
|
||||||
|
#source: property.s
|
||||||
|
|
||||||
|
Displaying notes found in: .note.gnu.property
|
||||||
|
[ ]+Owner[ ]+Data size[ ]+Description
|
||||||
|
[ ]+GNU[ ]+0x00000010[ ]+NT_GNU_PROPERTY_TYPE_0
|
||||||
|
[ ]+Properties: RISC-V AND feature: CFI_SS
|
||||||
41
binutils/testsuite/binutils-all/riscv/property.s
Normal file
41
binutils/testsuite/binutils-all/riscv/property.s
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
.type _start,@function
|
||||||
|
_start:
|
||||||
|
ret
|
||||||
|
|
||||||
|
.ifdef __property_zicfilp_unlabeled__
|
||||||
|
.section ".note.gnu.property", "a"
|
||||||
|
.p2align 3
|
||||||
|
.long 1f - 0f /* name length */
|
||||||
|
.long 5f - 2f /* data length */
|
||||||
|
.long 5 /* note type */
|
||||||
|
0: .asciz "GNU" /* vendor name */
|
||||||
|
1:
|
||||||
|
.p2align 3
|
||||||
|
2: .long 0xc0000000 /* pr_type. */
|
||||||
|
.long 4f - 3f /* pr_datasz. */
|
||||||
|
3:
|
||||||
|
.long 0x1 /* GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED. */
|
||||||
|
4:
|
||||||
|
.p2align 3
|
||||||
|
5:
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.ifdef __property_zicfiss__
|
||||||
|
.section ".note.gnu.property", "a"
|
||||||
|
.p2align 3
|
||||||
|
.long 1f - 0f /* name length */
|
||||||
|
.long 5f - 2f /* data length */
|
||||||
|
.long 5 /* note type */
|
||||||
|
0: .asciz "GNU" /* vendor name */
|
||||||
|
1:
|
||||||
|
.p2align 3
|
||||||
|
2: .long 0xc0000000 /* pr_type. */
|
||||||
|
.long 4f - 3f /* pr_datasz. */
|
||||||
|
3:
|
||||||
|
.long 0x2 /* GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS. */
|
||||||
|
4:
|
||||||
|
.p2align 3
|
||||||
|
5:
|
||||||
|
.endif
|
||||||
@@ -1041,6 +1041,11 @@
|
|||||||
#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1)
|
#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1)
|
||||||
#define GNU_PROPERTY_AARCH64_FEATURE_1_GCS (1U << 2)
|
#define GNU_PROPERTY_AARCH64_FEATURE_1_GCS (1U << 2)
|
||||||
|
|
||||||
|
/* RISC-V specific GNU PROPERTY. */
|
||||||
|
#define GNU_PROPERTY_RISCV_FEATURE_1_AND 0xc0000000
|
||||||
|
#define GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED (1U << 0)
|
||||||
|
#define GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS (1U << 1)
|
||||||
|
|
||||||
/* Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG). */
|
/* Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG). */
|
||||||
#define GNU_ABI_TAG_LINUX 0
|
#define GNU_ABI_TAG_LINUX 0
|
||||||
#define GNU_ABI_TAG_HURD 1
|
#define GNU_ABI_TAG_HURD 1
|
||||||
|
|||||||
Reference in New Issue
Block a user