diff options
author | Ross Burton <ross.burton@intel.com> | 2018-03-01 18:26:27 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-03-01 22:18:47 +0000 |
commit | d402a2a07162d94a107b89966844750803b37d6a (patch) | |
tree | ad892c6a49e4204e88c0f9d45b0ca20cf346ae98 | |
parent | 51b681cb3d7e99fc33e70651563dbda48b4e3034 (diff) | |
download | poky-d402a2a07162d94a107b89966844750803b37d6a.tar.gz |
glibc: relocate locale paths in nativesdk
nativesdk is built with a specific prefix but this will be different at install
time, however glibc hard-codes the path to locale files. Expand these strings to 4K and move them to a magic segment which we can relocate when the SDK is installed.
(From OE-Core rev: 59e0679378aac27c4fea0b06721e0a184a93c100)
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/recipes-core/glibc/glibc/relocate-locales.patch | 55 | ||||
-rw-r--r-- | meta/recipes-core/glibc/glibc_2.27.bb | 1 |
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 @@ | |||
1 | The glibc locale path is hard-coded to the install prefix, but in SDKs we need | ||
2 | to be able to relocate the binaries. Expand the strings to 4K and put them in a | ||
3 | magic segment that we can relocate at install time. | ||
4 | |||
5 | Upstream-Status: Inappropriate (OE-specific) | ||
6 | Signed-off-by: Ross Burton <ross.burton@intel.com> | ||
7 | |||
8 | diff --git a/locale/findlocale.c b/locale/findlocale.c | ||
9 | index 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 | ||
30 | diff --git a/locale/localeinfo.h b/locale/localeinfo.h | ||
31 | index 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 | ||
43 | diff --git a/locale/loadarchive.c b/locale/loadarchive.c | ||
44 | index 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.27.bb b/meta/recipes-core/glibc/glibc_2.27.bb index b6b6625022..2434c06105 100644 --- a/meta/recipes-core/glibc/glibc_2.27.bb +++ b/meta/recipes-core/glibc/glibc_2.27.bb | |||
@@ -50,6 +50,7 @@ NATIVESDKFIXES_class-nativesdk = "\ | |||
50 | file://0002-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \ | 50 | file://0002-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \ |
51 | file://0003-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \ | 51 | file://0003-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \ |
52 | file://0004-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \ | 52 | file://0004-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \ |
53 | file://relocate-locales.patch \ | ||
53 | " | 54 | " |
54 | 55 | ||
55 | S = "${WORKDIR}/git" | 56 | S = "${WORKDIR}/git" |