- char *ptr = strstr(info->dlpi_name, data->filename);
- if (ptr == NULL || ptr[strlen(data->filename)] != '\0')
+ /* Calculate address where shared object is mapped into the process space.
+ * (Using the base address and the virtual address of the first LOAD segment)
+ */
+ void *map_start = NULL;
+ for (unsigned i = 0; i < info->dlpi_phnum; i++) {
+ if (info->dlpi_phdr[i].p_type == PT_LOAD) {
+ map_start = (void *)(info->dlpi_addr + info->dlpi_phdr[i].p_vaddr);
+ break;
+ }
+ }
+
+ if (map_start != data->dli_fbase)