mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-09 10:50:08 +00:00
Update.
Call _dl_new_object with extra argument. Call _dl_new_object with extra argument. but the main one if new argument is nonzero. * elf/ldsodefs.h: Adjust for _dl_new_object change. (dl_main): Call _dl_new_object with extra argument.
This commit is contained in:
parent
f787edde1d
commit
5f62394167
@ -12,13 +12,17 @@
|
|||||||
(_dl_map_object_from_fd): Define static is EXTERNAL_MAP_FROM_FD is
|
(_dl_map_object_from_fd): Define static is EXTERNAL_MAP_FROM_FD is
|
||||||
not defined.
|
not defined.
|
||||||
Check EI_OSABI and EI_ABIVERSION fields in header.
|
Check EI_OSABI and EI_ABIVERSION fields in header.
|
||||||
|
Call _dl_new_object with extra argument.
|
||||||
(_dl_map_object): Call decompose_path with correct argument.
|
(_dl_map_object): Call decompose_path with correct argument.
|
||||||
Call expand_dynamic_string_token instead of local_strdup to also
|
Call expand_dynamic_string_token instead of local_strdup to also
|
||||||
expand DST.
|
expand DST.
|
||||||
|
Call _dl_new_object with extra argument.
|
||||||
* elf/dl-object.c (_dl_new_object): Determine l_origin for all maps
|
* elf/dl-object.c (_dl_new_object): Determine l_origin for all maps
|
||||||
but the main one.
|
but the main one if new argument is nonzero.
|
||||||
|
* elf/ldsodefs.h: Adjust for _dl_new_object change.
|
||||||
* elf/dl-support.c: Define _dl_origin_path.
|
* elf/dl-support.c: Define _dl_origin_path.
|
||||||
* elf/rtld.c: Likewise. Set _dl_origin_path based on LD_ORIGIN_PATH.
|
* elf/rtld.c: Likewise. Set _dl_origin_path based on LD_ORIGIN_PATH.
|
||||||
|
(dl_main): Call _dl_new_object with extra argument.
|
||||||
|
|
||||||
* elf/dl-close (_dl_close): Free l_name and l_origin.
|
* elf/dl-close (_dl_close): Free l_name and l_origin.
|
||||||
|
|
||||||
|
@ -739,7 +739,7 @@ _dl_map_object_from_fd (char *name, int fd, char *realname,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Enter the new object in the list of loaded objects. */
|
/* Enter the new object in the list of loaded objects. */
|
||||||
l = _dl_new_object (realname, name, l_type);
|
l = _dl_new_object (realname, name, l_type, loader != NULL);
|
||||||
if (! l)
|
if (! l)
|
||||||
lose (ENOMEM, "cannot create shared object descriptor");
|
lose (ENOMEM, "cannot create shared object descriptor");
|
||||||
l->l_opencount = 1;
|
l->l_opencount = 1;
|
||||||
@ -1290,7 +1290,8 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
|
|||||||
|
|
||||||
/* Enter the new object in the list of loaded objects. */
|
/* Enter the new object in the list of loaded objects. */
|
||||||
if ((name_copy = local_strdup (name)) == NULL
|
if ((name_copy = local_strdup (name)) == NULL
|
||||||
|| (l = _dl_new_object (name_copy, name, type)) == NULL)
|
|| (l = _dl_new_object (name_copy, name, type,
|
||||||
|
loader != NULL)) == NULL)
|
||||||
_dl_signal_error (ENOMEM, name,
|
_dl_signal_error (ENOMEM, name,
|
||||||
"cannot create shared object descriptor");
|
"cannot create shared object descriptor");
|
||||||
/* We use an opencount of 0 as a sign for the faked entry. */
|
/* We use an opencount of 0 as a sign for the faked entry. */
|
||||||
|
@ -33,7 +33,7 @@ struct link_map *_dl_default_scope[5];
|
|||||||
|
|
||||||
struct link_map *
|
struct link_map *
|
||||||
internal_function
|
internal_function
|
||||||
_dl_new_object (char *realname, const char *libname, int type)
|
_dl_new_object (char *realname, const char *libname, int type, int find_origin)
|
||||||
{
|
{
|
||||||
struct link_map *new = malloc (sizeof *new);
|
struct link_map *new = malloc (sizeof *new);
|
||||||
struct libname_list *newname = malloc (sizeof *newname);
|
struct libname_list *newname = malloc (sizeof *newname);
|
||||||
@ -62,9 +62,8 @@ _dl_new_object (char *realname, const char *libname, int type)
|
|||||||
l->l_next = new;
|
l->l_next = new;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The REALNAME is "" for the main link map. This name must be determined
|
/* Don't try to find the origin for the main map. */
|
||||||
specially. */
|
if (! find_origin)
|
||||||
if (realname[0] == '\0')
|
|
||||||
new->l_origin = NULL;
|
new->l_origin = NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -166,7 +166,7 @@ extern void _dl_sysdep_output (int fd, const char *string, ...);
|
|||||||
descriptor for this. All arguments are `const char *'; args until
|
descriptor for this. All arguments are `const char *'; args until
|
||||||
a null pointer are concatenated to form the message to print. If
|
a null pointer are concatenated to form the message to print. If
|
||||||
NEW_LINE is nonzero it is assumed that the message starts on a new
|
NEW_LINE is nonzero it is assumed that the message starts on a new
|
||||||
line.*/
|
line. */
|
||||||
extern void _dl_debug_message (int new_line, const char *string, ...);
|
extern void _dl_debug_message (int new_line, const char *string, ...);
|
||||||
|
|
||||||
/* OS-dependent function to write a message on the standard output.
|
/* OS-dependent function to write a message on the standard output.
|
||||||
@ -356,9 +356,11 @@ extern struct link_map **_dl_object_relocation_scope (struct link_map *map)
|
|||||||
|
|
||||||
|
|
||||||
/* Allocate a `struct link_map' for a new object being loaded,
|
/* Allocate a `struct link_map' for a new object being loaded,
|
||||||
and enter it into the _dl_loaded list. */
|
and enter it into the _dl_loaded list. If find origin is nonzero
|
||||||
|
determine the origin of the file. */
|
||||||
extern struct link_map *_dl_new_object (char *realname, const char *libname,
|
extern struct link_map *_dl_new_object (char *realname, const char *libname,
|
||||||
int type) internal_function;
|
int type, int find_origin)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
/* Relocate the given object (if it hasn't already been).
|
/* Relocate the given object (if it hasn't already been).
|
||||||
SCOPE is passed to _dl_lookup_symbol in symbol lookups.
|
SCOPE is passed to _dl_lookup_symbol in symbol lookups.
|
||||||
|
@ -420,7 +420,7 @@ of this helper program; chances are you did not intend to run this program.\n\
|
|||||||
{
|
{
|
||||||
/* Create a link_map for the executable itself.
|
/* Create a link_map for the executable itself.
|
||||||
This will be what dlopen on "" returns. */
|
This will be what dlopen on "" returns. */
|
||||||
main_map = _dl_new_object ((char *) "", "", lt_executable);
|
main_map = _dl_new_object ((char *) "", "", lt_executable, 0);
|
||||||
if (main_map == NULL)
|
if (main_map == NULL)
|
||||||
_dl_sysdep_fatal ("cannot allocate memory for link map\n", NULL);
|
_dl_sysdep_fatal ("cannot allocate memory for link map\n", NULL);
|
||||||
main_map->l_phdr = phdr;
|
main_map->l_phdr = phdr;
|
||||||
|
@ -30,15 +30,15 @@ get_origin (void)
|
|||||||
char *result;
|
char *result;
|
||||||
|
|
||||||
if (readlink ("/proc/self/exe", linkval, PATH_MAX) != -1
|
if (readlink ("/proc/self/exe", linkval, PATH_MAX) != -1
|
||||||
&& result[0] != '[')
|
&& linkval[0] != '[')
|
||||||
{
|
{
|
||||||
/* We can use this value. */
|
/* We can use this value. */
|
||||||
char *last_slash = strrchr (linkval, '/');
|
char *last_slash = strrchr (linkval, '/');
|
||||||
result = (char *) malloc (linkval - last_slash + 1);
|
result = (char *) malloc (last_slash - linkval + 1);
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
result = (char *) -1;
|
result = (char *) -1;
|
||||||
else
|
else
|
||||||
*((char *) __mempcpy (result, linkval, linkval - last_slash)) = '\0';
|
*((char *) __mempcpy (result, linkval, last_slash - linkval)) = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user