This is the mail archive of the
libffi-discuss@sourceware.org
mailing list for the libffi project.
return value buffer malloc()'ed vs alloca()'ed
- From: Igor Bogomazov <ygrex at ygrex dot ru>
- To: libffi-discuss at sourceware dot org
- Date: Tue, 8 Oct 2013 10:13:54 -0700
- Subject: return value buffer malloc()'ed vs alloca()'ed
- Authentication-results: sourceware.org; auth=none
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