Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame^] | 1 | From e1dc85af1800afa4fbf4eb5a59cc41025495af57 Mon Sep 17 00:00:00 2001 |
| 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Fri, 3 Aug 2018 09:55:12 -0700 |
| 4 | Subject: [PATCH] nativesdk-glibc: Make relocatable install for locales |
| 5 | |
| 6 | The glibc locale path is hard-coded to the install prefix, but in SDKs we need |
| 7 | to be able to relocate the binaries. Expand the strings to 4K and put them in a |
| 8 | magic segment that we can relocate at install time. |
| 9 | |
| 10 | Upstream-Status: Inappropriate (OE-specific) |
| 11 | |
| 12 | Signed-off-by: Ross Burton <ross.burton@intel.com> |
| 13 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 14 | --- |
| 15 | locale/findlocale.c | 4 ++-- |
| 16 | locale/loadarchive.c | 2 +- |
| 17 | locale/localeinfo.h | 2 +- |
| 18 | 3 files changed, 4 insertions(+), 4 deletions(-) |
| 19 | |
| 20 | diff --git a/locale/findlocale.c b/locale/findlocale.c |
| 21 | index 872cadb5b9..dd651e07f5 100644 |
| 22 | --- a/locale/findlocale.c |
| 23 | +++ b/locale/findlocale.c |
| 24 | @@ -56,7 +56,7 @@ struct __locale_data *const _nl_C[] attribute_hidden = |
| 25 | which are somehow addressed. */ |
| 26 | struct loaded_l10nfile *_nl_locale_file_list[__LC_LAST]; |
| 27 | |
| 28 | -const char _nl_default_locale_path[] attribute_hidden = COMPLOCALEDIR; |
| 29 | +char _nl_default_locale_path[4096] attribute_hidden __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR; |
| 30 | |
| 31 | /* Checks if the name is actually present, that is, not NULL and not |
| 32 | empty. */ |
| 33 | @@ -167,7 +167,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len, |
| 34 | |
| 35 | /* Nothing in the archive. Set the default path to search below. */ |
| 36 | locale_path = _nl_default_locale_path; |
| 37 | - locale_path_len = sizeof _nl_default_locale_path; |
| 38 | + locale_path_len = strlen(locale_path) + 1; |
| 39 | } |
| 40 | else |
| 41 | /* We really have to load some data. First see whether the name is |
| 42 | diff --git a/locale/loadarchive.c b/locale/loadarchive.c |
| 43 | index 516d30d8d1..9bfbe1a5dd 100644 |
| 44 | --- a/locale/loadarchive.c |
| 45 | +++ b/locale/loadarchive.c |
| 46 | @@ -42,7 +42,7 @@ |
| 47 | |
| 48 | |
| 49 | /* Name of the locale archive file. */ |
| 50 | -static const char archfname[] = COMPLOCALEDIR "/locale-archive"; |
| 51 | +static const char archfname[4096] __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR "/locale-archive"; |
| 52 | |
| 53 | /* Size of initial mapping window, optimal if large enough to |
| 54 | cover the header plus the initial locale. */ |
| 55 | diff --git a/locale/localeinfo.h b/locale/localeinfo.h |
| 56 | index 68822a6319..537bc35149 100644 |
| 57 | --- a/locale/localeinfo.h |
| 58 | +++ b/locale/localeinfo.h |
| 59 | @@ -325,7 +325,7 @@ _nl_lookup_word (locale_t l, int category, int item) |
| 60 | } |
| 61 | |
| 62 | /* Default search path if no LOCPATH environment variable. */ |
| 63 | -extern const char _nl_default_locale_path[] attribute_hidden; |
| 64 | +extern char _nl_default_locale_path[4096] attribute_hidden; |
| 65 | |
| 66 | /* Load the locale data for CATEGORY from the file specified by *NAME. |
| 67 | If *NAME is "", use environment variables as specified by POSIX, and |