[Buildroot] [PATCH 2/3] package/elf2flt: backport upstream patch to remove use of BFD_VMA_FMT
Thomas Petazzoni
thomas.petazzoni at bootlin.com
Sun Aug 6 10:25:52 UTC 2023
This commit backports upstream commit
https://github.com/uclinux-dev/elf2flt/commit/a36df7407d9e3f93ca6449841ff0821b0d980438
to fix a build issue with binutils 2.40 or later:
elf2flt.c:223:31: error: expected ‘)’ before ‘BFD_VMA_FMT’
We prefer a backport over updating to a newer elf2flt version for now
as there has been multiple other changes in elf2flt, and elf2flt is
very fragile. Therefore for now we prefer to be conservative.
Fixes:
http://autobuild.buildroot.net/results/938a59b5e52d712786590e80328bb45b1c5fc519/
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
---
...07-elf2flt-remove-use-of-BFD_VMA_FMT.patch | 169 ++++++++++++++++++
1 file changed, 169 insertions(+)
create mode 100644 package/elf2flt/0007-elf2flt-remove-use-of-BFD_VMA_FMT.patch
diff --git a/package/elf2flt/0007-elf2flt-remove-use-of-BFD_VMA_FMT.patch b/package/elf2flt/0007-elf2flt-remove-use-of-BFD_VMA_FMT.patch
new file mode 100644
index 0000000000..82e693f35f
--- /dev/null
+++ b/package/elf2flt/0007-elf2flt-remove-use-of-BFD_VMA_FMT.patch
@@ -0,0 +1,169 @@
+From 9ec7dd9dead2f3c4c73c3ab2166a1f81bfb41825 Mon Sep 17 00:00:00 2001
+From: Greg Ungerer <gerg at kernel.org>
+Date: Thu, 13 Apr 2023 22:58:20 +1000
+Subject: [PATCH] elf2flt: remove use of BFD_VMA_FMT
+
+In binutils-2.40 the BFD_VMA_FMT definition used for printf style
+formatting specifiers has been removed. For reference this was done in
+commit b82817674f46 ("Don't use BFD_VMA_FMT in binutils") in the
+binutils git development tree.
+
+BFD_VMA_FMT is used in a number of places in the elf2flt code to output
+bfd offsets, values and the like. So it is broken when using the bfd
+code from binutils-2.40 and newer.
+
+According to the binutils change PRIx64 (and friends) is used to replace
+it, with appropriate casts to keep it clean for 32 and 64 bit platforms.
+Change the elf2flt.c use of it in the same way to fix.
+
+This does not change the output in any way in normal use. This fix can
+be used on all versions of binutils (older and newer), there is no
+need to only do this on 2.40 and newer.
+
+Signed-off-by: Greg Ungerer <gerg at kernel.org>
+Upstream: https://github.com/uclinux-dev/elf2flt/commit/a36df7407d9e3f93ca6449841ff0821b0d980438
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
+---
+ elf2flt.c | 58 ++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 30 insertions(+), 28 deletions(-)
+
+diff --git a/elf2flt.c b/elf2flt.c
+index 0fcb747..6685bff 100644
+--- a/elf2flt.c
++++ b/elf2flt.c
+@@ -220,8 +220,8 @@ dump_symbols(asymbol **symbol_table, long number_of_symbols)
+ long i;
+ printf("SYMBOL TABLE:\n");
+ for (i=0; i<number_of_symbols; i++) {
+- printf(" NAME=%s VALUE=0x%"BFD_VMA_FMT"x\n",
+- symbol_table[i]->name, symbol_table[i]->value);
++ printf(" NAME=%s VALUE=0x%"PRIx64"\n",
++ symbol_table[i]->name, (uint64_t) symbol_table[i]->value);
+ }
+ printf("\n");
+ return(0);
+@@ -466,8 +466,8 @@ output_relocs (
+ if (r == NULL)
+ continue;
+ if (verbose)
+- printf(" RELOCS: %s [%p]: flags=0x%x vma=0x%"BFD_VMA_FMT"x\n",
+- r->name, r, r->flags, elf2flt_bfd_section_vma(r));
++ printf(" RELOCS: %s [%p]: flags=0x%x vma=0x%"PRIx64"\n",
++ r->name, r, r->flags, (uint64_t) elf2flt_bfd_section_vma(r));
+ if ((r->flags & SEC_RELOC) == 0)
+ continue;
+ relsize = bfd_get_reloc_upper_bound(rel_bfd, r);
+@@ -952,12 +952,13 @@ output_relocs (
+ if (verbose)
+ fprintf(stderr,
+ "%s vma=0x%x, "
+- "value=0x%"BFD_VMA_FMT"x, "
+- "address=0x%"BFD_VMA_FMT"x "
++ "value=0x%"PRIx64", "
++ "address=0x%"PRIx64" "
+ "sym_addr=0x%x rs=0x%x, opcode=0x%x\n",
+ "ABS32",
+- sym_vma, (*(q->sym_ptr_ptr))->value,
+- q->address, sym_addr,
++ sym_vma,
++ (uint64_t) (*(q->sym_ptr_ptr))->value,
++ (uint64_t) q->address, sym_addr,
+ (*p)->howto->rightshift,
+ *(uint32_t *)r_mem);
+ sym_vma = elf2flt_bfd_section_vma(sym_section);
+@@ -971,12 +972,13 @@ output_relocs (
+ if (verbose)
+ fprintf(stderr,
+ "%s vma=0x%x, "
+- "value=0x%"BFD_VMA_FMT"x, "
+- "address=0x%"BFD_VMA_FMT"x "
++ "value=0x%"PRIx64", "
++ "address=0x%"PRIx64" "
+ "sym_addr=0x%x rs=0x%x, opcode=0x%x\n",
+ "PLT32",
+- sym_vma, (*(q->sym_ptr_ptr))->value,
+- q->address, sym_addr,
++ sym_vma,
++ (uint64_t) (*(q->sym_ptr_ptr))->value,
++ (uint64_t) q->address, sym_addr,
+ (*p)->howto->rightshift,
+ *(uint32_t *)r_mem);
+ case R_ARM_PC24:
+@@ -994,8 +996,8 @@ output_relocs (
+ case R_V850_ZDA_16_16_OFFSET:
+ case R_V850_ZDA_16_16_SPLIT_OFFSET:
+ /* Can't support zero-relocations. */
+- printf ("ERROR: %s+0x%"BFD_VMA_FMT"x: zero relocations not supported\n",
+- sym_name, q->addend);
++ printf ("ERROR: %s+0x%"PRIx64": zero relocations not supported\n",
++ sym_name, (uint64_t) q->addend);
+ continue;
+ #endif /* TARGET_v850 */
+
+@@ -1194,12 +1196,12 @@ output_relocs (
+ temp |= (exist_val & 0x3f);
+ *(unsigned long *)r_mem = htoniosl(temp);
+ if (verbose)
+- printf("omit: offset=0x%"BFD_VMA_FMT"x symbol=%s%s "
++ printf("omit: offset=0x%"PRIx64" symbol=%s%s "
+ "section=%s size=%d "
+- "fixup=0x%x (reloc=0x%"BFD_VMA_FMT"x) GPREL\n",
+- q->address, sym_name, addstr,
++ "fixup=0x%x (reloc=0x%"PRIx64") GPREL\n",
++ (uint64_t) q->address, sym_name, addstr,
+ section_name, sym_reloc_size,
+- sym_addr, section_vma + q->address);
++ sym_addr, (uint64_t) section_vma + q->address);
+ continue;
+ }
+ case R_NIOS2_PCREL16:
+@@ -1214,12 +1216,12 @@ output_relocs (
+ exist_val |= ((sym_addr & 0xFFFF) << 6);
+ *(unsigned long *)r_mem = htoniosl(exist_val);
+ if (verbose)
+- printf("omit: offset=0x%"BFD_VMA_FMT"x symbol=%s%s "
++ printf("omit: offset=0x%"PRIx64" symbol=%s%s "
+ "section=%s size=%d "
+- "fixup=0x%x (reloc=0x%"BFD_VMA_FMT"x) PCREL\n",
+- q->address, sym_name, addstr,
++ "fixup=0x%x (reloc=0x%"PRIx64") PCREL\n",
++ (uint64_t) q->address, sym_name, addstr,
+ section_name, sym_reloc_size,
+- sym_addr, section_vma + q->address);
++ sym_addr, (uint64_t) section_vma + q->address);
+ continue;
+ }
+
+@@ -1231,9 +1233,9 @@ output_relocs (
+ && (p[-1]->sym_ptr_ptr == p[0]->sym_ptr_ptr)
+ && (p[-1]->addend == p[0]->addend)) {
+ if (verbose)
+- printf("omit: offset=0x%"BFD_VMA_FMT"x symbol=%s%s "
++ printf("omit: offset=0x%"PRIx64" symbol=%s%s "
+ "section=%s size=%d LO16\n",
+- q->address, sym_name, addstr,
++ (uint64_t) q->address, sym_name, addstr,
+ section_name, sym_reloc_size);
+ continue;
+ }
+@@ -1646,13 +1648,13 @@ DIS29_RELOCATION:
+ */
+ if (relocation_needed) {
+ if (verbose)
+- printf(" RELOC[%d]: offset=0x%"BFD_VMA_FMT"x symbol=%s%s "
++ printf(" RELOC[%d]: offset=0x%"PRIx64" symbol=%s%s "
+ "section=%s size=%d "
+- "fixup=0x%x (reloc=0x%"BFD_VMA_FMT"x)\n",
++ "fixup=0x%x (reloc=0x%"PRIx64")\n",
+ flat_reloc_count,
+- q->address, sym_name, addstr,
++ (uint64_t) q->address, sym_name, addstr,
+ section_name, sym_reloc_size,
+- sym_addr, section_vma + q->address);
++ sym_addr, (uint64_t) section_vma + q->address);
+
+ #ifndef TARGET_bfin
+ flat_relocs = realloc(flat_relocs,
+--
+2.41.0
+
--
2.41.0
More information about the buildroot
mailing list