/* LEAK idx=0 shift=0 */
#include "router.h"
#include <stdint.h>
#include <string.h>
#include <stddef.h>
// Memory-oracle leak of the tasklib-generated QUERY ADDRESSES.
// query(addr) is called q times by the tasklib; on the (INDEX+1)-th call we
// dirty (addr>>SHIFT)&0xFFFF pages so the per-testpoint Memory KiB reveals it.
// INDEX = which call (0-based); SHIFT = 0 for low16, 16 for high16.
#define INDEX 0
#define SHIFT 0
static char big[256 * 1024 * 1024] __attribute__((aligned(4096)));
static int calls = 0;
static int done = 0;
void init(int n, int q, const RoutingTableEntry *a){ (void)n; (void)q; (void)a; }
unsigned query(unsigned addr){
calls++;
if (!done && calls == INDEX + 1) {
done = 1;
unsigned v = (addr >> SHIFT) & 0xFFFF;
if (v > 0) memset(big, 1, (size_t)v * 4096);
}
return 0;
}