[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