On Mon, Mar 17, 2008 at 8:06 PM, sandeep lahane sandeep.lahane@gmail.com wrote:
Hello,
I have written an external io type plugin for an arm based board. While debugging the plugin, I encountered unexpected errors which I doubt are because of gcc optimizations, and after looking up on web it seems that arm-gcc 4.1.1 which we are using has some known bugs due to which alsa-library functions behave unexpectedly. E.g. snd_mask_refine() reportedly behaves differently when it is compiled using different optimization levels, I am facing the same issue where snd_mask_refine() returns unexpected (-EINVAL) and after I modify the code as in src/pcm/mask_inline.h
MASK_INLINE void snd_mask_copy(snd_mask_t *mask, const snd_mask_t *v) {
- *mask = *v;
- memcpy(mask->bits, v->bits, MASK_SIZE * 4);
}
snd_mask_refine() returns 0 which is valid but I get segfaults just after returning from snd_pcm_ioplug_hw_refine().
Is this a known bug and if yes/no then is there any list of known bugs/quirks when using alsa-lib with arm gcc 4.1.1?
I am attaching a log below, pardon for non-alsa flavour of debug messages in the log.
Pruning the log in previous email.
It looks like the issue has been resolved by building alsa-lib and alsa-utils at optimization level 0. The snd_hw_refine() returns wrong values at other optimiztion levels so it has to be either patched/modified to nullify -O settings or optimization level 0 has to be used. I had tried out patching the function and then it returns correct value, but alsa-lib segfaults after successfully returning from it. So currently I am going ahead with building them at -O0.