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
