aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2013-07-26 16:35:59 +0100
committerMatt Fleming <matt.fleming@intel.com>2013-07-26 16:35:59 +0100
commit0006a5e1bc8742fbbc6fbe52d1d12bab05eef311 (patch)
treedb06a85b4c2d773776e242fe34c90abfc2cdd9f5
parent5131663c4ab29939ef6d23066d9832a23bb445a3 (diff)
downloadsyslinux-0006a5e1bc8742fbbc6fbe52d1d12bab05eef311.tar.gz
syslinux-0006a5e1bc8742fbbc6fbe52d1d12bab05eef311.tar.xz
syslinux-0006a5e1bc8742fbbc6fbe52d1d12bab05eef311.zip
module: convert to dprintf() to aid debuggingsyslinux-6.02-pre14
dprintf() is much more useful than DBG_PRINT() when trying to figure out where a module is failing to load because we can enable the debug statements at runtime. Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r--com32/lib/sys/module/common.c25
-rw-r--r--com32/lib/sys/module/elf_module.c9
-rw-r--r--com32/lib/sys/module/exec.c5
3 files changed, 23 insertions, 16 deletions
diff --git a/com32/lib/sys/module/common.c b/com32/lib/sys/module/common.c
index a589f24f..05a27e85 100644
--- a/com32/lib/sys/module/common.c
+++ b/com32/lib/sys/module/common.c
@@ -77,6 +77,7 @@ FILE *findpath(char *name)
snprintf(path, sizeof(path), "%s%s%s",
entry->str, slash ? "/" : "", name);
+ dprintf("findpath: trying \"%s\"\n", path);
f = fopen(path, "rb");
if (f)
return f;
@@ -94,7 +95,7 @@ int image_load(struct elf_module *module)
module->u.l._file = findpath(module->name);
if (module->u.l._file == NULL) {
- DBG_PRINT("Could not open object file '%s'\n", module->name);
+ dprintf("Could not open object file '%s'\n", module->name);
goto error;
}
@@ -225,30 +226,30 @@ int check_header_common(Elf_Ehdr *elf_hdr) {
elf_hdr->e_ident[EI_MAG2] != ELFMAG2 ||
elf_hdr->e_ident[EI_MAG3] != ELFMAG3) {
- DBG_PRINT("The file is not an ELF object\n");
+ dprintf("The file is not an ELF object\n");
return -1;
}
if (elf_hdr->e_ident[EI_CLASS] != ELFCLASS32 &&
elf_hdr->e_ident[EI_CLASS] != ELFCLASS64) {
- DBG_PRINT("Invalid ELF class code\n");
+ dprintf("Invalid ELF class code\n");
return -1;
}
if (elf_hdr->e_ident[EI_DATA] != MODULE_ELF_DATA) {
- DBG_PRINT("Invalid ELF data encoding\n");
+ dprintf("Invalid ELF data encoding\n");
return -1;
}
if (elf_hdr->e_ident[EI_VERSION] != MODULE_ELF_VERSION ||
elf_hdr->e_version != MODULE_ELF_VERSION) {
- DBG_PRINT("Invalid ELF file version\n");
+ dprintf("Invalid ELF file version\n");
return -1;
}
if (elf_hdr->e_machine != EM_386 &&
elf_hdr->e_machine != EM_X86_64) {
- DBG_PRINT("Invalid ELF architecture\n");
+ dprintf("Invalid ELF architecture\n");
return -1;
}
@@ -360,7 +361,7 @@ int check_symbols(struct elf_module *module)
// and ISOLINUX. See perform_relocations().
if (strong_count == 0 && weak_count == 0)
{
- DBG_PRINT("Symbol %s is undefined\n", crt_name);
+ dprintf("Symbol %s is undefined\n", crt_name);
printf("Undef symbol FAIL: %s\n",crt_name);
return -1;
}
@@ -371,7 +372,7 @@ int check_symbols(struct elf_module *module)
{
// It's not an error - at relocation, the most recent symbol
// will be considered
- DBG_PRINT("Info: Symbol %s is defined more than once\n", crt_name);
+ dprintf("Info: Symbol %s is defined more than once\n", crt_name);
}
}
//printf("symbol %s laoded from %d\n",crt_name,crt_sym->st_value);
@@ -393,7 +394,7 @@ int _module_unload(struct elf_module *module) {
struct module_dep *crt_dep, *tmp;
// Make sure nobody needs us
if (!module_unloadable(module)) {
- DBG_PRINT("Module is required by other modules.\n");
+ dprintf("Module is required by other modules.\n");
return -1;
}
@@ -409,9 +410,11 @@ int _module_unload(struct elf_module *module) {
if (module->module_addr != NULL) {
elf_free(module->module_addr);
- DBG_PRINT("%s MODULE %s UNLOADED\n", module->shallow ? "SHALLOW" : "",
+ dprintf("%s MODULE %s UNLOADED\n", module->shallow ? "SHALLOW" : "",
module->name);
}
+
+ dprintf("Unloading module %s\n", module->name);
// Release the module structure
free(module);
@@ -487,7 +490,7 @@ static Elf_Sym *module_find_symbol_gnu(const char *name, struct elf_module *modu
Elf_Word bitmask_nwords = *cr_word++;
if ((bitmask_nwords & (bitmask_nwords - 1)) != 0) {
- DBG_PRINT("Invalid GNU Hash structure\n");
+ dprintf("Invalid GNU Hash structure\n");
return NULL;
}
diff --git a/com32/lib/sys/module/elf_module.c b/com32/lib/sys/module/elf_module.c
index e3d9928a..e09a5402 100644
--- a/com32/lib/sys/module/elf_module.c
+++ b/com32/lib/sys/module/elf_module.c
@@ -29,12 +29,12 @@ static int check_header(Elf_Ehdr *elf_hdr) {
return res;
if (elf_hdr->e_type != MODULE_ELF_TYPE) {
- DBG_PRINT("The ELF file must be a shared object\n");
+ dprintf("The ELF file must be a shared object\n");
return -1;
}
if (elf_hdr->e_phoff == 0x00000000) {
- DBG_PRINT("PHT missing\n");
+ dprintf("PHT missing\n");
return -1;
}
@@ -188,7 +188,7 @@ int module_load(struct elf_module *module) {
// Do not allow duplicate modules
if (module_find(module->name) != NULL) {
- DBG_PRINT("Module %s is already loaded.\n", module->name);
+ dprintf("Module %s is already loaded.\n", module->name);
return EEXIST;
}
@@ -196,6 +196,7 @@ int module_load(struct elf_module *module) {
res = image_load(module);
if (res < 0) {
+ dprintf("Image load failed for %s\n", module->name);
return res;
}
@@ -281,7 +282,7 @@ int module_load(struct elf_module *module) {
image_unload(module);
/*
- DBG_PRINT("MODULE %s LOADED SUCCESSFULLY (main@%p, init@%p, exit@%p)\n",
+ dprintf("MODULE %s LOADED SUCCESSFULLY (main@%p, init@%p, exit@%p)\n",
module->name,
(module->main_func == NULL) ? NULL : *(module->main_func),
(module->init_func == NULL) ? NULL : *(module->init_func),
diff --git a/com32/lib/sys/module/exec.c b/com32/lib/sys/module/exec.c
index 18c8306d..84b96e01 100644
--- a/com32/lib/sys/module/exec.c
+++ b/com32/lib/sys/module/exec.c
@@ -169,6 +169,7 @@ int spawn_load(const char *name, int argc, char **argv)
if (get_module_type(module) == EXEC_MODULE) {
if (!argc || !argv || strcmp(argv[0], name)) {
+ dprintf("invalid args for %s\n", name);
res = -1;
goto out;
}
@@ -182,8 +183,10 @@ int spawn_load(const char *name, int argc, char **argv)
}
res = module_load(module);
- if (res != 0)
+ if (res != 0) {
+ dprintf("failed to load module %s\n", module->name);
goto out;
+ }
type = get_module_type(module);