Re: valgrind aarch64 unitialized warnings

Alan Corey <[email protected]>
Newsgroups gmane.comp.debugging.valgrind
Message-ID <CAOh3dDZ4VKsgss66A1WP0KKRbzdx-HRRuik7MDSyVYrG3TC1Eg@mail.gmail.com>
Oh, fft_r[] and fft_l[] are similar memory areas from calloc which
hold the FFT output data once it's moved from the fft3w output array.
I pick left and right channels out of the PCM data and FFT them
individually, then plot them separately on the same frame image.

On 5/6/21, Alan Corey <[email protected]> wrote:
> This is under Debian Bullseye Linux on a PineBook Pro so ARM 64-bit I
> think although sizeof(int) is still 4.   It's a fairly complicated
> program at 750 lines in it's almost-done state so I'm not posting the
> whole thing.  I have this program that does audiograms
> https://sourceforge.net/projects/audiogram-c/ and I got the bright
> idea of adding FFT plots to the video generated.  I read a wav file
> into RAM, draw the envelope of the audio.  Then move a cursor bar over
> it by generating frames at different times, saving as jpegs and
> calling ffmpeg at the end to make a video.  Originally it was a
> work-around for not being able to post audio files to social media
> sites.
>
> The FFT version works with the PCM data in the wav file in memory and
> draws more onto the same frames.  tmpbuf is a per-frame output drawing
> area allocated with calloc and then cleared with bzero but I still get
> these uninitialized warnings:
>
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x402460: plot (agf.c:573)
> ==26220==    by 0x402B9F: main (agf.c:713)
> ==26220==  Address 0x4d2b993 is 13 bytes before an unallocated block
> of size 3,278,400 in arena "client"
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401504: plotffts (agf.c:301)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x40153C: plotffts (agf.c:303)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401598: plotffts (agf.c:307)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x4015D0: plotffts (agf.c:309)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x40165C: plotffts (agf.c:315)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401678: plotffts (agf.c:317)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x4016E0: plotffts (agf.c:328)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x4016F8: plotffts (agf.c:329)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x401710: plotffts (agf.c:330)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401788: plotffts (agf.c:337)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x4017A4: plotffts (agf.c:339)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x4017EC: plotffts (agf.c:342)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x4017EC: plotffts (agf.c:342)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Address 0x4dbb9dc is 4 bytes before an unallocated block of
> size 2,688,512 in arena "client"
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x401804: plotffts (agf.c:343)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x401804: plotffts (agf.c:343)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Address 0x4dbb9dd is 3 bytes before an unallocated block of
> size 2,688,512 in arena "client"
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x40181C: plotffts (agf.c:344)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x40181C: plotffts (agf.c:344)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Address 0x4dbb9de is 2 bytes before an unallocated block of
> size 2,688,512 in arena "client"
> ==26220==
>
> The invalid writes I can't figure out either.  The code section looks like
> this:
>
> void plotffts(void) { // draw to tmpbuf
>   int i = 0; // initialize everything for Valgrind
>   int ofs = 0;
>   float min = -99999.9;  // floats work better
>   float max = 99999.9;
>   int x = EDGESKIP; // start at left side
>   int y = 0;
>   int oldx = EDGESKIP;
>   int oldy = 0;
>   int first = 1;
>   half = HEIGHT/2; // redundant
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) { // common values for both
> L&R
>     if (fft_r[i] < min)  // unitialized value
>       min = fft_r[i];
>     if (fft_r[i] > max) // something not initialized
>       max = fft_r[i];
>   }
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) { // read other channel
>     if (fft_l[i] > max) // uninit
>       max = fft_l[i];
>     if (fft_l[i] < min) // uninit
>       min = fft_l[i];
>   }
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) {  // right channel
>     x = i;  // correct?
>     y = ((fft_r[i] - min) / max) * half;
>     if (y > half) // uninit
>       y = half;
>     if (y < 0) // uninit
>       y = 0;
>     if (first > 0) {
>       oldy = y;
>       first = 0;
>     }
> //    line(oldx,oldy,x,y);
>     oldx = x;
>     oldy = y;
> ///*
>     ofs = (y * WIDTH * 3) + (x * 3);
>     tmpbuf[ofs] = 0x01;  // Use of uninitialised value of size 8
>     tmpbuf[ofs+1] = 0xf5; // Use of uninitialised value of size 8
>     tmpbuf[ofs+2] = 0xf6; // Use of uninitialised value of size 8
> //*/
>   }
>   oldx = EDGESKIP;
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) {  // left channel
>     x = i;
>     y = ((fft_l[i] - min) / max) * half;
>     if (y > half)  // uninit
>       y = half;
>     if (y < 0) // uninit
>       y = 0;
>     ofs = ((y + half)* WIDTH * 3) + (x * 3);
>     tmpbuf[ofs] = 0x01; // uninitialised value of size 8 & Invalid
> write of size 1
>     tmpbuf[ofs+1] = 0xf5;  // uninitialised value of size 8 & Invalid
> write of size 1
>     tmpbuf[ofs+2] = 0xf6; // uninitialised value of size 8 & Invalid
> write of size 1
>   }
>   // lines instead of dots would work better
> }
>
> I've looked up the line numbers given in the Valgrind error messages
> and put comments on those lines above.  tmpbuf is where I'm doing
> graphics, it's a chunk of RAM from calloc with an int8_t  pointer
> making it accessible.  It's not live graphics but a buffer of 24-bit
> color values which get written out to jpegs.  Maybe I should use
> 32-bit color?  This code does work, but I'm adding to it (Bresenham
> line drawing) and the error messages are distracting me from errors in
> the new code I'm working on.  My hunch is that something is still
> incomplete in Valgrind on aarch64 platforms.
>
>   Alan
> --
> -------------
> Education is contagious.
>


-- 
-------------
Education is contagious.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.