1cc5f4c67fd362f725b86267d72469f8a338ae54dAlexey Samsonov//===----------- dlclose-test-so.cc -----------------------------*- C++ -*-===//
2d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//
3d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//                     The LLVM Compiler Infrastructure
4d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//
5d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany// This file is distributed under the University of Illinois Open Source
6d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany// License. See LICENSE.TXT for details.
7d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//
8d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//===----------------------------------------------------------------------===//
9d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//
10d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany// This file is a part of AddressSanitizer, an address sanity checker.
11d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//
12d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany// Regression test for
13d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany// http://code.google.com/p/address-sanitizer/issues/detail?id=19
14d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany//===----------------------------------------------------------------------===//
15d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany#include <stdio.h>
16d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany
17d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryanystatic int pad1;
18d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryanystatic int static_var;
19d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryanystatic int pad2;
20d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany
21d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryanyextern "C"
22d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryanyint *get_address_of_static_var() {
23d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany  return &static_var;
24d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany}
25d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany
26d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany__attribute__((constructor))
27d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryanyvoid at_dlopen() {
28d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany  printf("%s: I am being dlopened\n", __FILE__);
29d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany}
30d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany__attribute__((destructor))
31d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryanyvoid at_dlclose() {
32d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany  printf("%s: I am being dlclosed\n", __FILE__);
33d11a9639388defed6a26dd5e76932246bbe505efKostya Serebryany}
34