[Ffmpeg-devel] [PATCH] avoid useless memcpy with src==dst (valgrind complains)

Reimar Döffinger Reimar.Doeffinger
Sun Jul 23 17:35:59 CEST 2006


Hello,
On Sun, Jul 23, 2006 at 02:24:17PM -0000, Wolfram Gloger wrote:
> > Though for src == dst I doubt any memcpy function will break
> > stuff. And for the overlapping case when src != dst does the C standard
> > specify the behaviour?
> 
> Using memcpy() on overlapping objects is undefined behaviour
> (7.21.2.1#2).

Which part were you replying to? If to the first: memcpy may strictly
speaking have undefined behaviour for src == dst, but I very much doubt
it has in reality.
If to the second part: I meant if you have two "struct something"
pointers a and b, is the behaviour of *a = *b defined when the areas for
*a and *b overlap?

> > Anyway, this is not really what interests me, I'd prefer to know that
> > even if it is a compiler bug, may I apply the patch or do you prefer if
> > I don't?
> 
> Patch looks fine to me anyway, but I think it should be investigated
> how on earth memcpy() is generated here.

objdump -S on utils.o gives me:
[...]
    temp= *buf;
     18a:       ba 58 00 00 00          mov    $0x58,%edx
     18f:       48 89 ee                mov    %rbp,%rsi
     192:       48 89 e7                mov    %rsp,%rdi
     195:       e8 00 00 00 00          callq  19a <avcodec_default_release_buffer+0x7a>
    *buf= *last;
     19a:       ba 58 00 00 00          mov    $0x58,%edx
     19f:       4c 89 e6                mov    %r12,%rsi
[...]

so there definitly is some placeholder for some call...

And looking at the MPlayer binary (haven't checked if it's the same when
compiling ffmpeg I admit) there is:
[...]
    temp= *buf;
  5d081a:       ba 58 00 00 00          mov    $0x58,%edx
  5d081f:       48 89 ee                mov    %rbp,%rsi
  5d0822:       48 89 e7                mov    %rsp,%rdi
  5d0825:       e8 86 c1 e4 ff          callq  41c9b0 <memcpy at plt>
    *buf= *last;
  5d082a:       ba 58 00 00 00          mov    $0x58,%edx
  5d082f:       4c 89 e6                mov    %r12,%rsi
[...]

using
gcc version 4.1.1 (Gentoo 4.1.1)
on AMD64 here.

Greetings,
Reimar D?ffinger




More information about the ffmpeg-devel mailing list