+++ /dev/null
-// PR c++/60731
-// { dg-do run { target { dlopen && disable-for-4.9 } } }
-// { dg-add-options dlopen }
-// { dg-build-dso "dlclose1-dso.cc" }
-
-#include <dlfcn.h>
-extern "C" void abort();
-extern "C" int printf (const char *, ...);
-
-// Open and close the DSO for each call so that statics are reinitialized.
-int call()
-{
- void *h = dlopen ("./dlclose1-dso.so", RTLD_NOW);
- if (!h) { printf ("dlopen failed: %s\n", dlerror()); abort(); }
- int (*fn)() = (int(*)())dlsym (h, "fn");
- if (!fn) { printf ("dlsym failed: %s\n", dlerror()); abort(); }
- int r = fn();
- dlclose (h);
- return r;
-}
-
-int main() {
- int i = call();
- int j = call();
- if (i != j)
- {
- printf ("mismatch: %d != %d\n", i, j);
- abort();
- }
-}
# The following line is needed for targets like the i960 where
# the default output file is b.out. Sigh.
}
- "dso" {
- set compile_type "executable"
- set output_file "[file rootname [file tail $prog]].so"
- set extra_tool_flags "$extra_tool_flags -fPIC -shared"
- }
"repo" {
set compile_type "object"
set output_file "[file rootname [file tail $prog]].o"
return [gcc-dg-test-1 gcc_target_compile $prog $do_what $extra_tool_flags]
}
-# Usage: { dg-build-dso "file.ext" }
-# Compiles the specified file into "file.so" (treating that compilation as
-# a separate test) for use by the main test, and schedules it for removal
-# when the main test is complete. The DSO source file should not use "dg-do".
-# This relies on a couple of local variable names in dg-test.
-
-proc dg-build-dso { args } {
- global dg-do-what-default
- upvar prog main_file
- upvar dg-final-code final-code
-
- set file [lindex $args 1]
- set dir "[file dirname $main_file]"
- set dg-do-what-default dso
- dg-test -keep-output $dir/$file "" ""
- set dg-do-what-default compile
-
- set output_file "[file rootname [file tail $file]].so"
- append final-code "remove-build-file $output_file"
-}
-
proc gcc-dg-prune { system text } {
global additional_prunes