60 lines
1.8 KiB
C
60 lines
1.8 KiB
C
/* This program uses HP-UX-specific features to load and unload SOM
|
|
shared libraries that it wasn't linked against (i.e., libraries
|
|
that the loader doesn't automatically load along with the program
|
|
itself).
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <dl.h>
|
|
|
|
int main ()
|
|
{
|
|
shl_t solib_handle;
|
|
int dummy;
|
|
int status;
|
|
int (*solib_main) (int);
|
|
|
|
/* Load a shlib, with immediate binding of all symbols.
|
|
|
|
Note that the pathname of the loaded shlib is assumed to be relative
|
|
to the testsuite directory (from whence the tested GDB is run), not
|
|
from dot/.
|
|
*/
|
|
dummy = 1; /* Put some code between shl_ calls... */
|
|
solib_handle = shl_load ("gdb.base/solib1.sl", BIND_IMMEDIATE, 0);
|
|
|
|
/* Find a function within the shlib, and call it. */
|
|
status = shl_findsym (&solib_handle,
|
|
"solib_main",
|
|
TYPE_PROCEDURE,
|
|
(long *) &solib_main);
|
|
status = (*solib_main) (dummy);
|
|
|
|
/* Unload the shlib. */
|
|
status = shl_unload (solib_handle);
|
|
|
|
/* Load a different shlib, with deferred binding of all symbols. */
|
|
dummy = 2;
|
|
solib_handle = shl_load ("gdb.base/solib2.sl", BIND_DEFERRED, 0);
|
|
|
|
/* Find a function within the shlib, and call it. */
|
|
status = shl_findsym (&solib_handle,
|
|
"solib_main",
|
|
TYPE_PROCEDURE,
|
|
(long *) &solib_main);
|
|
status = (*solib_main) (dummy);
|
|
|
|
/* Unload the shlib. */
|
|
status = shl_unload (solib_handle);
|
|
|
|
/* Reload the first shlib again, with deferred symbol binding this time. */
|
|
dummy = 3;
|
|
solib_handle = shl_load ("gdb.base/solib1.sl", BIND_IMMEDIATE, 0);
|
|
|
|
/* Unload it without trying to find any symbols in it. */
|
|
status = shl_unload (solib_handle);
|
|
|
|
/* All done. */
|
|
dummy = -1;
|
|
return 0;
|
|
}
|