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:"