main.c   [plain text]


// BUILD:  $CC value.c -dynamiclib -install_name $RUN_DIR/libvalue.dylib  -o $BUILD_DIR/libvalue.dylib
// BUILD:  $CC init4.c -dynamiclib -install_name $RUN_DIR/libinit4.dylib  -o $BUILD_DIR/libinit4.dylib $BUILD_DIR/libvalue.dylib
// BUILD:  $CC init5.c -dynamiclib -install_name $RUN_DIR/libinit5.dylib  -o $BUILD_DIR/libinit5.dylib $BUILD_DIR/libinit4.dylib $BUILD_DIR/libvalue.dylib
// BUILD:  $CC init6.c -dynamiclib -install_name $RUN_DIR/libinit6.dylib  -o $BUILD_DIR/libinit6.dylib $BUILD_DIR/libinit5.dylib $BUILD_DIR/libvalue.dylib
// BUILD:  $CC init1.c -dynamiclib -install_name $RUN_DIR/libinit1.dylib  -o $BUILD_DIR/libinit1.dylib -Wl,-upward_library,$BUILD_DIR/libinit6.dylib $BUILD_DIR/libvalue.dylib
// BUILD:  $CC init2.c -dynamiclib -install_name $RUN_DIR/libinit2.dylib  -o $BUILD_DIR/libinit2.dylib $BUILD_DIR/libinit1.dylib $BUILD_DIR/libvalue.dylib
// BUILD:  $CC init3.c -dynamiclib -install_name $RUN_DIR/libinit3.dylib  -o $BUILD_DIR/libinit3.dylib $BUILD_DIR/libinit2.dylib $BUILD_DIR/libvalue.dylib
// BUILD:  $CC main.c -o $BUILD_DIR/upward-link-initializers.exe -DRUN_DIR="$RUN_DIR" $BUILD_DIR/libinit3.dylib


/*
 *     main ---> libinit3
 *                   |
 *                    -------|
 *        libinit6          libinit2
 *         |    ^            |
 *         |    |            |
 *         |    |            |
 *   libinit5   -----------libinit1
 *      |
 *      |
 *   libinit4
 *
 *   libinit1: lowest direct dependency from top level lib (libinit3)
 *   libinit6: only ever brought via upward link dependency, and should not be initialized before libinit1
 *   libinit4: lowest direct dependency from dangling upward (libinit6)
 */

// RUN:  ./upward-link-initializers.exe


#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>

#include "test_support.h"

int main(int argc, const char* argv[], const char* envp[]) {
    // Initializers tests passed
    PASS("Success");
}