OSDN Git Service

merge from open-source master
authorThe Android Open Source Project <initial-contribution@android.com>
Mon, 22 Mar 2010 22:55:09 +0000 (15:55 -0700)
committerThe Android Open Source Project <initial-contribution@android.com>
Mon, 22 Mar 2010 22:55:09 +0000 (15:55 -0700)
Change-Id: I70266ee8c520b216773f267e46c8273d2334c31d

1  2 
libc/Android.mk
libc/bionic/malloc_debug_leak.c
libc/bionic/pthread.c
linker/dlfcn.c
linker/linker.c

diff --cc libc/Android.mk
Simple merge
Simple merge
Simple merge
diff --cc linker/dlfcn.c
Simple merge
diff --cc linker/linker.c
@@@ -532,9 -535,43 +532,43 @@@ Elf32_Sym *lookup(const char *name, soi
          return s;
      }
  
 -    return 0;
 +    return NULL;
  }
  
+ soinfo *find_containing_library(void *addr)
+ {
+     soinfo *si;
+     for(si = solist; si != NULL; si = si->next)
+     {
+         if((unsigned)addr >= si->base && (unsigned)addr - si->base < si->size) {
+             return si;
+         }
+     }
+     return NULL;
+ }
+ Elf32_Sym *find_containing_symbol(void *addr, soinfo *si)
+ {
+     unsigned int i;
+     unsigned soaddr = (unsigned)addr - si->base;
+     /* Search the library's symbol table for any defined symbol which
+      * contains this address */
+     for(i=0; i<si->nchain; i++) {
+         Elf32_Sym *sym = &si->symtab[i];
+         if(sym->st_shndx != SHN_UNDEF &&
+            soaddr >= sym->st_value &&
+            soaddr < sym->st_value + sym->st_size) {
+             return sym;
+         }
+     }
+     return NULL;
+ }
  #if 0
  static void dump(soinfo *si)
  {