int dladdr(void *addr, Dl_info *info) { staticint loaded = 0; int rc = 0; void *addr0; if (!addr) { return rc;
} if (!loaded) { if (fill_dll_info() == -1) return rc;
loaded = 1;
}
// first try with addr on cached data
rc = dladdr_dont_reload(addr, info);
// addr could be an AIX function descriptor, so try dereferenced version if (rc == 0) {
addr0 = *((void **)addr);
rc = dladdr_dont_reload(addr0, info);
}
// if we had no success until now, maybe loadquery info is outdated. // refresh and retry if (rc == 0) { if (fill_dll_info() == -1) return rc;
rc = dladdr_dont_reload(addr, info); if (rc == 0) {
rc = dladdr_dont_reload(addr0, info);
}
} return rc;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.