| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include <cstdlib>
- #include <cstdio>
- #include <iostream>
- static void
- bye_main()
- {
- std::cout << "mD " << __FUNCTION__ << std::endl;
- }
- static void
- bye_setup()
- {
- std::cout << "mD " << __FUNCTION__ << std::endl;
- }
- static void
- bye_func()
- {
- std::cout << "mD " << __FUNCTION__ << std::endl;
- }
- void
- func3() __attribute__((__import_module__("mE"), __import_name__("func1")));
- void
- func4() __attribute__((__import_module__("mE"), __import_name__("func2")));
- void
- func1()
- {
- std::printf("mD %s\n", __FUNCTION__);
- if (std::atexit(bye_func) != 0) {
- std::perror("register an atexit handler failed");
- }
- func3();
- }
- void
- func2()
- {
- std::printf("mD %s\n", __FUNCTION__);
- func4();
- }
- __attribute__((constructor)) void
- setup()
- {
- std::cout << "mD " << __FUNCTION__ << std::endl;
- if (std::atexit(bye_setup) != 0) {
- std::perror("register an atexit handler failed");
- }
- }
- __attribute__((destructor)) void
- teardown()
- {
- std::cout << "mD " << __FUNCTION__ << std::endl;
- }
- int
- main()
- {
- std::printf("mD %s\n", __FUNCTION__);
- if (std::atexit(bye_main) != 0) {
- std::perror("register an atexit handler failed");
- return EXIT_FAILURE;
- }
- func1();
- func2();
- return EXIT_SUCCESS;
- }
|