aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorIndu Bhagat <indu.bhagat@oracle.com>2023-06-29 16:29:09 -0700
committerIndu Bhagat <indu.bhagat@oracle.com>2023-06-29 16:31:58 -0700
commitce9a87252cdf383e1ad3016b7dbc12e9294e3851 (patch)
tree2ed51b4aff49737ab2053e6e430025ce5730830c /gas
parent9f71b60bd45a93e25ea8dd3d8dc47f9ebd7d00d1 (diff)
downloadfsf-binutils-gdb-ce9a87252cdf383e1ad3016b7dbc12e9294e3851.zip
fsf-binutils-gdb-ce9a87252cdf383e1ad3016b7dbc12e9294e3851.tar.gz
fsf-binutils-gdb-ce9a87252cdf383e1ad3016b7dbc12e9294e3851.tar.bz2
sframe: bfd: gas: ld: format bump to SFrame version 2
SFrame version 2 encodes the size of repetitive insn block explicitly in the format. Add information in the SFrame FDE to convey the size of the block of repeating instructions. This information is used only for SFrame FDEs of type SFRAME_FDE_TYPE_PCMASK. Introduce two extra bytes for padding: this ensures that the memory accesses to the members of the SFrame Frame Descriptor Entry (FDE) are naturally aligned. gas generates SFrame section with version SFRAME_VERSION_2 by default. libsframe provides two new APIs to: - get an SFrame FDE data from the decoder context, and - add an SFrame FDE to the encoder context. The additional argument (for rep_block_size) is useful for SFrame FDEs where FDE type is SFRAME_FDE_TYPE_PCMASK. The linker will generate the output SFrame sections in the SFRAME_VERSION_2 format. If the input sections offered to the linker are not all in the SFRAME_VERSION_2 format, the linker issues an error to the user. objdump/readelf will show the following message to the user if .sframe section in SFRAME_VERSION_1 format is seen: "No further information can be displayed. SFrame version not supported." In other words, like the rest of the binutils, only the current SFrame format version, i.e., SFRAME_VERSION_2 is supported by the textual dump facilities. bfd/ * elf-sframe.c (_bfd_elf_merge_section_sframe): Generate an output SFrame section with version SFRAME_VERSION_2. Also, error out if the SFrame sections do not all have SFRAME_VERSION_2. * elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Generate SFrame section for plt entries with version SFRAME_VERSION_2. gas/ * gen-sframe.c (sframe_set_version): Update to SFRAME_VERSION_2. (output_sframe): Likewise. gas/testsuite/ * gas/cfi-sframe/cfi-sframe-aarch64-1.d: Use SFRAME_VERSION_2. * gas/cfi-sframe/cfi-sframe-aarch64-2.d: Likewise. * gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-1.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-2.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-3.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-4.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-5.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-6.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-7.d: Likewise. * gas/cfi-sframe/cfi-sframe-common-8.d: Likewise. * gas/cfi-sframe/cfi-sframe-x86_64-1.d: Likewise. * gas/cfi-sframe/common-empty-1.d: Likewise. * gas/cfi-sframe/common-empty-2.d: Likewise. * gas/cfi-sframe/common-empty-3.d: Likewise. ld/testsuite/ * ld-aarch64/sframe-simple-1.d: Adjust for SFRAME_VERSION_2. * ld-x86-64/sframe-plt-1.d: Likewise. * ld-x86-64/sframe-simple-1.d: Likewise. libsframe/ * libsframe.ver: Add the new APIs. * sframe.c (sframe_decoder_get_funcdesc_v2): New definition. (sframe_encoder_add_funcdesc_v2): Likewise. (sframe_header_sanity_check_p): Include SFRAME_VERSION_2. (sframe_fre_check_range_p): Get rep_block_size info from SFrame FDE. * sframe-dump.c (dump_sframe_header): Add support for SFRAME_VERSION_2. (dump_sframe): Inform user if SFrame section in SFRAME_VERSION_1 format is seen. libsframe/testsuite/ * libsframe.decode/DATA-BE: Regenerated data file. * libsframe.decode/DATA1: Likewise. * libsframe.decode/DATA2: Likewise. * libsframe.find/plt-findfre-1.c: Use new API in the testcase. include/ * sframe.h: Add member to encode size of the code block of repeating instructions. Add 2 bytes of padding. * sframe-api.h (sframe_decoder_get_funcdesc_v2): New declaration. (sframe_encoder_add_funcdesc_v2): Likewise.
Diffstat (limited to 'gas')
-rw-r--r--gas/gen-sframe.c9
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/common-empty-1.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/common-empty-2.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/common-empty-3.d2
16 files changed, 22 insertions, 17 deletions
diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c
index b0bf514..7fca83b 100644
--- a/gas/gen-sframe.c
+++ b/gas/gen-sframe.c
@@ -278,7 +278,10 @@ sframe_v1_set_func_info (unsigned int fde_type, unsigned int fre_type,
static void
sframe_set_version (uint32_t sframe_version ATTRIBUTE_UNUSED)
{
- sframe_ver_ops.format_version = SFRAME_VERSION_1;
+ sframe_ver_ops.format_version = SFRAME_VERSION_2;
+
+ /* These operations remain the same for SFRAME_VERSION_2 as fre_info and
+ func_info have not changed from SFRAME_VERSION_1. */
sframe_ver_ops.set_fre_info = sframe_v1_set_fre_info;
@@ -605,6 +608,8 @@ output_sframe_funcdesc (symbolS *start_of_fre_section,
#else
out_one (func_info);
#endif
+ out_one (0);
+ out_two (0);
}
static void
@@ -1355,7 +1360,7 @@ output_sframe (segT sframe_seg)
(void) sframe_seg;
/* Setup the version specific access functions. */
- sframe_set_version (SFRAME_VERSION_1);
+ sframe_set_version (SFRAME_VERSION_2);
/* Process all fdes and create SFrame stack trace information. */
create_sframe_all ();
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.d
index aeefbc9..8ae4621 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.d
@@ -5,7 +5,7 @@
Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 3
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.d
index 985f51f..b7834d5 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 2
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d
index 666a941..599d4c4 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 2
Num FREs: 6
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
index 7d97383..32577f3 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 1
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d
index fc7d5c4..3e3f74d 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 1
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d
index 9595450..6430d46 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 1
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
index b835980..319ff96 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 3
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
index d2bef75..82d3497 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 3
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
index f915ac5..fe6917c 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 3
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
index cab19d5..39724d9 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 3
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
index c0a4a8de..c0a0e62 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 2
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d
index bba3b59..ae36c21 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 1
Num FREs: 4
diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-1.d b/gas/testsuite/gas/cfi-sframe/common-empty-1.d
index 0b09799..1419225 100644
--- a/gas/testsuite/gas/cfi-sframe/common-empty-1.d
+++ b/gas/testsuite/gas/cfi-sframe/common-empty-1.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 0
Num FREs: 0
diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-2.d b/gas/testsuite/gas/cfi-sframe/common-empty-2.d
index e566c07..ab8de0b 100644
--- a/gas/testsuite/gas/cfi-sframe/common-empty-2.d
+++ b/gas/testsuite/gas/cfi-sframe/common-empty-2.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 0
Num FREs: 0
diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-3.d b/gas/testsuite/gas/cfi-sframe/common-empty-3.d
index f7a6062..df0b19e 100644
--- a/gas/testsuite/gas/cfi-sframe/common-empty-3.d
+++ b/gas/testsuite/gas/cfi-sframe/common-empty-3.d
@@ -6,7 +6,7 @@ Contents of the SFrame section .sframe:
Header :
- Version: SFRAME_VERSION_1
+ Version: SFRAME_VERSION_2
Flags: NONE
Num FDEs: 0
Num FREs: 0