summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2012-04-30 21:59:39 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-05-24 08:51:35 +0100
commit0fdd04febe83d77ecf431443f4736dbe1220ad8d (patch)
tree96757582c5d88b648a5620bba193a4cf2288fa80 /meta/recipes-core
parente108db7acc6382a51fa80f9346beacfa6e844b46 (diff)
downloadpoky-0fdd04febe83d77ecf431443f4736dbe1220ad8d.tar.gz
eglibc: Add ARM hf dynamic linker support
The work is done in glibc upstream we backport the relevant patches (From OE-Core rev: 8df03a0b8bd92cf7b73b816dacf3e362cfce557a) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core')
-rw-r--r--meta/recipes-core/eglibc/eglibc-2.15/add_HAVE_ARM_PCS_VFP.patch28
-rw-r--r--meta/recipes-core/eglibc/eglibc-2.15/ldso_arm_hf_support.patch338
-rw-r--r--meta/recipes-core/eglibc/eglibc_2.15.bb4
3 files changed, 369 insertions, 1 deletions
diff --git a/meta/recipes-core/eglibc/eglibc-2.15/add_HAVE_ARM_PCS_VFP.patch b/meta/recipes-core/eglibc/eglibc-2.15/add_HAVE_ARM_PCS_VFP.patch
new file mode 100644
index 0000000000..0f95c2fb96
--- /dev/null
+++ b/meta/recipes-core/eglibc/eglibc-2.15/add_HAVE_ARM_PCS_VFP.patch
@@ -0,0 +1,28 @@
1From: Carlos O'Donell <carlos_odonell@mentor.com>
2Date: Mon, 7 May 2012 20:04:41 +0000 (-0400)
3Subject: ARM: Define HAVE_ARM_PCS_VFP in config.h.
4X-Git-Url: http://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=6a43ec980c5a0500149ef37d4854eac0e270da6f;hp=05c2c9618f583ea4acd69b3fe5ae2a2922dd2ddc
5
6ARM: Define HAVE_ARM_PCS_VFP in config.h.
7
8If the compiler and flags would select the hard-float ABI
9then the ARM configure fragment will set HAVE_ARM_PCS_VFP.
10This is later used by the ARM shlib-versions to select
11the appropriately named dynamic linker.
12---
13
14Upstream-Status: Backport
15-Khem
16
17Index: libc/config.h.in
18===================================================================
19--- libc.orig/config.h.in 2012-01-04 22:06:28.000000000 -0800
20+++ libc/config.h.in 2012-05-08 11:25:56.581079069 -0700
21@@ -233,4 +233,7 @@
22
23 #define HAVE_REGEX 1
24
25+/* The ARM hard-float ABI is being used. */
26+#undef HAVE_ARM_PCS_VFP
27+
28 #endif
diff --git a/meta/recipes-core/eglibc/eglibc-2.15/ldso_arm_hf_support.patch b/meta/recipes-core/eglibc/eglibc-2.15/ldso_arm_hf_support.patch
new file mode 100644
index 0000000000..7a53da6ccb
--- /dev/null
+++ b/meta/recipes-core/eglibc/eglibc-2.15/ldso_arm_hf_support.patch
@@ -0,0 +1,338 @@
1From d3b36017d43af570ca7f79e711749dd4ade76979 Mon Sep 17 00:00:00 2001
2From: Carlos O'Donell <carlos_odonell@mentor.com>
3Date: Mon, 7 May 2012 22:14:44 -0400
4Subject: [PATCH] ARM: Use /lib/ld-linux-armhf.so.3 for the hard-float ABI.
5
6The hard-float ABI will now use /lib/ld-linux-armhf.so.3.
7We detect the use of the hard-float ABI and select the
8appropriate dynamic linker name. You must have a new or
9patched compiler which also uses the new dynamic loader
10name when the hard-float ABI is selected.
11---
12 ChangeLog.arm | 8 ++
13 sysdeps/arm/configure | 184 ++++++++++++++++++++++++++++++++++++++++++++
14 sysdeps/arm/configure.in | 17 ++++
15 sysdeps/arm/shlib-versions | 8 ++-
16 4 files changed, 216 insertions(+), 1 deletions(-)
17 mode change 100644 => 100755 sysdeps/arm/configure
18
19Upstream-Status: Backport
20-Khem
21
22Index: libc/ports/sysdeps/arm/configure.in
23===================================================================
24--- libc.orig/ports/sysdeps/arm/configure.in 2012-05-08 11:42:59.161128560 -0700
25+++ libc/ports/sysdeps/arm/configure.in 2012-05-08 11:43:29.373130066 -0700
26@@ -18,3 +18,20 @@
27 if test $libc_cv_asm_cfi_directive_sections != yes; then
28 AC_MSG_ERROR([need .cfi_sections in this configuration])
29 fi
30+
31+# We check to see if the compiler and flags are
32+# selecting the hard-float ABI and if they are then
33+# we set libc_cv_arm_pcs_vfp to yes which causes
34+# HAVE_ARM_PCS_VFP to be defined in config.h and
35+# in include/libc-symbols.h and thus available to
36+# shlib-versions to select the appropriate name for
37+# the dynamic linker via %ifdef.
38+AC_CACHE_CHECK([whether the compiler is using the ARM hard-float ABI],
39+ [libc_cv_arm_pcs_vfp],
40+ [AC_EGREP_CPP(yes,[#ifdef __ARM_PCS_VFP
41+ yes
42+ #endif
43+ ], libc_cv_arm_pcs_vfp=yes, libc_cv_arm_pcs_vfp=no)])
44+if test $libc_cv_arm_pcs_vfp = yes; then
45+ AC_DEFINE(HAVE_ARM_PCS_VFP)
46+fi
47Index: libc/ports/sysdeps/arm/shlib-versions
48===================================================================
49--- libc.orig/ports/sysdeps/arm/shlib-versions 2012-05-08 11:42:59.145128546 -0700
50+++ libc/ports/sysdeps/arm/shlib-versions 2012-05-08 11:43:29.409130022 -0700
51@@ -1,4 +1,10 @@
52 arm.*-.*-linux-gnueabi.* DEFAULT GLIBC_2.4
53
54-arm.*-.*-linux-gnueabi.* ld=ld-linux.so.3
55+%ifdef HAVE_ARM_PCS_VFP
56+# The EABI-derived hard-float ABI uses a new dynamic linker.
57+arm.*-.*-linux-gnueabi.* ld=ld-linux-armhf.so.3
58+%else
59+# The EABI-derived soft-float ABI continues to use ld-linux.so.3.
60+arm.*-.*-linux-gnueabi.* ld=ld-linux.so.3
61+%endif
62 arm.*-.*-linux.* ld=ld-linux.so.2
63Index: libc/ports/sysdeps/arm/configure
64===================================================================
65--- libc.orig/ports/sysdeps/arm/configure 2012-05-08 11:43:46.437130836 -0700
66+++ libc/ports/sysdeps/arm/configure 2012-05-08 11:49:10.393145653 -0700
67@@ -1,3 +1,100 @@
68+# as_fn_set_status STATUS
69+# -----------------------
70+# Set $? to STATUS, without forking.
71+as_fn_set_status ()
72+{
73+ return $1
74+} # as_fn_set_status
75+
76+# as_fn_exit STATUS
77+# -----------------
78+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
79+as_fn_exit ()
80+{
81+ set +e
82+ as_fn_set_status $1
83+ exit $1
84+} # as_fn_exit
85+# as_fn_arith ARG...
86+# ------------------
87+# Perform arithmetic evaluation on the ARGs, and store the result in the
88+# global $as_val. Take advantage of shells that can avoid forks. The arguments
89+# must be portable across $(()) and expr.
90+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
91+ eval 'as_fn_arith ()
92+ {
93+ as_val=$(( $* ))
94+ }'
95+else
96+ as_fn_arith ()
97+ {
98+ as_val=`expr "$@" || test $? -eq 1`
99+ }
100+fi # as_fn_arith
101+
102+if expr a : '\(a\)' >/dev/null 2>&1 &&
103+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
104+ as_expr=expr
105+else
106+ as_expr=false
107+fi
108+
109+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
110+ as_basename=basename
111+else
112+ as_basename=false
113+fi
114+
115+as_me=`$as_basename -- "$0" ||
116+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
117+ X"$0" : 'X\(//\)$' \| \
118+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
119+$as_echo X/"$0" |
120+ sed '/^.*\/\([^/][^/]*\)\/*$/{
121+ s//\1/
122+ q
123+ }
124+ /^X\/\(\/\/\)$/{
125+ s//\1/
126+ q
127+ }
128+ /^X\/\(\/\).*/{
129+ s//\1/
130+ q
131+ }
132+ s/.*/./; q'`
133+
134+
135+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
136+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
137+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
138+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
139+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
140+ sed -n '
141+ p
142+ /[$]LINENO/=
143+ ' <$as_myself |
144+ sed '
145+ s/[$]LINENO.*/&-/
146+ t lineno
147+ b
148+ :lineno
149+ N
150+ :loop
151+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
152+ t loop
153+ s/-\n.*//
154+ ' >$as_me.lineno &&
155+ chmod +x "$as_me.lineno" ||
156+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
157+
158+ # Don't try to exec as it changes $[0], causing all sort of problems
159+ # (the dirname of $[0] is not the place where we might find the
160+ # original and so on. Autoconf is especially sensitive to this).
161+ . "./$as_me.lineno"
162+ # Exit status is that of the last command.
163+ exit
164+}
165 # This file is generated from configure.in by Autoconf. DO NOT EDIT!
166 # Local configure fragment for sysdeps/arm.
167
168@@ -31,3 +128,170 @@
169 $as_echo "$as_me: error: need .cfi_sections in this configuration" >&2;}
170 { (exit 1); exit 1; }; }
171 fi
172+
173+# We check to see if the compiler and flags are
174+# selecting the hard-float ABI and if they are then
175+# we set libc_cv_arm_pcs_vfp to yes which causes
176+# HAVE_ARM_PCS_VFP to be defined in config.h and
177+# in include/libc-symbols.h and thus available to
178+# shlib-versions to select the appropriate name for
179+# the dynamic linker via %ifdef.
180+
181+
182+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
183+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
184+if ${ac_cv_path_GREP+:} false; then :
185+ $as_echo_n "(cached) " >&6
186+else
187+ if test -z "$GREP"; then
188+ ac_path_GREP_found=false
189+ # Loop through the user's path and test for each of PROGNAME-LIST
190+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
191+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
192+do
193+ IFS=$as_save_IFS
194+ test -z "$as_dir" && as_dir=.
195+ for ac_prog in grep ggrep; do
196+ for ac_exec_ext in '' $ac_executable_extensions; do
197+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
198+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
199+# Check for GNU ac_path_GREP and select it if it is found.
200+ # Check for GNU $ac_path_GREP
201+case `"$ac_path_GREP" --version 2>&1` in
202+*GNU*)
203+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
204+*)
205+ ac_count=0
206+ $as_echo_n 0123456789 >"conftest.in"
207+ while :
208+ do
209+ cat "conftest.in" "conftest.in" >"conftest.tmp"
210+ mv "conftest.tmp" "conftest.in"
211+ cp "conftest.in" "conftest.nl"
212+ $as_echo 'GREP' >> "conftest.nl"
213+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
214+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
215+ as_fn_arith $ac_count + 1 && ac_count=$as_val
216+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
217+ # Best one so far, save it but keep looking for a better one
218+ ac_cv_path_GREP="$ac_path_GREP"
219+ ac_path_GREP_max=$ac_count
220+ fi
221+ # 10*(2^10) chars as input seems more than enough
222+ test $ac_count -gt 10 && break
223+ done
224+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
225+esac
226+
227+ $ac_path_GREP_found && break 3
228+ done
229+ done
230+ done
231+IFS=$as_save_IFS
232+ if test -z "$ac_cv_path_GREP"; then
233+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
234+ fi
235+else
236+ ac_cv_path_GREP=$GREP
237+fi
238+
239+fi
240+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
241+$as_echo "$ac_cv_path_GREP" >&6; }
242+ GREP="$ac_cv_path_GREP"
243+
244+
245+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
246+$as_echo_n "checking for egrep... " >&6; }
247+if ${ac_cv_path_EGREP+:} false; then :
248+ $as_echo_n "(cached) " >&6
249+else
250+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
251+ then ac_cv_path_EGREP="$GREP -E"
252+ else
253+ if test -z "$EGREP"; then
254+ ac_path_EGREP_found=false
255+ # Loop through the user's path and test for each of PROGNAME-LIST
256+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
257+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
258+do
259+ IFS=$as_save_IFS
260+ test -z "$as_dir" && as_dir=.
261+ for ac_prog in egrep; do
262+ for ac_exec_ext in '' $ac_executable_extensions; do
263+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
264+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
265+# Check for GNU ac_path_EGREP and select it if it is found.
266+ # Check for GNU $ac_path_EGREP
267+case `"$ac_path_EGREP" --version 2>&1` in
268+*GNU*)
269+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
270+*)
271+ ac_count=0
272+ $as_echo_n 0123456789 >"conftest.in"
273+ while :
274+ do
275+ cat "conftest.in" "conftest.in" >"conftest.tmp"
276+ mv "conftest.tmp" "conftest.in"
277+ cp "conftest.in" "conftest.nl"
278+ $as_echo 'EGREP' >> "conftest.nl"
279+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
280+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
281+ as_fn_arith $ac_count + 1 && ac_count=$as_val
282+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
283+ # Best one so far, save it but keep looking for a better one
284+ ac_cv_path_EGREP="$ac_path_EGREP"
285+ ac_path_EGREP_max=$ac_count
286+ fi
287+ # 10*(2^10) chars as input seems more than enough
288+ test $ac_count -gt 10 && break
289+ done
290+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
291+esac
292+
293+ $ac_path_EGREP_found && break 3
294+ done
295+ done
296+ done
297+IFS=$as_save_IFS
298+ if test -z "$ac_cv_path_EGREP"; then
299+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
300+ fi
301+else
302+ ac_cv_path_EGREP=$EGREP
303+fi
304+
305+ fi
306+fi
307+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
308+$as_echo "$ac_cv_path_EGREP" >&6; }
309+ EGREP="$ac_cv_path_EGREP"
310+
311+
312+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the ARM hard-float ABI" >&5
313+$as_echo_n "checking whether the compiler is using the ARM hard-float ABI... " >&6; }
314+if ${libc_cv_arm_pcs_vfp+:} false; then :
315+ $as_echo_n "(cached) " >&6
316+else
317+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
318+/* end confdefs.h. */
319+#ifdef __ARM_PCS_VFP
320+ yes
321+ #endif
322+
323+_ACEOF
324+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
325+ $EGREP "yes" >/dev/null 2>&1; then :
326+ libc_cv_arm_pcs_vfp=yes
327+else
328+ libc_cv_arm_pcs_vfp=no
329+fi
330+rm -f conftest*
331+
332+fi
333+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_pcs_vfp" >&5
334+$as_echo "$libc_cv_arm_pcs_vfp" >&6; }
335+if test $libc_cv_arm_pcs_vfp = yes; then
336+ $as_echo "#define HAVE_ARM_PCS_VFP 1" >>confdefs.h
337+
338+fi
diff --git a/meta/recipes-core/eglibc/eglibc_2.15.bb b/meta/recipes-core/eglibc/eglibc_2.15.bb
index fa92670e6a..6dd846f7f7 100644
--- a/meta/recipes-core/eglibc/eglibc_2.15.bb
+++ b/meta/recipes-core/eglibc/eglibc_2.15.bb
@@ -3,7 +3,7 @@ require eglibc.inc
3SRCREV = "17386" 3SRCREV = "17386"
4 4
5DEPENDS += "gperf-native" 5DEPENDS += "gperf-native"
6PR = "r10" 6PR = "r11"
7PR_append = "+svnr${SRCPV}" 7PR_append = "+svnr${SRCPV}"
8 8
9EGLIBC_BRANCH="eglibc-2_15" 9EGLIBC_BRANCH="eglibc-2_15"
@@ -25,6 +25,8 @@ SRC_URI = "svn://www.eglibc.org/svn/branches/;module=${EGLIBC_BRANCH};proto=http
25 file://initgroups_keys.patch \ 25 file://initgroups_keys.patch \
26 file://use-localstatedir-for-vardbdir.patch \ 26 file://use-localstatedir-for-vardbdir.patch \
27 file://eglibc_fix_findidx_parameters.patch \ 27 file://eglibc_fix_findidx_parameters.patch \
28 file://add_HAVE_ARM_PCS_VFP.patch \
29 file://ldso_arm_hf_support.patch \
28 " 30 "
29LIC_FILES_CHKSUM = "file://LICENSES;md5=98a1128c4b58120182cbea3b1752d8b9 \ 31LIC_FILES_CHKSUM = "file://LICENSES;md5=98a1128c4b58120182cbea3b1752d8b9 \
30 file://COPYING;md5=393a5ca445f6965873eca0259a17f833 \ 32 file://COPYING;md5=393a5ca445f6965873eca0259a17f833 \