kumquat-buildroot/package/uclibc/0004-elf-fdpic-dsbt-.h-avoid-void-pointer-s-subtraction.patch
Rahul Bedarkar 250ed6568a uclibc: add upstream patch to fix glog build on bfin
glog has been failing on bfin because of issue in uclibc which is now
fixed in upstream.

Fixes:
  http://autobuild.buildroot.net/results/a10/a10ed48e6eb8411a3d8372f57c05fd11130da0e0/

Signed-off-by: Rahul Bedarkar <rahul.bedarkar@imgtec.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-09-20 20:08:02 +02:00

71 lines
3.3 KiB
Diff

From 2c242092372e9f7f62b881e81e8e798475e0cbb3 Mon Sep 17 00:00:00 2001
From: Rahul Bedarkar <rahul.bedarkar@imgtec.com>
Date: Sun, 18 Sep 2016 13:15:38 +0530
Subject: [PATCH] elf-{fdpic, dsbt}.h: avoid void pointer's subtraction
elf-fdpic.h or elf-dsbt.h is included by link.h. When C++ program
includes <link.h>, we get following build failure.
../usr/include/bits/elf-fdpic.h: In function 'void* __reloc_pointer(void*, const elf32_fdpic_loadmap*)':
../usr/include/bits/elf-fdpic.h:95: error: invalid use of 'void'
void pointer addition and subtraction is not allowed in C++ as it has
undetermined size, however in C with language extension it is possible
because sizeof void is treated as one byte.
Instead of performing subtraction on void pointers, typecast it to char*
first.
This build failure is detected by Buildroot autobuilder.
http://autobuild.buildroot.net/results/a10/a10ed48e6eb8411a3d8372f57c05fd11130da0e0/
Signed-off-by: Rahul Bedarkar <rahul.bedarkar@imgtec.com>
---
libc/sysdeps/linux/bfin/bits/elf-fdpic.h | 2 +-
libc/sysdeps/linux/c6x/bits/elf-dsbt.h | 2 +-
libc/sysdeps/linux/frv/bits/elf-fdpic.h | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/libc/sysdeps/linux/bfin/bits/elf-fdpic.h b/libc/sysdeps/linux/bfin/bits/elf-fdpic.h
index dddf82c..9fcf93f 100644
--- a/libc/sysdeps/linux/bfin/bits/elf-fdpic.h
+++ b/libc/sysdeps/linux/bfin/bits/elf-fdpic.h
@@ -91,7 +91,7 @@ __reloc_pointer (void *p,
/* This should be computed as part of the pointer comparison
above, but we want to use the carry in the comparison, so we
can't convert it to an integer type beforehand. */
- unsigned long offset = p - (void*)map->segs[c].p_vaddr;
+ unsigned long offset = (char*)p - (char*)map->segs[c].p_vaddr;
/* We only check for one-past-the-end for the last segment,
assumed to be the data segment, because other cases are
ambiguous in the absence of padding between segments, and
diff --git a/libc/sysdeps/linux/c6x/bits/elf-dsbt.h b/libc/sysdeps/linux/c6x/bits/elf-dsbt.h
index a4e3e7d..0e82ec7 100644
--- a/libc/sysdeps/linux/c6x/bits/elf-dsbt.h
+++ b/libc/sysdeps/linux/c6x/bits/elf-dsbt.h
@@ -94,7 +94,7 @@ __reloc_pointer (void *p,
for (c = 0; c < map->nsegs; c++)
{
- unsigned long offset = p - (void*)map->segs[c].p_vaddr;
+ unsigned long offset = (char*)p - (char*)map->segs[c].p_vaddr;
/* We only check for one-past-the-end for the second segment,
assumed to be the data segment, because other cases are
ambiguous in the absence of padding between segments, and
diff --git a/libc/sysdeps/linux/frv/bits/elf-fdpic.h b/libc/sysdeps/linux/frv/bits/elf-fdpic.h
index dddf82c..9fcf93f 100644
--- a/libc/sysdeps/linux/frv/bits/elf-fdpic.h
+++ b/libc/sysdeps/linux/frv/bits/elf-fdpic.h
@@ -91,7 +91,7 @@ __reloc_pointer (void *p,
/* This should be computed as part of the pointer comparison
above, but we want to use the carry in the comparison, so we
can't convert it to an integer type beforehand. */
- unsigned long offset = p - (void*)map->segs[c].p_vaddr;
+ unsigned long offset = (char*)p - (char*)map->segs[c].p_vaddr;
/* We only check for one-past-the-end for the last segment,
assumed to be the data segment, because other cases are
ambiguous in the absence of padding between segments, and
--
2.6.2