100 lines
3.4 KiB
Diff
100 lines
3.4 KiB
Diff
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
|
|
|