diff --git a/libavcodec/ppc/asm.S b/libavcodec/ppc/asm.S
index bbbf8a4a66ffcfbf4fdaf62091e463769e990089..b57de2eba0136b3df40ca447c843ced638715d60 100644
--- a/libavcodec/ppc/asm.S
+++ b/libavcodec/ppc/asm.S
@@ -36,12 +36,20 @@
 
 .macro extfunc name
     .global X(\name)
+#if _CALL_ELF == 2
+    .text
+X(\name):
+    addis %r2,%r12,.TOC.-X(\name)@ha
+    addi %r2,%r2,.TOC.-X(\name)@l
+//    .localentry \name,-X(\name)
+#else
     .section .opd, "aw"
 X(\name):
     .quad L(\name), .TOC.@tocbase, 0
     .previous
     .type X(\name), STT_FUNC
 L(\name):
+#endif
 .endm
 
 .macro movrel rd, sym, gp