Chris Lattner | c1b5d09 | 2002-07-23 17:56:53 +0000 | [diff] [blame] | 1 | //===-- PluginLoader.cpp - Implement -load command line option ------------===// |
John Criswell | b576c94 | 2003-10-20 19:43:21 +0000 | [diff] [blame^] | 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file was developed by the LLVM research group and is distributed under |
| 6 | // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
Chris Lattner | c1b5d09 | 2002-07-23 17:56:53 +0000 | [diff] [blame] | 9 | // |
| 10 | // This file implements the -load <plugin> command line option processor. When |
| 11 | // linked into a program, this new command line option is available that allows |
| 12 | // users to load shared objects into the running program. |
| 13 | // |
| 14 | // Note that there are no symbols exported by the .o file generated for this |
| 15 | // .cpp file. Because of this, a program must link against support.o instead of |
| 16 | // support.a: otherwise this translation unit will not be included. |
| 17 | // |
| 18 | //===----------------------------------------------------------------------===// |
| 19 | |
Brian Gaeke | 56d8616 | 2003-10-10 17:01:49 +0000 | [diff] [blame] | 20 | #include "Support/DynamicLinker.h" |
Chris Lattner | c1b5d09 | 2002-07-23 17:56:53 +0000 | [diff] [blame] | 21 | #include "Support/CommandLine.h" |
John Criswell | 7a73b80 | 2003-06-30 21:59:07 +0000 | [diff] [blame] | 22 | #include "Config/dlfcn.h" |
| 23 | #include "Config/link.h" |
Chris Lattner | 0c0edf8 | 2002-07-25 06:17:51 +0000 | [diff] [blame] | 24 | #include <iostream> |
Chris Lattner | c1b5d09 | 2002-07-23 17:56:53 +0000 | [diff] [blame] | 25 | |
| 26 | namespace { |
| 27 | struct PluginLoader { |
| 28 | void operator=(const std::string &Filename) { |
Brian Gaeke | 56d8616 | 2003-10-10 17:01:49 +0000 | [diff] [blame] | 29 | std::string ErrorMessage; |
| 30 | if (LinkDynamicObject (Filename.c_str (), &ErrorMessage)) |
| 31 | std::cerr << "Error opening '" << Filename << "': " << ErrorMessage |
| 32 | << "\n -load request ignored.\n"; |
Chris Lattner | c1b5d09 | 2002-07-23 17:56:53 +0000 | [diff] [blame] | 33 | } |
| 34 | }; |
| 35 | } |
| 36 | |
| 37 | // This causes operator= above to be invoked for every -load option. |
Chris Lattner | 0c0edf8 | 2002-07-25 06:17:51 +0000 | [diff] [blame] | 38 | static cl::opt<PluginLoader, false, cl::parser<std::string> > |
Chris Lattner | c1b5d09 | 2002-07-23 17:56:53 +0000 | [diff] [blame] | 39 | LoadOpt("load", cl::ZeroOrMore, cl::value_desc("plugin.so"), |
| 40 | cl::desc("Load the specified plugin")); |