This is the mail archive of the libffi-discuss@sourceware.org mailing list for the libffi project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

return value buffer malloc()'ed vs alloca()'ed


Hello,

I've been trying to investigate valgrind warnings for a while and found
an undocumented feature, please let me know if it is well-known.

What I did.

I modified a code given in Â2.2 Simple Example so that return value
(rc), originally declared as (int), became an (int *)malloc(sizeof(int))
so that it is resident in heap since that. Of cource, (&rc) replaced
with (rc) later in the code.

What I get.

valgrind complaints about ÂInvalid write of size 8Â while ÂAddress
0x55ec040 is 0 bytes inside a block of size 4 alloc'dÂ, it is exactly
that allocated (rc) buffer.

Notes.

Allocating buffer for the return value using alloca() does the trick and
makes valgrind silent.

Further.

I looked at x86/unix64.S, it is exactly the line:
movq	%rax, (%rdi)
that causes the valgrind's warning (at .Lst_uint32)

That is my question: is it necessary to allocate a buffer for the return
value with alloca() and never with malloc()?

-- 
Sincerely yours,

Igor Bogomazov


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]