mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 00:16:11 +00:00
76 lines
1.6 KiB
C
76 lines
1.6 KiB
C
|
|
/* Test simple use of the disable/enable macros. */
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
#include "../include/valgrind.h"
|
|
|
|
char* block = NULL;
|
|
|
|
__attribute__((noinline)) void usechar ( char c )
|
|
{
|
|
// Spook gcc into believing mysterious bad things are
|
|
// happening behind its back, and that 'c' is definitely
|
|
// used in some (unknown) way.
|
|
__asm__ __volatile__("" : : "r"(c) : "memory","cc");
|
|
}
|
|
|
|
__attribute__((noinline)) void err ( void )
|
|
{
|
|
usechar( block[5] );
|
|
}
|
|
|
|
int main ( void )
|
|
{
|
|
block = malloc(10);
|
|
free(block);
|
|
|
|
fprintf(stderr, "\n--------- SIMPLE TEST ---------\n\n");
|
|
fprintf(stderr, "\n--------- enabled (expect 1) ---------\n\n");
|
|
|
|
err();
|
|
|
|
fprintf(stderr, "\n--------- disabled (expect 0) ---------\n\n");
|
|
VALGRIND_DISABLE_ERROR_REPORTING;
|
|
|
|
err();
|
|
|
|
fprintf(stderr, "\n--------- re-enabled (expect 1) ---------\n\n");
|
|
VALGRIND_ENABLE_ERROR_REPORTING;
|
|
|
|
err();
|
|
|
|
|
|
|
|
fprintf(stderr, "\n--------- MULTI-LEVEL TEST (expect 2) ---------\n\n");
|
|
|
|
// 4 times
|
|
VALGRIND_DISABLE_ERROR_REPORTING;
|
|
VALGRIND_DISABLE_ERROR_REPORTING;
|
|
VALGRIND_DISABLE_ERROR_REPORTING;
|
|
VALGRIND_DISABLE_ERROR_REPORTING; // lev = 4
|
|
|
|
// now gradually undo them until an error appears
|
|
err(); // hidden
|
|
|
|
VALGRIND_ENABLE_ERROR_REPORTING; // lev = 3
|
|
err(); // hidden
|
|
|
|
VALGRIND_ENABLE_ERROR_REPORTING; // lev = 2
|
|
err(); // hidden
|
|
|
|
VALGRIND_ENABLE_ERROR_REPORTING; // lev = 1
|
|
err(); // hidden
|
|
|
|
VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0
|
|
err(); // visible
|
|
|
|
VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0 (won't go down further)
|
|
err(); // visible
|
|
|
|
fprintf(stderr, "\n--------- MULTI-LEVEL TEST end ---------\n\n");
|
|
|
|
return 0;
|
|
}
|