summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/recipes-core/glibc/glibc/relocate-locales.patch55
-rw-r--r--meta/recipes-core/glibc/glibc_2.25.bb1
2 files changed, 56 insertions, 0 deletions
diff --git a/meta/recipes-core/glibc/glibc/relocate-locales.patch b/meta/recipes-core/glibc/glibc/relocate-locales.patch
new file mode 100644
index 0000000000..2aea37f5ca
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/relocate-locales.patch
@@ -0,0 +1,55 @@
1The glibc locale path is hard-coded to the install prefix, but in SDKs we need
2to be able to relocate the binaries. Expand the strings to 4K and put them in a
3magic segment that we can relocate at install time.
4
5Upstream-Status: Inappropriate (OE-specific)
6Signed-off-by: Ross Burton <ross.burton@intel.com>
7
8diff --git a/locale/findlocale.c b/locale/findlocale.c
9index 872cadb5..da14fa39 100644
10--- a/locale/findlocale.c
11+++ b/locale/findlocale.c
12@@ -56,7 +56,7 @@ struct __locale_data *const _nl_C[] attribute_hidden =
13 which are somehow addressed. */
14 struct loaded_l10nfile *_nl_locale_file_list[__LC_LAST];
15
16-const char _nl_default_locale_path[] attribute_hidden = COMPLOCALEDIR;
17+char _nl_default_locale_path[4096] attribute_hidden __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR;
18
19 /* Checks if the name is actually present, that is, not NULL and not
20 empty. */
21@@ -167,7 +167,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
22
23 /* Nothing in the archive. Set the default path to search below. */
24 locale_path = _nl_default_locale_path;
25- locale_path_len = sizeof _nl_default_locale_path;
26+ locale_path_len = strlen(locale_path) + 1;
27 }
28 else
29 /* We really have to load some data. First see whether the name is
30diff --git a/locale/localeinfo.h b/locale/localeinfo.h
31index 68822a63..537bc351 100644
32--- a/locale/localeinfo.h
33+++ b/locale/localeinfo.h
34@@ -325,7 +325,7 @@ _nl_lookup_word (locale_t l, int category, int item)
35 }
36
37 /* Default search path if no LOCPATH environment variable. */
38-extern const char _nl_default_locale_path[] attribute_hidden;
39+extern char _nl_default_locale_path[4096] attribute_hidden;
40
41 /* Load the locale data for CATEGORY from the file specified by *NAME.
42 If *NAME is "", use environment variables as specified by POSIX, and
43diff --git a/locale/loadarchive.c b/locale/loadarchive.c
44index 516d30d8..792b37fb 100644
45--- a/locale/loadarchive.c
46+++ b/locale/loadarchive.c
47@@ -42,7 +43,7 @@
48
49
50 /* Name of the locale archive file. */
51-static const char archfname[] = COMPLOCALEDIR "/locale-archive";
52+static const char archfname[4096] __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR "/locale-archive";
53
54 /* Size of initial mapping window, optimal if large enough to
55 cover the header plus the initial locale. */
diff --git a/meta/recipes-core/glibc/glibc_2.25.bb b/meta/recipes-core/glibc/glibc_2.25.bb
index 316ba1fce8..58b90b7b90 100644
--- a/meta/recipes-core/glibc/glibc_2.25.bb
+++ b/meta/recipes-core/glibc/glibc_2.25.bb
@@ -51,6 +51,7 @@ NATIVESDKFIXES_class-nativesdk = "\
51 file://0002-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \ 51 file://0002-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \
52 file://0003-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \ 52 file://0003-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \
53 file://0004-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \ 53 file://0004-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \
54 file://relocate-locales.patch \
54" 55"
55 56
56S = "${WORKDIR}/git" 57S = "${WORKDIR}/git"