[PATCH v12 06/25] readelf: dump Object Attributes v2

Matthieu Longo matthieu.longo@arm.com
Mon Jan 19 16:52:13 GMT 2026


On 19/01/2026 12:02, Jan Beulich wrote:
> On 16.01.2026 19:59, Matthieu Longo wrote:
>> +static BufferReadOp_t
>> +elf_parse_attrs_subsection_v2 (unsigned char *cursor,
> Seehttps://sourceware.org/pipermail/binutils/2026-January/147519.html
> wrt the lack of const-ness here.

With the additional patch that I proposed on top of yours, it gives the following.

diff --git a/binutils/readelf.c b/binutils/readelf.c
index 5080c4f9adb..c9b6ec247f8 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -20039,8 +20039,8 @@ oav2_identify_tag (const oav2_known_subsection_t *subsec, obj_attr_tag_t tag)
    return NULL;
  }

-static unsigned char *
-oav2_display_attr_value (unsigned char *cursor,
+static const unsigned char *
+oav2_display_attr_value (const unsigned char *cursor,
                          const unsigned char *const end,
                          obj_attr_encoding_v2_t value_encoding)
  {
@@ -20061,8 +20061,8 @@ oav2_display_attr_value (unsigned char *cursor,
  /* Print out the raw attribute value.  It should be feasible to support custom
     formatters here for known tags that explain the interpretation of specific
     values.  */
-static unsigned char *
-display_aarch64_attribute (unsigned char *cursor,
+static const unsigned char *
+display_aarch64_attribute (const unsigned char *cursor,
                            const unsigned char *const end,
                            const oav2_known_tag_t *tag_info,
                            obj_attr_encoding_v2_t value_encoding)
@@ -20071,13 +20071,14 @@ display_aarch64_attribute (unsigned char *cursor,
    return oav2_display_attr_value (cursor, end, value_encoding);
  }

-typedef unsigned char *(*display_arch_attr_t) (unsigned char *,
-                                              const unsigned char *const,
-                                              const oav2_known_tag_t *,
-                                              obj_attr_encoding_v2_t);
+typedef const unsigned char *(*display_arch_attr_t)
+  (const unsigned char *,
+   const unsigned char *const,
+   const oav2_known_tag_t *,
+   obj_attr_encoding_v2_t);

-static unsigned char *
-display_attr_v2 (unsigned char *cursor,
+static const unsigned char *
+display_attr_v2 (const unsigned char *cursor,
                  const unsigned char *const end,
                  const oav2_known_subsection_t *subsec_info,
                  obj_attr_encoding_v2_t value_encoding,
@@ -20103,7 +20104,7 @@ typedef struct {
  } BufferReadOp_t;

  static BufferReadOp_t
-elf_parse_attrs_subsection_v2 (unsigned char *cursor,
+elf_parse_attrs_subsection_v2 (const unsigned char *cursor,
                                const uint64_t max_read,
                                const char *public_name,
                                display_arch_attr_t display_arch_attr)
@@ -20172,7 +20173,7 @@ elf_parse_attrs_subsection_v2 (unsigned char *cursor,
       1. the length of the subsection name is validated, as the presence of '\0'
         at the end of the string, so no risk of buffer overrun.
       2. the data for comprehension and encoding can also safely be read.  */
-  unsigned char *const end = cursor + subsection_len - F_SUBSECTION_LEN;
+  const unsigned char *const end = cursor + subsection_len - F_SUBSECTION_LEN;
    while (cursor < end)
      {
        const char *subsec_name = (const char *) cursor;
@@ -20241,7 +20242,7 @@ elf_parse_attrs_subsection_v2 (unsigned char *cursor,
        printf (_("   Values:\n"));
        while (cursor < end)
         {
-         unsigned char *cursor_new
+         const unsigned char *cursor_new
             = display_attr_v2 (cursor, end, subsec_info, value_encoding,
                                display_arch_attr);
           op.read += (cursor_new - cursor);

Matthieu


More information about the Binutils mailing list