]> Cypherpunks.ru repositories - gostls13.git/blob - misc/cgo/testasan/main.go
runtime/internal/startlinetest: add NO_LOCAL_POINTERS macro to asm function
[gostls13.git] / misc / cgo / testasan / main.go
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.
4
5 package main
6
7 /*
8 #include <sys/mman.h>
9 #include <pthread.h>
10 #include <unistd.h>
11
12 void ctor(void) __attribute__((constructor));
13 static void* thread(void*);
14
15 void
16 ctor(void)
17 {
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);
20
21         // allocate 4K every 10us
22         pthread_t t;
23         pthread_create(&t, 0, thread, 0);
24 }
25
26 static void*
27 thread(void *p)
28 {
29         for(;;) {
30                 usleep(10000);
31                 mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
32         }
33         return 0;
34 }
35 */
36 import "C"
37
38 import (
39         "fmt"
40         "os"
41         "path/filepath"
42         "time"
43 )
44
45 func main() {
46         start := time.Now()
47
48         // ensure that we can function normally
49         var v [][]byte
50         for i := 0; i < 1000; i++ {
51                 time.Sleep(10 * time.Microsecond)
52                 v = append(v, make([]byte, 64<<10))
53         }
54
55         fmt.Printf("ok\t%s\t%s\n", filepath.Base(os.Args[0]), time.Since(start).Round(time.Millisecond))
56 }