summaryrefslogtreecommitdiff
path: root/usr/src/tools/ctf/cvt/util.c
diff options
context:
space:
mode:
authorjohnlev <none@none>2006-05-09 04:32:25 -0700
committerjohnlev <none@none>2006-05-09 04:32:25 -0700
commitc168da277d64ace98b478c694fd808f783ce7d2e (patch)
treeb19514d130bf1dfbb2ead3000c1e32cc32f260be /usr/src/tools/ctf/cvt/util.c
parent20e0c306d13b54840b7f8b12a43090fcb2bdbc04 (diff)
downloadillumos-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.c54
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 *