On 2016-11-18 23:47:21 +0200, Martin Storsjö wrote:
> On Fri, 18 Nov 2016, Janne Grunau wrote:
> 
> >
> >This catches errors manifesting only on position independent ELF builds
> >on all configurations. This still can be fooled by using register
> >aliases or the special name 'ip' for r12.
> >---
> >libavutil/arm/asm.S | 20 +++++++++++++++++++-
> >1 file changed, 19 insertions(+), 1 deletion(-)
> >
> >diff --git a/libavutil/arm/asm.S b/libavutil/arm/asm.S
> >index 4ac0ea2..e2fe463 100644
> >--- a/libavutil/arm/asm.S
> >+++ b/libavutil/arm/asm.S
> >@@ -184,6 +184,25 @@ T       ldr             \rd, [\rd]
> >.endm
> >
> >.macro  movrelx         rd,  val, gp
> >+    .ifc \rd,\gp
> >+        .error      "movrelx needs two distinct registers"
> >+    .endif
> >+    .ifc \rd_\gp,r12_
> 
> This needs \() inbetween \rd and _\gp

Yes, but it does work here as intended. Strange.

> 
> >+      .ifn .Lpic_gp
> >+        .error      "movrelx rd=r12, needs a manually set gp"
> >+      .elseif .Lpic_gp == 12
> >+        .error      "movrelx rd=r12, needs a manually set gp"
> >+      .endif
> >+    .endif
> >+    .ifnb \gp
> >+      .ifc \gp,r12
> >+        .set            .Lpic_gp, 12
> >+      .else
> >+        .set            .Lpic_gp, 1
> >+      .endif
> >+    .elseif !.Lpic_gp
> >+        .set            .Lpic_gp, 12
> >+    .endif
> 
> Setting .Lpic_gp here will cause the CONFIG_PIC segment below to try to
> .unreq gp. I think it works if you move this block for setting .Lpic_gp to
> the end of the macro.

yes, the another problem is that it won't register the r12/gp alias 

> Then we also need to add #if CONFIG_PIC && defined(__ELF__) around the
> .unreq in endfunc.

yes, although gas doesn't complain about unregistering an unregistered 
alias

> With all those changes in place, I think it works as intended... It's 
> pretty big and intrusive though.

I wonder if it would be better to just warn if rd=r12 and gp is blank 
and only error if rd and gp are equal.

That's simple enough not to get wrong and still catches most problems.  
And movrelx is not used that often that it makes sense to try to catch 
every wrong use with complex .if statements in the macro.

Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to