diff options
author | Roland McGrath <roland@hack.frob.com> | 2015-11-10 19:44:48 -0800 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2015-11-10 19:44:48 -0800 |
commit | c0d6f2a33e1229a96d5d5064b9b04d7d3cd41d9d (patch) | |
tree | 76368887d991912b7942cf3aeb8fd1a2e2703373 /sysdeps | |
parent | 71d1b0166b4ace0d804af2993b3815758b852efc (diff) | |
download | glibc-c0d6f2a33e1229a96d5d5064b9b04d7d3cd41d9d.tar.gz glibc-c0d6f2a33e1229a96d5d5064b9b04d7d3cd41d9d.tar.xz glibc-c0d6f2a33e1229a96d5d5064b9b04d7d3cd41d9d.zip |
NaCl: Use open_resource API for shared objects
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/nacl/dl-sysdep-open.h | 40 | ||||
-rw-r--r-- | sysdeps/nacl/dl-sysdep.c | 23 | ||||
-rw-r--r-- | sysdeps/nacl/nacl-interface-list.h | 2 |
3 files changed, 64 insertions, 1 deletions
diff --git a/sysdeps/nacl/dl-sysdep-open.h b/sysdeps/nacl/dl-sysdep-open.h new file mode 100644 index 0000000000..38b0f9e86d --- /dev/null +++ b/sysdeps/nacl/dl-sysdep-open.h @@ -0,0 +1,40 @@ +/* System-specific call to open a shared object by name. NaCl version. + Copyright (C) 2015 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, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _DL_SYSDEP_OPEN_H +#define _DL_SYSDEP_OPEN_H 1 + +#include <stddef.h> + +/* NAME is a name without slashes, as it appears in a DT_NEEDED entry + or a dlopen call's argument or suchlike. NAMELEN is (strlen (NAME) + 1). + + Find NAME in an OS-dependent fashion, and return its "real" name. + Optionally fill in *FD with a file descriptor open on that file (or + else leave its initial value of -1). The return value is a new + malloc'd string, which will be free'd by the caller. If NAME is + resolved to an actual file that can be opened, then the return + value should name that file (and if *FD was not set, then a normal + __open call on that string will be made). If *FD was set by some + other means than a normal open and there is no "real" name to use, + then __strdup (NAME) is fine (modulo error checking). */ + +extern char *_dl_sysdep_open_object (const char *name, size_t namelen, int *fd) + internal_function attribute_hidden; + +#endif /* dl-sysdep-open.h */ diff --git a/sysdeps/nacl/dl-sysdep.c b/sysdeps/nacl/dl-sysdep.c index 3e902c2cae..3a04aa1176 100644 --- a/sysdeps/nacl/dl-sysdep.c +++ b/sysdeps/nacl/dl-sysdep.c @@ -87,3 +87,26 @@ _dl_start_user (void (*user_entry) (uint32_t info[]), uint32_t info[]) #endif /* SHARED */ #include <elf/dl-sysdep.c> + +#include <dl-sysdep-open.h> +#include <nacl-interfaces.h> +#include <assert.h> +#include <string.h> +#include <unistd.h> + +char * +internal_function +_dl_sysdep_open_object (const char *name, size_t namelen, int *fd) +{ + int error = __nacl_irt_resource_open.open_resource (name, fd); + if (error) + return NULL; + assert (*fd != -1); + char *realname = __strdup (name); + if (__glibc_unlikely (realname == NULL)) + { + __close (*fd); + *fd = -1; + } + return realname; +} diff --git a/sysdeps/nacl/nacl-interface-list.h b/sysdeps/nacl/nacl-interface-list.h index cb337510fc..c68faedc54 100644 --- a/sysdeps/nacl/nacl-interface-list.h +++ b/sysdeps/nacl/nacl-interface-list.h @@ -28,7 +28,7 @@ NACL_MANDATORY_INTERFACE (rtld, NACL_IRT_FUTEX_v0_1, nacl_irt_futex) NACL_MANDATORY_INTERFACE (rtld, NACL_IRT_TLS_v0_1, nacl_irt_tls) -NACL_MANDATORY_INTERFACE (libc, +NACL_MANDATORY_INTERFACE (rtld, NACL_IRT_RESOURCE_OPEN_v0_1, nacl_irt_resource_open) NACL_MANDATORY_INTERFACE (rtld, NACL_IRT_CODE_DATA_ALLOC_v0_1, |