[07/12] bfd: linker: add support for rep_block_size for pltN entries

Message ID 20230627212028.2138604-8-indu.bhagat@oracle.com
State Unresolved
Headers
Series SFrame Version 2 - definition and support |

Checks

Context Check Description
snail/binutils-gdb-check warning Git am fail log

Commit Message

Indu Bhagat June 27, 2023, 9:20 p.m. UTC
  Use the new SFrame V2 APIs to encode the size of the pltN entries in the
SFrame FDE.

bfd/
	* elf-sframe.c (_bfd_elf_merge_section_sframe): Use new API.
	* elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Likewise.
---
 bfd/elf-sframe.c | 16 +++++++++-------
 bfd/elfxx-x86.c  | 22 ++++++++++++----------
 2 files changed, 21 insertions(+), 17 deletions(-)
  

Patch

diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c
index 013a892e08a..c09822a5503 100644
--- a/bfd/elf-sframe.c
+++ b/bfd/elf-sframe.c
@@ -411,16 +411,18 @@  _bfd_elf_merge_section_sframe (bfd *abfd,
   for (i = 0; i < num_fidx; i++)
     {
       unsigned int num_fres = 0;
-      int32_t func_start_address;
+      int32_t func_start_addr;
       bfd_vma address;
       uint32_t func_size = 0;
       unsigned char func_info = 0;
       unsigned int r_offset = 0;
       bool pltn_reloc_by_hand = false;
       unsigned int pltn_r_offset = 0;
+      uint8_t rep_block_size = 0;
 
-      if (!sframe_decoder_get_funcdesc (sfd_ctx, i, &num_fres, &func_size,
-					&func_start_address, &func_info))
+      if (!sframe_decoder_get_funcdesc_v2 (sfd_ctx, i, &num_fres, &func_size,
+					   &func_start_addr, &func_info,
+					   &rep_block_size))
 	{
 	  /* If function belongs to a deleted section, skip editing the
 	     function descriptor entry.  */
@@ -471,13 +473,13 @@  _bfd_elf_merge_section_sframe (bfd *abfd,
 	      /* FIXME For testing only. Cleanup later.  */
 	      // address += (sec->output_section->vma);
 
-	      func_start_address = address;
+	      func_start_addr = address;
 	    }
 
 	  /* Update the encoder context with updated content.  */
-	  int err = sframe_encoder_add_funcdesc (sfe_ctx, func_start_address,
-						 func_size, func_info,
-						 num_fres);
+	  int err = sframe_encoder_add_funcdesc_v2 (sfe_ctx, func_start_addr,
+						    func_size, func_info,
+						    rep_block_size, num_fres);
 	  cur_fidx++;
 	  BFD_ASSERT (!err);
 	}
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index ffd02f137d1..b6512c9c49c 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -1900,11 +1900,12 @@  _bfd_x86_elf_create_sframe_plt (bfd *output_bfd,
     {
       /* Add SFrame FDE for plt0, the function start address is updated later
 	 at _bfd_elf_merge_section_sframe time.  */
-      sframe_encoder_add_funcdesc (*ectx,
-				   0, /* func start addr.  */
-				   plt0_entry_size,
-				   func_info,
-				   0 /* Num FREs.  */);
+      sframe_encoder_add_funcdesc_v2 (*ectx,
+				      0, /* func start addr.  */
+				      plt0_entry_size,
+				      func_info,
+				      16,
+				      0 /* Num FREs.  */);
       sframe_frame_row_entry plt0_fre;
       unsigned int num_plt0_fres = htab->sframe_plt->plt0_num_fres;
       for (unsigned int j = 0; j < num_plt0_fres; j++)
@@ -1928,11 +1929,12 @@  _bfd_x86_elf_create_sframe_plt (bfd *output_bfd,
 	 function start address = plt0_entry_size.  As usual, this will be
 	 updated later at _bfd_elf_merge_section_sframe, by when the
 	 sections are relocated.  */
-      sframe_encoder_add_funcdesc (*ectx,
-				   plt0_entry_size, /* func start addr.  */
-				   dpltsec->size - plt0_entry_size,
-				   func_info,
-				   0 /* Num FREs.  */);
+      sframe_encoder_add_funcdesc_v2 (*ectx,
+				      plt0_entry_size, /* func start addr.  */
+				      dpltsec->size - plt0_entry_size,
+				      func_info,
+				      16,
+				      0 /* Num FREs.  */);
 
       sframe_frame_row_entry pltn_fre;
       /* Now add the FREs for pltn.  Simply adding the two FREs suffices due