Hi,

I found an issue when linking against the ffmpeg libavcodec.a static libary on 
armhf which can probably consider to be a bug.

Summary of the bug:
When I try to build a shared library in which I include libavcodec.a I receive 
the following linker error (on ARM plattform - banana pi board).
Affected versions of ffmpeg are at least 2.5.3 and git-master, affected 
plattform is armhf (linux).

Error message from linker:

/home/hpt/ffmpeg/arm_gcc/2.5.3/lib/static/libavcodec.a(videodsp_armv5te.o): In 
function `ff_prefetch_arm':
/root/build_ffmpeg/ffmpeg/libavcodec/arm/videodsp_armv5te.S:29:(.text+0x8): 
relocation truncated to fit: R_ARM_THM_JUMP19 against symbol `ff_prefetch_arm' 
defined in .text section in 
/home/hpt/ffmpeg/arm_gcc/2.5.3/lib/static/libavcodec.a(videodsp_armv5te.o)
collect2: ld returned 1 exit status

How to reproduce:
Use the attached cpp file to build a shared object library on arm.

When I try to create the shared object library I get the linker error from 
above. I used the following command to create the shared object library:

% g++ -shared -D__STDC_CONSTANT_MACROS -o test.so 
-I/home/hpt/ffmpeg/arm_gcc/2.5.3/include/ 
sample_cpp_file_for_bug_reproduction.cpp 
/home/hpt/ffmpeg/arm_gcc/2.5.3/lib/static/libavcodec.a

There seems to be some problem in the libavcodec/arm/videodsp_armv5te.S 
assembler file. In that file the label 'ff_prefetch_arm' (line 25) is exported 
and further down used by a conditional near jump (line 29). The near jump 
cannot be done if the label is exported within a shared object library. That's 
at least the explanation I found for myself.

I used the attached (untested) patch to fix the linker error from above. As far 
as I can see this patch should fix the problem without any side effects. At 
least it fixes theĀ  linker error I get.

Andreas
extern "C"
{
#include <libavformat/avformat.h>
}


void doSomeThing()
{
	av_register_all();
	avcodec_register_all();
}
From 435f3b61ec0e181810bd7794ba8a88e80209c5fd Mon Sep 17 00:00:00 2001
From: anhaupt <anha...@yahoo.com>
Date: Thu, 12 Feb 2015 11:26:14 +0100
Subject: [PATCH] fixes the linker error produced when using libavcodec.a
 within a shared object library

---
 libavcodec/arm/videodsp_armv5te.S | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/libavcodec/arm/videodsp_armv5te.S b/libavcodec/arm/videodsp_armv5te.S
index 55bcce5..b1763ab 100644
--- a/libavcodec/arm/videodsp_armv5te.S
+++ b/libavcodec/arm/videodsp_armv5te.S
@@ -26,6 +26,8 @@ function ff_prefetch_arm, export=1
         subs            r2,  r2,  #1
         pld             [r0]
         add             r0,  r0,  r1
-        bne             X(ff_prefetch_arm)
+        beq             1f
+        b               X(ff_prefetch_arm)
+1:
         bx              lr
 endfunc
-- 
1.9.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to