diff options
author | johnlev <none@none> | 2006-05-09 04:32:25 -0700 |
---|---|---|
committer | johnlev <none@none> | 2006-05-09 04:32:25 -0700 |
commit | c168da277d64ace98b478c694fd808f783ce7d2e (patch) | |
tree | b19514d130bf1dfbb2ead3000c1e32cc32f260be /usr/src/tools/ctf/cvt/util.c | |
parent | 20e0c306d13b54840b7f8b12a43090fcb2bdbc04 (diff) | |
download | illumos-gate-c168da277d64ace98b478c694fd808f783ce7d2e.tar.gz |
6418593 ctfmerge error messages need improvement
Diffstat (limited to 'usr/src/tools/ctf/cvt/util.c')
-rw-r--r-- | usr/src/tools/ctf/cvt/util.c | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/usr/src/tools/ctf/cvt/util.c b/usr/src/tools/ctf/cvt/util.c index 6b4f4f2d9c..c7857fb1ab 100644 --- a/usr/src/tools/ctf/cvt/util.c +++ b/usr/src/tools/ctf/cvt/util.c @@ -61,24 +61,29 @@ streq(char *s1, char *s2) } int -findelfsecidx(Elf *elf, char *tofind) +findelfsecidx(Elf *elf, const char *file, const char *tofind) { Elf_Scn *scn = NULL; GElf_Ehdr ehdr; GElf_Shdr shdr; - if (gelf_getehdr(elf, &ehdr) == NULL) { - terminate("gelf_getehdr: %s\n", elf_errmsg(elf_errno())); - } + if (gelf_getehdr(elf, &ehdr) == NULL) + elfterminate(file, "Couldn't read ehdr"); while ((scn = elf_nextscn(elf, scn)) != NULL) { char *name; - if (gelf_getshdr(scn, &shdr) == NULL || - (name = elf_strptr(elf, ehdr.e_shstrndx, + if (gelf_getshdr(scn, &shdr) == NULL) { + elfterminate(file, + "Couldn't read header for section %d", + elf_ndxscn(scn)); + } + + if ((name = elf_strptr(elf, ehdr.e_shstrndx, (size_t)shdr.sh_name)) == NULL) { - terminate("gelf_getehdr: %s\n", - elf_errmsg(elf_errno())); + elfterminate(file, + "Couldn't get name for section %d", + elf_ndxscn(scn)); } if (strcmp(name, tofind) == 0) @@ -102,12 +107,6 @@ whine(char *type, char *format, va_list ap) } void -vaterminate(char *format, va_list ap) -{ - whine("ERROR", format, ap); -} - -void set_terminate_cleanup(void (*cleanup)()) { terminate_cleanup = cleanup; @@ -117,22 +116,35 @@ set_terminate_cleanup(void (*cleanup)()) void terminate(char *format, ...) { - if (format) { - va_list ap; + va_list ap; - va_start(ap, format); - whine("ERROR", format, ap); - va_end(ap); - } + va_start(ap, format); + whine("ERROR", format, ap); + va_end(ap); if (terminate_cleanup) terminate_cleanup(); + if (getenv("CTF_ABORT_ON_TERMINATE") != NULL) + abort(); exit(1); } /*PRINTFLIKE1*/ void +aborterr(char *format, ...) +{ + va_list ap; + + va_start(ap, format); + whine("ERROR", format, ap); + va_end(ap); + + abort(); +} + +/*PRINTFLIKE1*/ +void warning(char *format, ...) { va_list ap; @@ -193,7 +205,7 @@ elfterminate(const char *file, const char *fmt, ...) vsnprintf(msgbuf, sizeof (msgbuf), fmt, ap); va_end(ap); - terminate("%s: %s: %s\n", file, msgbuf, elf_errmsg(elf_errno())); + terminate("%s: %s: %s\n", file, msgbuf, elf_errmsg(-1)); } const char * |