// 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; }