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) (From OE-Core rev: 839479f63a6b927606742b15000d55b1223cb3af) Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
0562b462d4
commit
3c22a6c998
|
@ -0,0 +1,55 @@
|
|||
The glibc locale path is hard-coded to the install prefix, but in SDKs we need
|
||||
to be able to relocate the binaries. Expand the strings to 4K and put them in a
|
||||
magic segment that we can relocate at install time.
|
||||
|
||||
Upstream-Status: Inappropriate (OE-specific)
|
||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
||||
|
||||
diff --git a/locale/findlocale.c b/locale/findlocale.c
|
||||
index 872cadb5..da14fa39 100644
|
||||
--- a/locale/findlocale.c
|
||||
+++ b/locale/findlocale.c
|
||||
@@ -56,7 +56,7 @@ struct __locale_data *const _nl_C[] attribute_hidden =
|
||||
which are somehow addressed. */
|
||||
struct loaded_l10nfile *_nl_locale_file_list[__LC_LAST];
|
||||
|
||||
-const char _nl_default_locale_path[] attribute_hidden = COMPLOCALEDIR;
|
||||
+char _nl_default_locale_path[4096] attribute_hidden __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR;
|
||||
|
||||
/* Checks if the name is actually present, that is, not NULL and not
|
||||
empty. */
|
||||
@@ -167,7 +167,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
|
||||
|
||||
/* Nothing in the archive. Set the default path to search below. */
|
||||
locale_path = _nl_default_locale_path;
|
||||
- locale_path_len = sizeof _nl_default_locale_path;
|
||||
+ locale_path_len = strlen(locale_path) + 1;
|
||||
}
|
||||
else
|
||||
/* We really have to load some data. First see whether the name is
|
||||
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
|
||||
index 68822a63..537bc351 100644
|
||||
--- a/locale/localeinfo.h
|
||||
+++ b/locale/localeinfo.h
|
||||
@@ -325,7 +325,7 @@ _nl_lookup_word (locale_t l, int category, int item)
|
||||
}
|
||||
|
||||
/* Default search path if no LOCPATH environment variable. */
|
||||
-extern const char _nl_default_locale_path[] attribute_hidden;
|
||||
+extern char _nl_default_locale_path[4096] attribute_hidden;
|
||||
|
||||
/* Load the locale data for CATEGORY from the file specified by *NAME.
|
||||
If *NAME is "", use environment variables as specified by POSIX, and
|
||||
diff --git a/locale/loadarchive.c b/locale/loadarchive.c
|
||||
index 516d30d8..792b37fb 100644
|
||||
--- a/locale/loadarchive.c
|
||||
+++ b/locale/loadarchive.c
|
||||
@@ -42,7 +43,7 @@
|
||||
|
||||
|
||||
/* Name of the locale archive file. */
|
||||
-static const char archfname[] = COMPLOCALEDIR "/locale-archive";
|
||||
+static const char archfname[4096] __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR "/locale-archive";
|
||||
|
||||
/* Size of initial mapping window, optimal if large enough to
|
||||
cover the header plus the initial locale. */
|
|
@ -51,6 +51,7 @@ NATIVESDKFIXES_class-nativesdk = "\
|
|||
file://0002-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \
|
||||
file://0003-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \
|
||||
file://0004-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \
|
||||
file://relocate-locales.patch \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
|
Loading…
Reference in New Issue