Hi All,

As i have frequently said, we are using 2011.3 4.5 linaro gcc. For the
following codes, if we compile it by -O2, it will crash with "segment
fault", if we just comment " if(unifi_debug >= level) {", all will be
ok.
If we don't compile it by -O2, all will be ok too.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

#define DEBUG_BUFFER_SIZE 80
int unifi_debug = 5;

void
unifi_trace(void* ospriv, int level, const char *fmt, ...)
{
        static char s[DEBUG_BUFFER_SIZE];
        va_list args;
        unsigned int len;

        if(unifi_debug >= level) {
                va_start(args, fmt);
                len = vsnprintf(&(s)[0],
                    (DEBUG_BUFFER_SIZE),
                         fmt, args);

                va_end(args);
                if (len >= DEBUG_BUFFER_SIZE) {
                    (s)[DEBUG_BUFFER_SIZE - 2] = '\n';
                    (s)[DEBUG_BUFFER_SIZE - 1] = 0;
                }

                printf("%s", s);
        }
}

int main(void)
{
        char *prog = "/usr/sbin/unififw";
        unifi_trace(NULL, 1, "start %s\n", prog);
        return 0;
}

Thanks
Barry

Attachment: with-o2.asm
Description: Binary data

Attachment: without-o2.asm
Description: Binary data

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to