svn commit: r233546 - head/libexec/rtld-elf
Konstantin Belousov
kib at FreeBSD.org
Tue Mar 27 14:10:16 UTC 2012
Author: kib
Date: Tue Mar 27 14:10:15 2012
New Revision: 233546
URL: http://svn.freebsd.org/changeset/base/233546
Log:
Prevent rtld_verify_object_versions() from being called several times
for the same object. This can happen when object is a dependency of the
dlopen()ed dso. When called several times, we waste time due to unneeded
processing, and memory, because obj->vertab is allocated anew on each
iteration.
Reviewed by: kan
MFC after: 2 weeks
Modified:
head/libexec/rtld-elf/rtld.c
head/libexec/rtld-elf/rtld.h
Modified: head/libexec/rtld-elf/rtld.c
==============================================================================
--- head/libexec/rtld-elf/rtld.c Tue Mar 27 14:05:12 2012 (r233545)
+++ head/libexec/rtld-elf/rtld.c Tue Mar 27 14:10:15 2012 (r233546)
@@ -4158,6 +4158,10 @@ rtld_verify_object_versions(Obj_Entry *o
const Obj_Entry *depobj;
int maxvernum, vernum;
+ if (obj->ver_checked)
+ return (0);
+ obj->ver_checked = true;
+
maxvernum = 0;
/*
* Walk over defined and required version records and figure out
Modified: head/libexec/rtld-elf/rtld.h
==============================================================================
--- head/libexec/rtld-elf/rtld.h Tue Mar 27 14:05:12 2012 (r233545)
+++ head/libexec/rtld-elf/rtld.h Tue Mar 27 14:10:15 2012 (r233546)
@@ -230,6 +230,7 @@ typedef struct Struct_Obj_Entry {
bool mainprog : 1; /* True if this is the main program */
bool rtld : 1; /* True if this is the dynamic linker */
bool relocated : 1; /* True if processed by relocate_objects() */
+ bool ver_checked : 1; /* True if processed by rtld_verify_object_versions */
bool textrel : 1; /* True if there are relocations to text seg */
bool symbolic : 1; /* True if generated with "-Bsymbolic" */
bool bind_now : 1; /* True if all relocations should be made first */
More information about the svn-src-all
mailing list