--- /dev/null
+long w(long,long);
+long x(long,long);
+long y(long,long);
+
+RET(w(6,6)==0 && x(4,4)==1 && y(8,8)==0 && w(5,5) == 0 && x(3,3) == 1 && y(7,7) == 0 && w(0,0) == 1 && x(0,0) == 0 && y(0,0) == 1);
--- /dev/null
+struct a b c end;
+
+method try0()
+ return (0x000FFFFB - -5).c;
+end;
+
+method try1()
+ return (0x00FFFFFD - -3).c;
+end;
+
+method try2()
+ return (0x9FFFFFFB - -5).c;
+end;
--- /dev/null
+#define TRIES 3
+
+/* ugly. copied from 'bits/mman.h' */
+#define PROT_READ 0x1
+#define PROT_WRITE 0x2
+#define MAP_PRIVATE 0x02
+#define MAP_FIXED 0x10
+#define MAP_ANONYMOUS 0x20
+
+void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
+
+long try0(long);
+long try1(long);
+long try2(long);
+
+/* try these adresses until one is free */
+long *tries[TRIES] = {
+ (long *)0x00100000,
+ (long *)0x01000000,
+ (long *)0xA0000000
+};
+
+int t = 0;
+long *addr = NULL;
+
+for (t = 0; t < TRIES; t++) {
+ addr = mmap(tries[t], 4096, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+
+ if (tries[t] == addr)
+ break;
+}
+
+if ((void *)-1 == addr) {
+ puts("unable to map memory");
+ RET(1); /* keep the statistic clean */
+}
+
+addr[2] = 1337;
+
+printf("try %d\n", t);
+
+switch (t) {
+case 0: RET(try0(0xcafebabe) == 1337);
+case 1: RET(try1(0xcafebabe) == 1337);
+case 2: RET(try2(0xcafebabe) == 1337);
+}
+