aboutsummaryrefslogtreecommitdiff
path: root/packages/uClibc-ng/1.0.48/0004-ldso-arm-fix-build-with-gcc-14.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/uClibc-ng/1.0.48/0004-ldso-arm-fix-build-with-gcc-14.patch')
-rw-r--r--packages/uClibc-ng/1.0.48/0004-ldso-arm-fix-build-with-gcc-14.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/packages/uClibc-ng/1.0.48/0004-ldso-arm-fix-build-with-gcc-14.patch b/packages/uClibc-ng/1.0.48/0004-ldso-arm-fix-build-with-gcc-14.patch
new file mode 100644
index 00000000..6fa81a19
--- /dev/null
+++ b/packages/uClibc-ng/1.0.48/0004-ldso-arm-fix-build-with-gcc-14.patch
@@ -0,0 +1,55 @@
+From 44aee04d7864da97a79fc41eeac0695d5f21f861 Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Wed, 1 May 2024 04:35:20 -0700
+Subject: [PATCH 4/7] ldso: arm: fix build with gcc-14
+
+With gcc-14 warnings caused by type mismatches turn to errors:
+- got_entry is a pointer in the _dl_linux_resolver(), but the function
+ _dl_linux_resolver() returns unsigned long. Convert got_entry to
+ unsigned long when returning
+- first argument of _dl_funcdesc_for() is a pointer, but (symbol_addr +
+ reloc_value) is unsigned long in the _dl_do_reloc(). Convert function
+ argument to (void *)
+- struct funcdesc_value::entry_point is a pointer, but DL_RELOC_ADDR
+ returns ElfW(Addr). Convert DL_RELOC_ADDR result to (void *) before
+ assigning to funcdesc_value::entry_point
+
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+---
+ ldso/ldso/arm/elfinterp.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ldso/ldso/arm/elfinterp.c b/ldso/ldso/arm/elfinterp.c
+index 4c268356f..9c9a3e8ca 100644
+--- a/ldso/ldso/arm/elfinterp.c
++++ b/ldso/ldso/arm/elfinterp.c
+@@ -92,7 +92,7 @@ unsigned long _dl_linux_resolver (struct elf_resolve *tpnt, int reloc_offet)
+ *got_entry = funcval;
+ #endif
+
+- return got_entry;
++ return (unsigned long)got_entry;
+ }
+ #else
+ unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
+@@ -362,7 +362,7 @@ _dl_do_reloc (struct elf_resolve *tpnt,struct r_scope_elem *scope,
+ unsigned long reloc_value = *reloc_addr;
+
+ if (symbol_addr)
+- reloc_value = (unsigned long) _dl_funcdesc_for(symbol_addr + reloc_value, sym_ref.tpnt->loadaddr.got_value);
++ reloc_value = (unsigned long) _dl_funcdesc_for((void *)(symbol_addr + reloc_value), sym_ref.tpnt->loadaddr.got_value);
+ else
+ /* Relocation against an
+ undefined weak symbol:
+@@ -429,7 +429,7 @@ _dl_do_lazy_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
+ {
+ struct funcdesc_value *dst = (struct funcdesc_value *) reloc_addr;
+
+- dst->entry_point = DL_RELOC_ADDR(tpnt->loadaddr, dst->entry_point);
++ dst->entry_point = (void *)DL_RELOC_ADDR(tpnt->loadaddr, dst->entry_point);
+ dst->got_value = tpnt->loadaddr.got_value;
+ }
+ break;
+--
+2.43.2
+