aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/aix/dl-open.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/aix/dl-open.c')
-rw-r--r--sysdeps/unix/sysv/aix/dl-open.c133
1 files changed, 0 insertions, 133 deletions
diff --git a/sysdeps/unix/sysv/aix/dl-open.c b/sysdeps/unix/sysv/aix/dl-open.c
deleted file mode 100644
index 070471d513..0000000000
--- a/sysdeps/unix/sysv/aix/dl-open.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include <malloc.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <dlfcn.h>
-#include <dlldr.h>
-
-#define NUM_SHARED_OBJECTS 32
-
-int _dl_numso = NUM_SHARED_OBJECTS;
-DL_SODATA *_dl_sotable = NULL;
-
-void *
-_dl_open (const char *file, int mode, const void *caller)
-{
- DL_SODATA *new_so;
- void *handle;
- int entry;
- int bsize = _dl_numso * sizeof (DL_INFO);
- DL_INFO *dl_info = malloc (bsize);
-
- if (dl_info == NULL)
- return NULL;
-
- /* 1st time thru initial shared object data table. */
- if (_dl_sotable == NULL)
- {
- _dl_sotable = (DL_SODATA *) calloc (_dl_numso, sizeof (DL_SODATA));
- if (_dl_sotable == NULL)
- return NULL;
-
- __loadx (DL_POSTLOADQ, dl_info, bsize, NULL);
- while (!(dl_info[0].dlinfo_xflags & DL_INFO_OK)
- || dl_info[0].dlinfo_arraylen == 0)
- {
- bsize *= 2;
- dl_info = realloc (dl_info, bsize);
- if (dl_info == NULL)
- return NULL;
-
- __loadx (DL_POSTLOADQ, dl_info, bsize, NULL);
- }
- }
-
- /* Validate mode bits. */
- if (!(mode & RTLD_NOW) && !(mode & RTLD_LAZY))
- {
- free (dl_info);
- errno = EINVAL;
- return NULL;
- }
-
- /* Load the module. */
- handle = (void *) __loadx (DL_LOAD | DL_LOAD_RTL | DL_LOAD_LDX1,
- dl_info, bsize, file, NULL);
- if (handle == NULL)
- {
- free (dl_info);
- errno = EINVAL;
- return NULL;
- }
-
- /* Was dl_info buffer to small to get info. */
- while (!(dl_info[0].dlinfo_xflags & DL_INFO_OK)
- || dl_info[0].dlinfo_arraylen == 0)
- {
- bsize *= 2;
- dl_info = realloc (dl_info, bsize);
- if (dl_info == NULL)
- {
- (void) __unload ((void *) handle);
- errno = ENOMEM;
- return NULL;
- }
- __loadx (DL_POSTLOADQ | DL_LOAD_RTL, dl_info, bsize, handle);
- }
-
- /* Get an empty entry in the shared object table. */
- for (entry = 0; entry < _dl_numso; ++entry)
- if (_dl_sotable[entry].type == 0)
- break;
-
- /* See if the table needs to be increased. */
- if (entry == _dl_numso)
- {
- new_so = (DL_SODATA *) realloc (_dl_sotable,
- _dl_numso * 2 * sizeof (DL_SODATA));
- if (new_so == NULL)
- return NULL;
-
- memset (new_so + _dl_numso, '\0', _dl_numso * sizeof (DL_SODATA));
- _dl_numso *= 2;
- _dl_sotable = new_so;
- }
-
- /* See if this is syscall (look for /unix in file). */
- if (strcmp ("/unix", file) == 0)
- {
- _dl_sotable[entry].index = dl_info[1].dlinfo_index;
- _dl_sotable[entry].dataorg = dl_info[1].dlinfo_dataorg;
- _dl_sotable[entry].handle = handle;
- _dl_sotable[entry].type = DL_UNIX_SYSCALL;
- }
- else
- {
- _dl_sotable[entry].index = dl_info[1].dlinfo_index;
- _dl_sotable[entry].dataorg = dl_info[1].dlinfo_dataorg;
- _dl_sotable[entry].handle = handle;
- _dl_sotable[entry].type = DL_GETSYM;
- }
-
- free (dl_info);
- return (void *) entry;
-}