blob: 10d0f7f4df514dae9b455dc4447f1a4e2aedca8d [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// A crazy linker test to:
// - Load a library ( with the linker.
// - Find the address of the "Zoo" function in
// - Call the Zoo() function, which will use dlopen() / dlsym() to
// find (which depends on
// - Close the library.
// This tests the dlopen/dlsym/dlclose wrappers provided by the crazy
// linker to loaded libraries.
#include <stdio.h>
#include <crazy_linker.h>
#include "test_util.h"
typedef bool (*FunctionPtr)();
#define LIB_NAME ""
int main() {
crazy_context_t* context = crazy_context_create();
crazy_library_t* library;
// Load
if (!crazy_library_open(&library, LIB_NAME, context)) {
Panic("Could not open library: %s\n", crazy_context_get_error(context));
// Find the "Zoo" symbol.
FunctionPtr zoo_func;
if (!crazy_library_find_symbol(
library, "Zoo", reinterpret_cast<void**>(&zoo_func))) {
Panic("Could not find 'Zoo' in " LIB_NAME "\n");
// Call it.
bool ret = (*zoo_func)();
if (!ret)
Panic("'Zoo' function failed!");
// Close the library.
printf("Closing " LIB_NAME "\n");
return 0;