1*fd3b1469Skurt /* $OpenBSD: main.c,v 1.2 2005/09/16 23:30:25 kurt Exp $ */
23aa49273Skurt
33aa49273Skurt /*
43aa49273Skurt * Copyright (c) 2005 Kurt Miller <kurt@openbsd.org>
53aa49273Skurt *
63aa49273Skurt * Permission to use, copy, modify, and distribute this software for any
73aa49273Skurt * purpose with or without fee is hereby granted, provided that the above
83aa49273Skurt * copyright notice and this permission notice appear in all copies.
93aa49273Skurt *
103aa49273Skurt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
113aa49273Skurt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
123aa49273Skurt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
133aa49273Skurt * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
143aa49273Skurt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
153aa49273Skurt * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
163aa49273Skurt * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
173aa49273Skurt */
183aa49273Skurt
193aa49273Skurt #include <dlfcn.h>
203aa49273Skurt #include <stdio.h>
213aa49273Skurt #include "aa.h"
223aa49273Skurt
233aa49273Skurt /*
243aa49273Skurt * Verifies dlsym works as expected when called from the main executable.
253aa49273Skurt * libaa and libc are in the main object group, so their symbols are visable.
263aa49273Skurt */
273aa49273Skurt int
main()283aa49273Skurt main()
293aa49273Skurt {
303aa49273Skurt int ret = 0;
313aa49273Skurt void *exe_handle = dlopen(NULL, RTLD_LAZY);
323aa49273Skurt
333aa49273Skurt if (dlsym(RTLD_DEFAULT, "aaSymbol") == NULL) {
343aa49273Skurt printf("dlsym(RTLD_DEFAULT, \"aaSymbol\") FAILED\n");
35*fd3b1469Skurt ret = 1;
363aa49273Skurt }
373aa49273Skurt
383aa49273Skurt if (dlsym(RTLD_SELF, "aaSymbol") == NULL) {
393aa49273Skurt printf("dlsym(RTLD_SELF, \"aaSymbol\") FAILED\n");
40*fd3b1469Skurt ret = 1;
413aa49273Skurt }
423aa49273Skurt
433aa49273Skurt if (dlsym(RTLD_NEXT, "aaSymbol") == NULL) {
443aa49273Skurt printf("dlsym(RTLD_NEXT, \"aaSymbol\") FAILED\n");
45*fd3b1469Skurt ret = 1;
463aa49273Skurt }
473aa49273Skurt
483aa49273Skurt if (dlsym(NULL, "aaSymbol") == NULL) {
493aa49273Skurt printf("dlsym(RTLD_NEXT, \"aaSymbol\") FAILED\n");
50*fd3b1469Skurt ret = 1;
513aa49273Skurt }
523aa49273Skurt
533aa49273Skurt if (dlsym(exe_handle, "aaSymbol") == NULL) {
543aa49273Skurt printf("dlsym(exe_handle, \"aaSymbol\") FAILED\n");
55*fd3b1469Skurt ret = 1;
563aa49273Skurt }
573aa49273Skurt
583aa49273Skurt dlclose(exe_handle);
593aa49273Skurt
603aa49273Skurt return (ret);
613aa49273Skurt }
62