1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "crazy_linker_library_view.h" 6 7#include <dlfcn.h> 8#include "crazy_linker_debug.h" 9#include "crazy_linker_globals.h" 10#include "crazy_linker_shared_library.h" 11 12namespace crazy { 13 14LibraryView::~LibraryView() { 15 LOG("%s: Destroying %s\n", __FUNCTION__, name_.c_str()); 16 if (type_ == TYPE_SYSTEM) { 17 ::dlclose(system_); 18 system_ = NULL; 19 } 20 if (type_ == TYPE_CRAZY) { 21 delete crazy_; 22 crazy_ = NULL; 23 } 24 type_ = TYPE_NONE; 25} 26 27void* LibraryView::LookupSymbol(const char* symbol_name) { 28 if (type_ == TYPE_SYSTEM) 29 return ::dlsym(system_, symbol_name); 30 31 if (type_ == TYPE_CRAZY) { 32 LibraryList* lib_list = Globals::GetLibraries(); 33 return lib_list->FindSymbolFrom(symbol_name, this); 34 } 35 36 return NULL; 37} 38 39bool LibraryView::GetInfo(size_t* load_address, 40 size_t* load_size, 41 size_t* relro_start, 42 size_t* relro_size, 43 Error* error) { 44 if (type_ != TYPE_CRAZY) { 45 *error = "No RELRO sharing with system libraries"; 46 return false; 47 } 48 49 crazy_->GetInfo(load_address, load_size, relro_start, relro_size); 50 return true; 51} 52 53} // namespace crazy 54