[PATCH] dwarf: constify read_leb128()'s first parameter

Matthieu Longo matthieu.longo@arm.com
Mon Jan 19 16:46:33 GMT 2026


On 19/01/2026 11:54, Jan Beulich wrote:
> It's not clear why the 2nd one is, but the 1st one isn't.
> 
> --- a/binutils/dwarf.c
> +++ b/binutils/dwarf.c
> @@ -278,7 +278,7 @@ null_name (const char *p)
>      No bytes will be read at address END or beyond.  */
>   
>   uint64_t
> -read_leb128 (unsigned char *data,
> +read_leb128 (const unsigned char *data,
>   	     const unsigned char *const end,
>   	     bool sign,
>   	     unsigned int *length_return,
> --- a/binutils/dwarf.h
> +++ b/binutils/dwarf.h
> @@ -269,7 +269,7 @@ extern void * xcrealloc (void *, uint64_
>      offset.  */
>   extern bool reloc_at (struct dwarf_section *, uint64_t);
>   
> -extern uint64_t read_leb128 (unsigned char *, const unsigned char *const,
> +extern uint64_t read_leb128 (const unsigned char *, const unsigned char *const,
>   			     bool, unsigned int *, int *);
>   
>   #if HAVE_LIBDEBUGINFOD

You might want to add this attached patch on top of it.
Fixing the constness on read_leb128() was not enough to get the new OAv2 functions constified correctly.

Matthieu
-------------- next part --------------
From 93c3cb1e24c1abbab38689eb3c7c06b1abccc607 Mon Sep 17 00:00:00 2001
From: Matthieu Longo <matthieu.longo@arm.com>
Date: Mon, 19 Jan 2026 16:41:39 +0000
Subject: [PATCH] readelf: constify read cursor for all OA processing helpers

---
 binutils/readelf.c | 84 +++++++++++++++++++++++-----------------------
 1 file changed, 42 insertions(+), 42 deletions(-)

diff --git a/binutils/readelf.c b/binutils/readelf.c
index 2e3f8d895ca..5080c4f9adb 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -18285,9 +18285,9 @@ process_mips_fpe_exception (int mask)
 
    Reads at or beyond END will not be made.  */
 
-static unsigned char *
+static const unsigned char *
 display_tag_value (signed int tag,
-		   unsigned char * p,
+		   const unsigned char * p,
 		   const unsigned char * const end)
 {
   uint64_t val;
@@ -18309,7 +18309,7 @@ display_tag_value (signed int tag,
 	{
 	  maxlen -= 1; /* Remove \0 from the character count.  */
 	  print_symbol_name ((int) maxlen, (const char *) p);
-	  size_t len = strnlen ((char *) p, maxlen);
+	  size_t len = strnlen ((const char *) p, maxlen);
 	  if (len == maxlen && p[maxlen] != '\0')
 	    printf (_("<corrupt string tag>"));
 	  p += len + 1;
@@ -18317,7 +18317,7 @@ display_tag_value (signed int tag,
       else
 	{
 	  printf (_("<corrupt string tag>"));
-	  p = (unsigned char *) end;
+	  p = end;
 	}
       printf ("\"\n");
     }
@@ -18333,8 +18333,8 @@ display_tag_value (signed int tag,
 
 /* ARC ABI attributes section.  */
 
-static unsigned char *
-display_arc_attribute (unsigned char * p,
+static const unsigned char *
+display_arc_attribute (const unsigned char * p,
 		       const unsigned char * const end)
 {
   unsigned int tag;
@@ -18650,8 +18650,8 @@ static arm_attr_public_tag arm_attr_public_tags[] =
 };
 #undef LOOKUP
 
-static unsigned char *
-display_arm_attribute (unsigned char * p,
+static const unsigned char *
+display_arm_attribute (const unsigned char * p,
 		       const unsigned char * const end)
 {
   unsigned int tag;
@@ -18797,10 +18797,10 @@ display_arm_attribute (unsigned char * p,
   return display_tag_value (tag, p, end);
 }
 
-static unsigned char *
-display_gnu_attribute (unsigned char * p,
-		       unsigned char * (* display_proc_gnu_attribute)
-		       (unsigned char *, unsigned int, const unsigned char * const),
+static const unsigned char *
+display_gnu_attribute (const unsigned char * p,
+		       const unsigned char * (* display_proc_gnu_attribute)
+		       (const unsigned char *, unsigned int, const unsigned char * const),
 		       const unsigned char * const end)
 {
   unsigned int tag;
@@ -18845,8 +18845,8 @@ display_gnu_attribute (unsigned char * p,
   return display_tag_value (tag, p, end);
 }
 
-static unsigned char *
-display_m68k_gnu_attribute (unsigned char * p,
+static const unsigned char *
+display_m68k_gnu_attribute (const unsigned char * p,
 			    unsigned int tag,
 			    const unsigned char * const end)
 {
@@ -18883,8 +18883,8 @@ display_m68k_gnu_attribute (unsigned char * p,
   return display_tag_value (tag & 1, p, end);
 }
 
-static unsigned char *
-display_power_gnu_attribute (unsigned char * p,
+static const unsigned char *
+display_power_gnu_attribute (const unsigned char * p,
 			     unsigned int tag,
 			     const unsigned char * const end)
 {
@@ -19002,8 +19002,8 @@ display_power_gnu_attribute (unsigned char * p,
   return display_tag_value (tag & 1, p, end);
 }
 
-static unsigned char *
-display_s390_gnu_attribute (unsigned char * p,
+static const unsigned char *
+display_s390_gnu_attribute (const unsigned char * p,
 			    unsigned int tag,
 			    const unsigned char * const end)
 {
@@ -19115,8 +19115,8 @@ display_sparc_hwcaps2 (unsigned int mask)
   fputc ('\n', stdout);
 }
 
-static unsigned char *
-display_sparc_gnu_attribute (unsigned char * p,
+static const unsigned char *
+display_sparc_gnu_attribute (const unsigned char * p,
 			     unsigned int tag,
 			     const unsigned char * const end)
 {
@@ -19178,8 +19178,8 @@ print_mips_fp_abi_value (unsigned int val)
     }
 }
 
-static unsigned char *
-display_mips_gnu_attribute (unsigned char * p,
+static const unsigned char *
+display_mips_gnu_attribute (const unsigned char * p,
 			    unsigned int tag,
 			    const unsigned char * const end)
 {
@@ -19218,8 +19218,8 @@ display_mips_gnu_attribute (unsigned char * p,
   return display_tag_value (tag & 1, p, end);
 }
 
-static unsigned char *
-display_tic6x_attribute (unsigned char * p,
+static const unsigned char *
+display_tic6x_attribute (const unsigned char * p,
 			 const unsigned char * const end)
 {
   unsigned int tag;
@@ -19455,7 +19455,7 @@ display_tic6x_attribute (unsigned char * p,
 }
 
 static void
-display_raw_attribute (unsigned char * p, unsigned char const * const end)
+display_raw_attribute (const unsigned char * p, unsigned char const * const end)
 {
   uint64_t addr = 0;
   size_t bytes = end - p;
@@ -19499,8 +19499,8 @@ display_raw_attribute (unsigned char * p, unsigned char const * const end)
   putchar ('\n');
 }
 
-static unsigned char *
-display_msp430_attribute (unsigned char * p,
+static const unsigned char *
+display_msp430_attribute (const unsigned char * p,
 			  const unsigned char * const end)
 {
   uint64_t val;
@@ -19579,8 +19579,8 @@ display_msp430_attribute (unsigned char * p,
   return p;
 }
 
-static unsigned char *
-display_msp430_gnu_attribute (unsigned char * p,
+static const unsigned char *
+display_msp430_gnu_attribute (const unsigned char * p,
 			      unsigned int tag,
 			      const unsigned char * const end)
 {
@@ -19624,8 +19624,8 @@ static struct riscv_attr_tag_t riscv_attr_tag[] =
 #undef T
 };
 
-static unsigned char *
-display_riscv_attribute (unsigned char *p,
+static const unsigned char *
+display_riscv_attribute (const unsigned char *p,
 			 const unsigned char * const end)
 {
   uint64_t val;
@@ -19684,8 +19684,8 @@ display_riscv_attribute (unsigned char *p,
   return p;
 }
 
-static unsigned char *
-display_csky_attribute (unsigned char * p,
+static const unsigned char *
+display_csky_attribute (const unsigned char * p,
 			const unsigned char * const end)
 {
   uint64_t tag;
@@ -19795,8 +19795,8 @@ static bool
 process_attributes (Filedata * filedata,
 		    const char * public_name,
 		    unsigned int proc_type,
-		    unsigned char * (* display_pub_attribute) (unsigned char *, const unsigned char * const),
-		    unsigned char * (* display_proc_gnu_attribute) (unsigned char *, unsigned int, const unsigned char * const))
+		    const unsigned char * (* display_pub_attribute) (const unsigned char *, const unsigned char * const),
+		    const unsigned char * (* display_proc_gnu_attribute) (const unsigned char *, unsigned int, const unsigned char * const))
 {
   /* Find the section header so that we get the size.  */
   Elf_Internal_Shdr * sect = find_section_by_type (filedata, proc_type);
@@ -19813,7 +19813,7 @@ process_attributes (Filedata * filedata,
     return false;
 
   bool res = true;
-  unsigned char * p = contents;
+  const unsigned char * p = contents;
   /* The first character is the version of the attributes.
      Currently only version 1, (aka 'A') is recognised here.  */
   if (*p != 'A')
@@ -19890,7 +19890,7 @@ process_attributes (Filedata * filedata,
 	  int tag;
 	  unsigned int val;
 	  uint64_t size;
-	  unsigned char * end;
+	  const unsigned char * end;
 
 	  /* PR binutils/17531: Safe handling of corrupt files.  */
 	  if (attr_len < 6)
@@ -24533,8 +24533,8 @@ process_notes (Filedata * filedata)
   return true;
 }
 
-static unsigned char *
-display_public_gnu_attributes (unsigned char * start,
+static const unsigned char *
+display_public_gnu_attributes (const unsigned char * start,
 			       const unsigned char * const end)
 {
   printf (_("  Unknown GNU attribute: %s\n"), start);
@@ -24545,13 +24545,13 @@ display_public_gnu_attributes (unsigned char * start,
   return (unsigned char *) end;
 }
 
-static unsigned char *
-display_generic_attribute (unsigned char * start,
+static const unsigned char *
+display_generic_attribute (const unsigned char * start,
 			   unsigned int tag,
 			   const unsigned char * const end)
 {
   if (tag == 0)
-    return (unsigned char *) end;
+    return end;
 
   return display_tag_value (tag, start, end);
 }
-- 
2.52.0



More information about the Binutils mailing list