Fix dlsym() to take into account RTLD_GLOBAL/LOCAL

Symbols from libraries opened with RTLD_LOCAL (default)
  should not be visible via dlsym(RLTD_DEFAULT/RTLD_NEXT, .)

Bug: 17512583
Bug: 18186310

(cherry picked from commit e8ba50fe0d)

Change-Id: Idf6bbe2233fb2bfc0c88677e7d1fc518fb3f7a8b
This commit is contained in:
Dmitriy Ivanov
2014-09-15 17:00:10 -07:00
parent 926797a8a9
commit c85e82dde5
5 changed files with 73 additions and 20 deletions

View File

@@ -199,7 +199,7 @@ struct soinfo {
#endif
bool has_DT_SYMBOLIC;
soinfo(const char* name, const struct stat* file_stat, off64_t file_offset);
soinfo(const char* name, const struct stat* file_stat, off64_t file_offset, int rtld_flags);
void CallConstructors();
void CallDestructors();
@@ -214,6 +214,8 @@ struct soinfo {
dev_t get_st_dev();
off64_t get_file_offset();
int get_rtld_flags();
soinfo_list_t& get_children();
soinfo_list_t& get_parents();
@@ -246,6 +248,7 @@ struct soinfo {
// version >= 1
off64_t file_offset;
int rtld_flags;
};
extern soinfo* get_libdl_info();