flac: fix text relocations

The recent sanity checks were flagging:

 ELF binary '.../libFLAC.so.8.2.0' has relocations in .text

This is caused by hand-written assembler being invoked badly.  Apply a patch
from upstream git that uses PIC instead of relocations.

[ YOCTO: #3461 ]

(From OE-Core rev: 9b5660ee0e507852a02ba5281b571f3e55dffc18)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton 2012-11-19 11:22:14 +00:00 committed by Richard Purdie
parent 264ca0fdbe
commit 6e6dcbe340
2 changed files with 102 additions and 2 deletions

View File

@ -0,0 +1,99 @@
Upstream-Status: Backport
Signed-off-by: Ross Burton <ross.burton@intel.com>
From 12022d90dd3adc9f37dc2b16358cbecfe3c5be1c Mon Sep 17 00:00:00 2001
From: Samuli Suominen <drac@gentoo.org>
Date: Sun, 15 Jul 2012 15:45:10 +1000
Subject: [PATCH] Fix assembler code to make it PIC so the dynamic linker does
not have to do text relocations on-the-fly. Patch from Gentoo
via Jaren Stangret <sirjaren@gmail.com>
Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
---
src/libFLAC/ia32/bitreader_asm.nasm | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/src/libFLAC/ia32/bitreader_asm.nasm b/src/libFLAC/ia32/bitreader_asm.nasm
index c6bb8c2..4cd0ea2 100644
--- a/src/libFLAC/ia32/bitreader_asm.nasm
+++ b/src/libFLAC/ia32/bitreader_asm.nasm
@@ -140,8 +140,13 @@ cident FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
mov edi, _FLAC__crc16_table
%else
+%ifdef OBJ_FORMAT_elf
+ mov edi, [esp + 16] ; saved ebx (GOT base)
+ lea edi, [edi + FLAC__crc16_table wrt ..gotoff]
+%else
mov edi, FLAC__crc16_table
%endif
+%endif
;; eax (ax) crc a.k.a. br->read_crc
;; ebx (bl) intermediate result index into FLAC__crc16_table[]
;; ecx br->crc16_align
@@ -216,8 +221,13 @@ cident FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
mov edi, _FLAC__crc16_table
%else
+%ifdef OBJ_FORMAT_elf
+ mov edi, [esp + 16] ; saved ebx (GOT base)
+ lea edi, [edi + FLAC__crc16_table wrt ..gotoff]
+%else
mov edi, FLAC__crc16_table
%endif
+%endif
;; eax (ax) crc a.k.a. br->read_crc
;; ebx (bl) intermediate result index into FLAC__crc16_table[]
;; ecx br->crc16_align
@@ -316,8 +326,13 @@ cident FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
call _bitreader_read_from_client_
%else
+%ifdef OBJ_FORMAT_elf
+ mov ebx, [esp + 20] ; saved ebx (GOT base)
+ call bitreader_read_from_client_ wrt ..plt
+%else
call bitreader_read_from_client_
%endif
+%endif
pop edx ; /* discard, unused */
pop ecx ; /* restore */
mov esi, [ebp + 16] ; cwords = br->consumed_words;
@@ -363,13 +378,20 @@ cident FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap
mov [ebp + 16], esi ; br->consumed_words = cwords;
mov [ebp + 20], ecx ; br->consumed_bits = cbits;
push ecx ; /* save */
+ push ebx ; /* save */
push ebp ; /* push br argument */
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
call _bitreader_read_from_client_
%else
+%ifdef OBJ_FORMAT_elf
+ mov ebx, [esp + 24] ; saved ebx (GOT base)
+ call bitreader_read_from_client_ wrt ..plt
+%else
call bitreader_read_from_client_
%endif
+%endif
pop edx ; /* discard, unused */
+ pop ebx ; /* restore */
pop ecx ; /* restore */
mov esi, [ebp + 16] ; cwords = br->consumed_words;
; ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits;
@@ -438,8 +460,13 @@ cident FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
mov edi, _FLAC__crc16_table
%else
+%ifdef OBJ_FORMAT_elf
+ mov edi, [esp + 24] ; saved ebx (GOT base)
+ lea edi, [edi + FLAC__crc16_table wrt ..gotoff]
+%else
mov edi, FLAC__crc16_table
%endif
+%endif
;; eax (ax) crc a.k.a. br->read_crc
;; ebx (bl) intermediate result index into FLAC__crc16_table[]
;; ecx br->crc16_align
--
1.7.2.5

View File

@ -14,13 +14,14 @@ LIC_FILES_CHKSUM = "file://COPYING.FDL;md5=ad1419ecc56e060eccf8184a87c4285f \
file://include/FLAC/all.h;beginline=64;endline=69;md5=64474f2b22e9e77b28d8b8b25c983a48"
DEPENDS = "libogg"
PR = "r2"
PR = "r3"
SRC_URI = "${SOURCEFORGE_MIRROR}/flac/flac-${PV}.tar.gz \
file://disable-xmms-plugin.patch \
file://flac-gcc43-fixes.patch \
file://xmms.m4 \
file://0001-No-AltiVec-on-SPE.patch"
file://0001-No-AltiVec-on-SPE.patch \
file://asm-pic.patch"
SRC_URI[md5sum] = "153c8b15a54da428d1f0fadc756c22c7"
SRC_URI[sha256sum] = "9635a44bceb478bbf2ee8a785cf6986fba525afb5fad1fd4bba73cf71f2d3edf"