Mercurial > illumos > illumos-gate
changeset 14145:f40648257ac6
4000 pvs can't deal with extended sections
Reviewed by: Jason King <jason.brian.king@gmail.com>
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Approved by: Robert Mustacchi <rm@joyent.com>
author | Richard Lowe <richlowe@richlowe.net> |
---|---|
date | Tue, 06 Aug 2013 21:21:56 +0000 |
parents | 6f291eb437b9 |
children | 51c57658a98a |
files | usr/src/cmd/sgs/pvs/common/pvs.c usr/src/cmd/sgs/pvs/common/pvs.msg |
diffstat | 2 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/sgs/pvs/common/pvs.c Tue Aug 06 17:09:22 2013 -0400 +++ b/usr/src/cmd/sgs/pvs/common/pvs.c Tue Aug 06 21:21:56 2013 +0000 @@ -1090,6 +1090,7 @@ for (; optind < argc; optind++) { int derror = 0, nerror = 0, err; const char *file = argv[optind]; + size_t shnum = 0; if ((var = open(file, O_RDONLY)) == -1) { err = errno; @@ -1154,7 +1155,13 @@ * as elf_begin has already gone through all the overhead we * might as well set up the cache for every section. */ - if ((cache = calloc(ehdr.e_shnum, sizeof (Cache))) == NULL) { + if (elf_getshdrnum(elf, &shnum) == -1) { + (void) fprintf(stderr, MSG_ORIG(MSG_ELF_GETSHDRNUM), + cname, file, elf_errmsg(elf_errno())); + exit(1); + } + + if ((cache = calloc(shnum, sizeof (Cache))) == NULL) { int err = errno; (void) fprintf(stderr, MSG_INTL(MSG_SYS_MALLOC), cname, file, strerror(err));
--- a/usr/src/cmd/sgs/pvs/common/pvs.msg Tue Aug 06 17:09:22 2013 -0400 +++ b/usr/src/cmd/sgs/pvs/common/pvs.msg Tue Aug 06 21:21:56 2013 +0000 @@ -77,6 +77,7 @@ @ MSG_ELF_GETSCN "%s: %s: elf_getscn: %s\n" @ MSG_ELF_GETSHDR "%s: %s: elf_getshdr: %s\n" @ MSG_ELF_GETDATA "%s: %s: elf_getdata: %s\n" +@ MSG_ELF_GETSHDRNUM "%s: %s: elf_getshdrnum: %s\n" @ MSG_STR_EMPTY "" @ MSG_STR_OPTIONS "CdI:lnorsvN:"