diff options
author | Khem Raj <raj.khem@gmail.com> | 2014-08-28 06:00:54 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-09-01 18:00:31 +0100 |
commit | 1027c535ea753e63d9ffe469a423e04467cf8940 (patch) | |
tree | cae4c0f7548f996a1f58d6a57806edfde475ff6e /meta/recipes-core/glibc/glibc/0001-R_ARM_TLS_DTPOFF32.patch | |
parent | 750b2a89af404dc7b275aa40fb693b07b9b297fe (diff) | |
download | openembedded-core-contrib-1027c535ea753e63d9ffe469a423e04467cf8940.tar.gz |
glibc: Migrate eglibc 2.19 -> glibc 2.20
- This is a big swoop change where we switch to using glibc
- option-groups are forward ported
- cross-localedef is extracted out from eglibc and hosted
at github.com/kraj/localedef, its used for cross-localedef
recipe
- Other non ported patches from eglibc are forward ported
ppc8xx cache line workaround
SH fpcr values
dynamic resolver
installing PIC archives is there but is not applied
libc header bootstrap
- Delete eglibc recipes we moved back to using glibc now
- Fix ppc/e500 build
- Fix crypt module build when options are used
- Fix fnmatch build when options OPTION_EGLIBC_LOCALE_CODE is unset
HAVE_MBSTATE_T and HAVE_MBSRTOWCS should be defined conditionally
based upon OPTION_EGLIBC_LOCALE_CODE being set/unset
- Move the ports/ patches to relevant files now that ports is gone
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta/recipes-core/glibc/glibc/0001-R_ARM_TLS_DTPOFF32.patch')
-rw-r--r-- | meta/recipes-core/glibc/glibc/0001-R_ARM_TLS_DTPOFF32.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/meta/recipes-core/glibc/glibc/0001-R_ARM_TLS_DTPOFF32.patch b/meta/recipes-core/glibc/glibc/0001-R_ARM_TLS_DTPOFF32.patch new file mode 100644 index 0000000000..3922cb818f --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0001-R_ARM_TLS_DTPOFF32.patch @@ -0,0 +1,56 @@ + +Quote from bug 1443 which explains what the patch does : + + We build some random program and link it with -lust. When we run it, + it dies with a SIGSEGV before reaching main(). + + Libust.so depends on liburcu-bp.so from the usermode-rcu package. + Although libust.so is not prelinked, liburcu-bp.so IS prelinked; this + is critical. + + Libust.so uses a TLS / __thread variable that is defined in liburcu- + bp.so. There are special ARM-specific relocation types that allow two + shared libraries to share thread-specific data. This is critical too. + + One more critical issue: although liburcu-bp.so is prelinked, we can't + load it at its prelinked address, because we also link against + librt.so, and librt.so uses that address. + + The dynamic linker is forced to relink liburcu-bp.so at a different + address. In the course of relinking, it processes the special ARM + relocation record mentioned above. The prelinker has already filled + in the information, which is a short offset into a table of thread- + specific data that is allocated per-thread for each library that uses + TLS. Because the normal behavior of a relocation is to add the symbol + value to an addend stored at the address being relocated, we end up + adding the short offset to itself, doubling it. + + Now we have an awkward situation. The libust.so library doesn't know + about the addend, so its TLS data for this element is correct. The + liburcu-bp.so library has a different offset for the element. When we + go to initialize the element for the first time in liburcu-bp.so, we + write the address of the result at the doubled (broken) offset. + Later, when we refer to the address from libust.so, we check the value + at the correct offset, but it's NULL, so we eat hot SIGSEGV. + +Upstream-Status: Pending + +Signed-off-by: Andrei Dinu <andrei.adrianx.dinu@intel.com> +--- + .../libc/ports/sysdeps/arm/dl-machine.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +ndex 8d905e8..dcfa71e 100644 +Index: git/sysdeps/arm/dl-machine.h +=================================================================== +--- git.orig/sysdeps/arm/dl-machine.h 2014-08-27 05:30:47.748070587 +0000 ++++ git/sysdeps/arm/dl-machine.h 2014-08-27 05:30:47.740070587 +0000 +@@ -495,7 +495,7 @@ + + case R_ARM_TLS_DTPOFF32: + if (sym != NULL) +- *reloc_addr += sym->st_value; ++ *reloc_addr = sym->st_value; + break; + + case R_ARM_TLS_TPOFF32: |