gcc:
[official-gcc.git] / libgo / misc / cgo / testasan / main.go
blob1837c6cc81de34fc5f8d4552360fd834e6d750da
1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package main
7 /*
8 #include <sys/mman.h>
9 #include <pthread.h>
10 #include <unistd.h>
12 void ctor(void) __attribute__((constructor));
13 static void* thread(void*);
15 void
16 ctor(void)
18 // occupy memory where Go runtime would normally map heap
19 mmap((void*)0x00c000000000, 64<<10, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, -1, 0);
21 // allocate 4K every 10us
22 pthread_t t;
23 pthread_create(&t, 0, thread, 0);
26 static void*
27 thread(void *p)
29 for(;;) {
30 usleep(10000);
31 mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
33 return 0;
36 import "C"
38 import (
39 "time"
42 func main() {
43 // ensure that we can function normally
44 var v [][]byte
45 for i := 0; i < 1000; i++ {
46 time.Sleep(10 * time.Microsecond)
47 v = append(v, make([]byte, 64<<10))