[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