mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 08:26:14 +00:00
34 lines
963 B
C
34 lines
963 B
C
// This test-case exposes a bug that was present in the compressed V bit
|
|
// handling for a while. The problem was that when
|
|
// copy_address_range_state() copied a VA_BITS2_OTHER value, it failed to
|
|
// also copy the corresponding entry in the sec-V-bits table. Then later on
|
|
// when we searched for the sec-V-bits entry for the copied-to location, it
|
|
// failed to find it:
|
|
//
|
|
// Memcheck: mc_main.c:766 (get_sec_vbits8): Assertion 'n' failed.
|
|
// Memcheck: get_sec_vbits8: no node for address 0x4017440 (0x4017441)
|
|
|
|
#include <stdlib.h>
|
|
|
|
int main(void)
|
|
{
|
|
int i, t = 0;
|
|
char* x = malloc(1000);
|
|
|
|
// Write some PDBs (partially defined bytes)
|
|
for (i = 0; i < 1000; i++)
|
|
x[i] &= (i & 0xff);
|
|
|
|
// realloc them, invoking copy_address_range_state()
|
|
x = realloc(x, 10000);
|
|
|
|
// Read the PDBs -- this caused a sec-V-bits lookup failure.
|
|
for (i = 0; i < 1000; i++)
|
|
t += x[i];
|
|
|
|
__asm__ __volatile__ ("" :: "r"(t));
|
|
|
|
return 0;
|
|
}
|
|
|