Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
crash
crash-search-also-in-lib-crash
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File crash-search-also-in-lib-crash of Package crash
From: Bernhard Walle <bwalle@suse.de> Subject: [PATCH] Add /usr/lib{,64}/crash to the search path for extensions Patch-mainline: never This patch just adds /usr/lib{,64}/crash to the search path for extensions. This allows extensions to be installed in that directories to confirm to the shared library packaging policy of SUSE. Signed-off-by: Bernhard Walle <bwalle@suse.de> --- defs.h | 1 + extensions.c | 12 ++++++++++++ symbols.c | 22 ++++++++++++++++++++++ 3 files changed, 35 insertions(+) --- a/defs.h +++ b/defs.h @@ -3295,6 +3295,7 @@ void dump_symbol_table(void); void dump_struct_table(ulong); void dump_offset_table(char *, ulong); int is_elf_file(char *); +int is_elf_file_in_dir(const char *file, const char *dir); int is_kernel(char *); int file_elf_version(char *); int is_system_map(char *); --- a/extensions.c +++ b/extensions.c @@ -210,8 +210,20 @@ load_extension(char *lib) * If the library is not specified by an absolute pathname, dlopen() * does not look in the current directory. */ + + /* add .so if necessary */ + if (strlen(lib) <= 3 || strcmp(lib + strlen(lib) - 3, ".so") != 0) { + char *lib2 = strdup(lib); + sprintf(lib, "%s.so", lib2); + free(lib2); + } + if ((*lib != '.') && (*lib != '/') && is_elf_file(lib)) sprintf(ext->filename, "./%s", lib); + else if (is_elf_file_in_dir("/usr/lib/crash", lib)) + sprintf(ext->filename, "%s/%s", "/usr/lib/crash", lib); + else if (is_elf_file_in_dir("/usr/lib64/crash", lib)) + sprintf(ext->filename, "%s/%s", "/usr/lib64/crash", lib); else strcpy(ext->filename, lib); --- a/symbols.c +++ b/symbols.c @@ -2604,6 +2604,28 @@ bailout: return(is_bfd_format(file)); } + +/* + * Checks if file <file> in dir <dir> is a valid ELF file. + */ +int +is_elf_file_in_dir(const char *dir, const char *file) +{ + char *buffer; + int ret; + + buffer = malloc(strlen(dir) + strlen(file) + 2); + if (!buffer) + return FALSE; + + sprintf(buffer, "%s/%s", dir, file); + + ret = is_elf_file(buffer); + free(buffer); + + return ret; +} + /* * Given a choice between two namelists, pick the one for gdb to use. * For now, just check get their stats and check their sizes; the larger
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor