summaryrefslogtreecommitdiffstats
path: root/media-plugins/xmms-flac/files/flac-1.2.1-asm.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media-plugins/xmms-flac/files/flac-1.2.1-asm.patch')
-rw-r--r--media-plugins/xmms-flac/files/flac-1.2.1-asm.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/media-plugins/xmms-flac/files/flac-1.2.1-asm.patch b/media-plugins/xmms-flac/files/flac-1.2.1-asm.patch
new file mode 100644
index 0000000..cc832ee
--- /dev/null
+++ b/media-plugins/xmms-flac/files/flac-1.2.1-asm.patch
@@ -0,0 +1,80 @@
+diff -urp flac-1.2.1-old/src/libFLAC/ia32/bitreader_asm.nasm flac-1.2.1/src/libFLAC/ia32/bitreader_asm.nasm
+--- flac-1.2.1-old/src/libFLAC/ia32/bitreader_asm.nasm 2007-03-30 02:54:53.000000000 +0200
++++ flac-1.2.1/src/libFLAC/ia32/bitreader_asm.nasm 2007-09-27 21:39:45.000000000 +0200
+@@ -140,8 +140,13 @@ cident FLAC__bitreader_read_rice_signed_
+ %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_
+ %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
+@@ -315,8 +325,13 @@ cident FLAC__bitreader_read_rice_signed_
+ %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;
+@@ -362,13 +377,20 @@ cident FLAC__bitreader_read_rice_signed_
+ 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;
+@@ -437,8 +459,13 @@ cident FLAC__bitreader_read_rice_signed_
+ %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