|
|
c7ea89 |
commit 284f25c227d1b6c07e87f6336d3b6ff0533c85d7
|
|
|
c7ea89 |
Author: William Cohen <wcohen@redhat.com>
|
|
|
c7ea89 |
Date: Thu Jan 30 16:20:24 2014 -0500
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Use correct specification for signed and unsigned int
|
|
|
c7ea89 |
|
|
|
c7ea89 |
A run of cppcheck showed that some mismatches between the specfications
|
|
|
c7ea89 |
for sscanf and the variables being used to store the values. This corrects
|
|
|
c7ea89 |
those minor issues.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/components/lustre/linux-lustre.c b/src/components/lustre/linux-lustre.c
|
|
|
c7ea89 |
index 4f4fb7a..46899f2 100644
|
|
|
c7ea89 |
--- a/src/components/lustre/linux-lustre.c
|
|
|
c7ea89 |
+++ b/src/components/lustre/linux-lustre.c
|
|
|
c7ea89 |
@@ -334,13 +334,13 @@ read_lustre_counter( )
|
|
|
c7ea89 |
if (fgets(buffer,BUFSIZ,fff)==NULL) break;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if (strstr( buffer, "write_bytes" )) {
|
|
|
c7ea89 |
- sscanf(buffer,"%*s %*d %*s %*s %*d %*d %lld",&fs->write_cntr->value);
|
|
|
c7ea89 |
- SUBDBG("Read %lld write_bytes\n",fs->write_cntr->value);
|
|
|
c7ea89 |
+ sscanf(buffer,"%*s %*d %*s %*s %*d %*d %llu",&fs->write_cntr->value);
|
|
|
c7ea89 |
+ SUBDBG("Read %llu write_bytes\n",fs->write_cntr->value);
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if (strstr( buffer, "read_bytes" )) {
|
|
|
c7ea89 |
- sscanf(buffer,"%*s %*d %*s %*s %*d %*d %lld",&fs->read_cntr->value);
|
|
|
c7ea89 |
- SUBDBG("Read %lld read_bytes\n",fs->read_cntr->value);
|
|
|
c7ea89 |
+ sscanf(buffer,"%*s %*d %*s %*s %*d %*d %llu",&fs->read_cntr->value);
|
|
|
c7ea89 |
+ SUBDBG("Read %llu read_bytes\n",fs->read_cntr->value);
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
fclose(fff);
|
|
|
c7ea89 |
@@ -352,8 +352,8 @@ read_lustre_counter( )
|
|
|
c7ea89 |
if (fgets(buffer,BUFSIZ,fff)==NULL) break;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if (strstr( buffer, "read but discarded")) {
|
|
|
c7ea89 |
- sscanf(buffer,"%*s %*s %*s %lld",&fs->readahead_cntr->value);
|
|
|
c7ea89 |
- SUBDBG("Read %lld discared\n",fs->readahead_cntr->value);
|
|
|
c7ea89 |
+ sscanf(buffer,"%*s %*s %*s %llu",&fs->readahead_cntr->value);
|
|
|
c7ea89 |
+ SUBDBG("Read %llu discared\n",fs->readahead_cntr->value);
|
|
|
c7ea89 |
break;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
diff --git a/src/components/net/linux-net.c b/src/components/net/linux-net.c
|
|
|
c7ea89 |
index ad15d84..ba7563c 100644
|
|
|
c7ea89 |
--- a/src/components/net/linux-net.c
|
|
|
c7ea89 |
+++ b/src/components/net/linux-net.c
|
|
|
c7ea89 |
@@ -240,7 +240,7 @@ read_net_counters( long long *values )
|
|
|
c7ea89 |
SUBDBG("Interface <%s> not found\n", ifname);
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
nf = sscanf( data,
|
|
|
c7ea89 |
- "%llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
|
|
|
c7ea89 |
+ "%lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld\n",
|
|
|
c7ea89 |
&values[if_bidx + 0], &values[if_bidx + 1],
|
|
|
c7ea89 |
&values[if_bidx + 2], &values[if_bidx + 3],
|
|
|
c7ea89 |
&values[if_bidx + 4], &values[if_bidx + 5],
|
|
|
c7ea89 |
@@ -251,7 +251,7 @@ read_net_counters( long long *values )
|
|
|
c7ea89 |
&values[if_bidx + 14], &values[if_bidx + 15]);
|
|
|
c7ea89 |
|
|
|
c7ea89 |
SUBDBG("\nRead "
|
|
|
c7ea89 |
- "%llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
|
|
|
c7ea89 |
+ "%lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld\n",
|
|
|
c7ea89 |
values[if_bidx + 0], values[if_bidx + 1],
|
|
|
c7ea89 |
values[if_bidx + 2], values[if_bidx + 3],
|
|
|
c7ea89 |
values[if_bidx + 4], values[if_bidx + 5],
|
|
|
c7ea89 |
commit c810cd0d90baead96838145004545cc156b7ab77
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Tue Aug 13 14:13:55 2013 -0400
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Close resource leaks
|
|
|
c7ea89 |
|
|
|
c7ea89 |
User dcb reported several resource leaks in trac bug #184.
|
|
|
c7ea89 |
--------------------
|
|
|
c7ea89 |
I just ran the static analysis checker "cppcheck" over the source
|
|
|
c7ea89 |
code of papi-5.2.0
|
|
|
c7ea89 |
|
|
|
c7ea89 |
It said
|
|
|
c7ea89 |
|
|
|
c7ea89 |
1. [linux-memory.c:711]: (error) Resource leak: sys_cpu
|
|
|
c7ea89 |
|
|
|
c7ea89 |
2. [papi_preset.c:735]: (error) Resource leak: fp
|
|
|
c7ea89 |
|
|
|
c7ea89 |
3. [components/micpower/linux-micpower.c:166]: (error) Resource leak: fp
|
|
|
c7ea89 |
|
|
|
c7ea89 |
I've checked them all and they all look like resource leaks to me.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Suggest code rework.
|
|
|
c7ea89 |
----------------------------------
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/components/micpower/linux-micpower.c b/src/components/micpower/linux-micpower.c
|
|
|
c7ea89 |
index 896e75f..4da4577 100644
|
|
|
c7ea89 |
--- a/src/components/micpower/linux-micpower.c
|
|
|
c7ea89 |
+++ b/src/components/micpower/linux-micpower.c
|
|
|
c7ea89 |
@@ -163,6 +163,7 @@ read_sysfs_file( long long* counts)
|
|
|
c7ea89 |
retval&= fscanf(fp, "%lld %lld %lld", &counts[i], &counts[i+1], &counts[i+2] );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
+ fclose(fp);
|
|
|
c7ea89 |
return retval;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/linux-memory.c b/src/linux-memory.c
|
|
|
c7ea89 |
index 6c69fbd..bf6c420 100644
|
|
|
c7ea89 |
--- a/src/linux-memory.c
|
|
|
c7ea89 |
+++ b/src/linux-memory.c
|
|
|
c7ea89 |
@@ -707,6 +707,7 @@ sparc_sysfs_cpu_attr( char *name, char **result )
|
|
|
c7ea89 |
return 0;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
+ closedir( sys_cpu );
|
|
|
c7ea89 |
return -1;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/papi_preset.c b/src/papi_preset.c
|
|
|
c7ea89 |
index 9485793..603c8df 100644
|
|
|
c7ea89 |
--- a/src/papi_preset.c
|
|
|
c7ea89 |
+++ b/src/papi_preset.c
|
|
|
c7ea89 |
@@ -732,12 +732,14 @@ _xml_papi_hwi_setup_all_presets( char *arch, hwi_dev_notes_t * notes )
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( !p ) {
|
|
|
c7ea89 |
PAPIERROR( "Couldn't allocate memory for XML parser." );
|
|
|
c7ea89 |
+ fclose(fp);
|
|
|
c7ea89 |
return ( PAPI_ESYS );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
XML_SetElementHandler( p, _xml_start, _xml_end );
|
|
|
c7ea89 |
XML_SetCharacterDataHandler( p, _xml_content );
|
|
|
c7ea89 |
if ( fp == NULL ) {
|
|
|
c7ea89 |
PAPIERROR( "Error opening Preset XML file." );
|
|
|
c7ea89 |
+ fclose(fp);
|
|
|
c7ea89 |
return ( PAPI_ESYS );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
@@ -749,11 +751,13 @@ _xml_papi_hwi_setup_all_presets( char *arch, hwi_dev_notes_t * notes )
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( buffer == NULL ) {
|
|
|
c7ea89 |
PAPIERROR( "Couldn't allocate memory for XML buffer." );
|
|
|
c7ea89 |
+ fclose(fp);
|
|
|
c7ea89 |
return ( PAPI_ESYS );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
len = fread( buffer, 1, BUFFSIZE, fp );
|
|
|
c7ea89 |
if ( ferror( fp ) ) {
|
|
|
c7ea89 |
PAPIERROR( "XML read error." );
|
|
|
c7ea89 |
+ fclose(fp);
|
|
|
c7ea89 |
return ( PAPI_ESYS );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
done = feof( fp );
|
|
|
c7ea89 |
@@ -761,10 +765,13 @@ _xml_papi_hwi_setup_all_presets( char *arch, hwi_dev_notes_t * notes )
|
|
|
c7ea89 |
PAPIERROR( "Parse error at line %d:\n%s\n",
|
|
|
c7ea89 |
XML_GetCurrentLineNumber( p ),
|
|
|
c7ea89 |
XML_ErrorString( XML_GetErrorCode( p ) ) );
|
|
|
c7ea89 |
+ fclose(fp);
|
|
|
c7ea89 |
return ( PAPI_ESYS );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
- if ( error )
|
|
|
c7ea89 |
+ if ( error ) {
|
|
|
c7ea89 |
+ fclose(fp);
|
|
|
c7ea89 |
return ( PAPI_ESYS );
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
} while ( !done );
|
|
|
c7ea89 |
XML_ParserFree( p );
|
|
|
c7ea89 |
fclose( fp );
|
|
|
c7ea89 |
commit e5b335740fad31cd230295508f2a4e9fb77a2878
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Fri Nov 8 15:15:28 2013 -0500
|
|
|
c7ea89 |
|
|
|
c7ea89 |
multiplex_cost: check return value on PAPI_set_opt
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Thanks to Will Cohen for reporting based upon output of coverity.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/utils/multiplex_cost.c b/src/utils/multiplex_cost.c
|
|
|
c7ea89 |
index 8fbd7a4..2f8216a 100644
|
|
|
c7ea89 |
--- a/src/utils/multiplex_cost.c
|
|
|
c7ea89 |
+++ b/src/utils/multiplex_cost.c
|
|
|
c7ea89 |
@@ -112,7 +112,8 @@ init_test(int SoftwareMPX, int KernelMPX, int* Events)
|
|
|
c7ea89 |
option.multiplex.eventset = SoftwareMPX;
|
|
|
c7ea89 |
option.multiplex.ns = itimer.itimer.ns;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- PAPI_set_opt( PAPI_MULTIPLEX, &option );
|
|
|
c7ea89 |
+ if ( (retval = PAPI_set_opt( PAPI_MULTIPLEX, &option )) != PAPI_OK )
|
|
|
c7ea89 |
+ test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval);
|
|
|
c7ea89 |
|
|
|
c7ea89 |
for (i = 0; i < options.min - 1; i++) {
|
|
|
c7ea89 |
if ( options.kernel_mpx ) {
|
|
|
c7ea89 |
@@ -249,7 +250,8 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
option.multiplex.eventset = SoftwareMPX;
|
|
|
c7ea89 |
option.multiplex.ns = itimer.itimer.ns;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- PAPI_set_opt( PAPI_MULTIPLEX, &option );
|
|
|
c7ea89 |
+ if ( PAPI_OK != (retval = PAPI_set_opt( PAPI_MULTIPLEX, &option )))
|
|
|
c7ea89 |
+ test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval);
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( !options.kernel_mpx && !options.force_sw ) {
|
|
|
c7ea89 |
test_fail(__FILE__, __LINE__, "No tests to run.", -1);
|
|
|
c7ea89 |
commit 83c31e25409040aac8178a4a3f89111efd060cc0
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Fri Nov 8 16:10:18 2013 -0500
|
|
|
c7ea89 |
|
|
|
c7ea89 |
perf_event.c: Check return value of ioctl
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Thanks to Will Cohen for reporting based upon output of coverity.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/components/perf_event/perf_event.c b/src/components/perf_event/perf_event.c
|
|
|
c7ea89 |
index 4b52cce..b4b2656 100644
|
|
|
c7ea89 |
--- a/src/components/perf_event/perf_event.c
|
|
|
c7ea89 |
+++ b/src/components/perf_event/perf_event.c
|
|
|
c7ea89 |
@@ -1909,7 +1909,9 @@ _pe_dispatch_timer( int n, hwd_siginfo_t *info, void *uc)
|
|
|
c7ea89 |
return;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- ioctl( fd, PERF_EVENT_IOC_DISABLE, NULL );
|
|
|
c7ea89 |
+ if (ioctl( fd, PERF_EVENT_IOC_DISABLE, NULL ) == -1 ) {
|
|
|
c7ea89 |
+ PAPIERROR("ioctl(PERF_EVENT_IOC_DISABLE) failed.\n");
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( ( thread->running_eventset[cidx]->state & PAPI_PROFILING ) &&
|
|
|
c7ea89 |
!( thread->running_eventset[cidx]->profile.flags &
|
|
|
c7ea89 |
commit 60fb1dd4497df7d0ea77d88f586142ceb3e22b32
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Thu Nov 21 13:18:49 2013 -0500
|
|
|
c7ea89 |
|
|
|
c7ea89 |
command_line utility: Initialize a variable
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Initialize data_type to PAPI_DATATYPE_INT64
|
|
|
c7ea89 |
Addresses a coverity error
|
|
|
c7ea89 |
Error: COMPILER_WARNING: [#def19]
|
|
|
c7ea89 |
papi-5.2.0/src/utils/command_line.c:133:4: warning: 'data_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
|
|
|
c7ea89 |
switch (data_type) {
|
|
|
c7ea89 |
^
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/utils/command_line.c b/src/utils/command_line.c
|
|
|
c7ea89 |
index 36f7df5..2f4a816 100644
|
|
|
c7ea89 |
--- a/src/utils/command_line.c
|
|
|
c7ea89 |
+++ b/src/utils/command_line.c
|
|
|
c7ea89 |
@@ -56,7 +56,7 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
char *success;
|
|
|
c7ea89 |
PAPI_event_info_t info;
|
|
|
c7ea89 |
int EventSet = PAPI_NULL;
|
|
|
c7ea89 |
- int i, j, data_type, event;
|
|
|
c7ea89 |
+ int i, j, event, data_type = PAPI_DATATYPE_INT64;
|
|
|
c7ea89 |
int u_format = 0;
|
|
|
c7ea89 |
int hex_format = 0;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
commit e43b1138296866795c5db1a6dcd123d312af1b46
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Wed Jul 23 15:40:47 2014 -0400
|
|
|
c7ea89 |
|
|
|
c7ea89 |
native_avail.c: Bug fixes and updates
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Thanks to Gary Mohr
|
|
|
c7ea89 |
--------------------------------------------------
|
|
|
c7ea89 |
This patch fixes a couple of problems found in the papi_native_avail program.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
First change fixes a problem introduced when the -validate option was added. This
|
|
|
c7ea89 |
option causes events to get added to an event set but never removes them. This change
|
|
|
c7ea89 |
will remove them if the add works. This change also fixes a coverity detected error
|
|
|
c7ea89 |
where the return value from PAPI_destroy_eventset was being ignored.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Second change improves the delimitor check when separating the event description from
|
|
|
c7ea89 |
the event mask description. The previous check only looked for a colon but some of the
|
|
|
c7ea89 |
event descriptions contain a colon so descriptions would get displayed incorrectly. The
|
|
|
c7ea89 |
new check finds the "masks:" substring which is what papi inserts to separate these two
|
|
|
c7ea89 |
descriptions.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Third change adds code to allow the user to enter events of the form pmu:::event or
|
|
|
c7ea89 |
pmu::event when using the -e option in the program.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/utils/native_avail.c b/src/utils/native_avail.c
|
|
|
c7ea89 |
index 2073ed7..59fc1b4 100644
|
|
|
c7ea89 |
--- a/src/utils/native_avail.c
|
|
|
c7ea89 |
+++ b/src/utils/native_avail.c
|
|
|
c7ea89 |
@@ -227,13 +232,19 @@ parse_unit_masks( PAPI_event_info_t * info )
|
|
|
c7ea89 |
if ( ( pmask = strchr( ptr, ':' ) ) == NULL ) {
|
|
|
c7ea89 |
return ( 0 );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
- memmove( info->symbol, pmask, ( strlen( pmask ) + 1 ) * sizeof ( char ) );
|
|
|
c7ea89 |
- pmask = strchr( info->long_descr, ':' );
|
|
|
c7ea89 |
- if ( pmask == NULL )
|
|
|
c7ea89 |
+ memmove( info->symbol, pmask, ( strlen(pmask) + 1 ) * sizeof(char) );
|
|
|
c7ea89 |
+
|
|
|
c7ea89 |
+ // The description field contains the event description followed by a tag 'masks:'
|
|
|
c7ea89 |
+ // and then the mask description (if there was a mask with this event). The following
|
|
|
c7ea89 |
+ // code isolates the mask description part of this information.
|
|
|
c7ea89 |
+
|
|
|
c7ea89 |
+ pmask = strstr( info->long_descr, "masks:" );
|
|
|
c7ea89 |
+ if ( pmask == NULL ) {
|
|
|
c7ea89 |
info->long_descr[0] = 0;
|
|
|
c7ea89 |
- else
|
|
|
c7ea89 |
- memmove( info->long_descr, pmask + sizeof ( char ),
|
|
|
c7ea89 |
- ( strlen( pmask ) + 1 ) * sizeof ( char ) );
|
|
|
c7ea89 |
+ } else {
|
|
|
c7ea89 |
+ pmask += 6; // bump pointer past 'masks:' identifier in description
|
|
|
c7ea89 |
+ memmove( info->long_descr, pmask, (strlen(pmask) + 1) * sizeof(char) );
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
return ( 1 );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
@@ -295,8 +306,20 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
"Event name:", info.symbol);
|
|
|
c7ea89 |
printf( "%-29s|%s|\n", "Description:", info.long_descr );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
+ /* handle the PAPI component-style events which have a component:::event type */
|
|
|
c7ea89 |
+ char *ptr;
|
|
|
c7ea89 |
+ if ((ptr=strstr(flags.name, ":::"))) {
|
|
|
c7ea89 |
+ ptr+=3;
|
|
|
c7ea89 |
+ /* handle libpfm4-style events which have a pmu::event type event name */
|
|
|
c7ea89 |
+ } else if ((ptr=strstr(flags.name, "::"))) {
|
|
|
c7ea89 |
+ ptr+=2;
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
+ else {
|
|
|
c7ea89 |
+ ptr=flags.name;
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
+
|
|
|
c7ea89 |
/* if unit masks exist but none specified, process all */
|
|
|
c7ea89 |
- if ( !strchr( flags.name, ':' ) ) {
|
|
|
c7ea89 |
+ if ( !strchr( ptr, ':' ) ) {
|
|
|
c7ea89 |
if ( PAPI_enum_event( &i, PAPI_NTV_ENUM_UMASKS ) == PAPI_OK ) {
|
|
|
c7ea89 |
printf( "\nUnit Masks:\n" );
|
|
|
c7ea89 |
do {
|
|
|
c7ea89 |
commit 74041b3ebcfc69575efb4ff830b9dc2f651b458b
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Fri Aug 29 14:44:08 2014 -0400
|
|
|
c7ea89 |
|
|
|
c7ea89 |
event_info utility: address coverity defect
|
|
|
c7ea89 |
|
|
|
c7ea89 |
From Gary Mohr
|
|
|
c7ea89 |
--------------
|
|
|
c7ea89 |
This patch corrects a defect reported by Coverity. The defect reported
|
|
|
c7ea89 |
that the call to PAPI_enum_cmp_event was setting retval which was never
|
|
|
c7ea89 |
getting used before it got set again by a call to PAPI_get_event_info.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
After looking at the code, I decided that we should not be trying to get
|
|
|
c7ea89 |
the next event inside a loop that is enumerating masks for the current
|
|
|
c7ea89 |
event. It makes more sense to break out of the loop to get masks and
|
|
|
c7ea89 |
let the outer loop that is walking the events get the next event.
|
|
|
c7ea89 |
--------------
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/utils/event_info.c b/src/utils/event_info.c
|
|
|
c7ea89 |
index d1010b6..1de375f 100644
|
|
|
c7ea89 |
--- a/src/utils/event_info.c
|
|
|
c7ea89 |
+++ b/src/utils/event_info.c
|
|
|
c7ea89 |
@@ -237,8 +237,7 @@ enum_native_events( FILE * f, int cidx)
|
|
|
c7ea89 |
retval = PAPI_get_event_info( k, &info );
|
|
|
c7ea89 |
if ( retval == PAPI_OK ) {
|
|
|
c7ea89 |
if ( test_event( k )!=PAPI_OK ) {
|
|
|
c7ea89 |
- retval = PAPI_enum_cmp_event( &i, PAPI_ENUM_EVENTS, cidx );
|
|
|
c7ea89 |
- continue;
|
|
|
c7ea89 |
+ break;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
xmlize_event( f, &info, -1 );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
commit 07990f85c706221f41d8b27bb2aebfc6c4874dbd
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Tue Sep 2 11:54:07 2014 -0400
|
|
|
c7ea89 |
|
|
|
c7ea89 |
ctests/ Address coverity reported defects
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Thanks to Gary Mohr for the patch
|
|
|
c7ea89 |
---------------------------------
|
|
|
c7ea89 |
he contents of this patch file fix defects reported by Coverity in the
|
|
|
c7ea89 |
directory 'papi/src/ctests'.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
The defect reported in branches.c was that a comparison between
|
|
|
c7ea89 |
different kinds of data was being done.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
The defect reported in calibrate.c was that the variable
|
|
|
c7ea89 |
'papi_event_str' could end up without a null terminator.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
The defects reported in describe.c, get_event_component.c, and
|
|
|
c7ea89 |
krentel_pthreads.c were that return values from function calls were
|
|
|
c7ea89 |
being stored in a variable but never being used.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
I also did a little clean-up in describe.c. This test had been failing
|
|
|
c7ea89 |
for me on Intel NHM and SNBEP but now it runs and reports that it
|
|
|
c7ea89 |
PASSED.
|
|
|
c7ea89 |
---------------------------------
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/ctests/branches.c b/src/ctests/branches.c
|
|
|
c7ea89 |
index 930329e..5292323 100644
|
|
|
c7ea89 |
--- a/src/ctests/branches.c
|
|
|
c7ea89 |
+++ b/src/ctests/branches.c
|
|
|
c7ea89 |
@@ -94,7 +94,7 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
/* Find a reasonable number of iterations (each
|
|
|
c7ea89 |
* event active 20 times) during the measurement
|
|
|
c7ea89 |
*/
|
|
|
c7ea89 |
- t2 = 10000 * 20 * nevents; /* Target: 10000 usec/multiplex, 20 repeats */
|
|
|
c7ea89 |
+ t2 = (long long)(10000 * 20) * nevents; /* Target: 10000 usec/multiplex, 20 repeats */
|
|
|
c7ea89 |
if ( t2 > 30e6 )
|
|
|
c7ea89 |
test_skip( __FILE__, __LINE__, "This test takes too much time",
|
|
|
c7ea89 |
retval );
|
|
|
c7ea89 |
diff --git a/src/ctests/calibrate.c b/src/ctests/calibrate.c
|
|
|
c7ea89 |
index a3dea0a..e370ba9 100644
|
|
|
c7ea89 |
--- a/src/ctests/calibrate.c
|
|
|
c7ea89 |
+++ b/src/ctests/calibrate.c
|
|
|
c7ea89 |
@@ -160,7 +160,8 @@ main( int argc, char *argv[] )
|
|
|
c7ea89 |
print_help( argv );
|
|
|
c7ea89 |
exit( 1 );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
- strncpy( papi_event_str, argv[i + 1], sizeof ( papi_event_str ) );
|
|
|
c7ea89 |
+ strncpy( papi_event_str, argv[i + 1], sizeof ( papi_event_str ) - 1);
|
|
|
c7ea89 |
+ papi_event_str[sizeof ( papi_event_str )-1] = '\0';
|
|
|
c7ea89 |
i++;
|
|
|
c7ea89 |
} else if ( strstr( argv[i], "-d" ) )
|
|
|
c7ea89 |
double_precision = 1;
|
|
|
c7ea89 |
diff --git a/src/ctests/describe.c b/src/ctests/describe.c
|
|
|
c7ea89 |
index d29bf72..f03309e 100644
|
|
|
c7ea89 |
--- a/src/ctests/describe.c
|
|
|
c7ea89 |
+++ b/src/ctests/describe.c
|
|
|
c7ea89 |
@@ -25,7 +25,6 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
int retval;
|
|
|
c7ea89 |
long long g1[2];
|
|
|
c7ea89 |
int eventcode = PAPI_TOT_INS;
|
|
|
c7ea89 |
- char eventname[PAPI_MAX_STR_LEN];
|
|
|
c7ea89 |
PAPI_event_info_t info, info1, info2;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
tests_quiet( argc, argv ); /* Set TESTS_QUIET variable */
|
|
|
c7ea89 |
@@ -52,18 +51,19 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
/* Case 0, no info, should fail */
|
|
|
c7ea89 |
- eventname[0] = '\0';
|
|
|
c7ea89 |
eventcode = 0;
|
|
|
c7ea89 |
/*
|
|
|
c7ea89 |
if ( ( retval = PAPI_describe_event(eventname,(int *)&eventcode,eventdesc) ) == PAPI_OK)
|
|
|
c7ea89 |
test_fail(__FILE__,__LINE__,"PAPI_describe_event",retval);
|
|
|
c7ea89 |
*/
|
|
|
c7ea89 |
+ if (!TESTS_QUIET) {
|
|
|
c7ea89 |
+ printf("This test expects a 'PAPI Error' to be returned from this PAPI call.\n");
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
if ( ( retval = PAPI_get_event_info( eventcode, &info ) ) == PAPI_OK )
|
|
|
c7ea89 |
test_fail( __FILE__, __LINE__, "PAPI_get_event_info", retval );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
/* Case 1, fill in name field. */
|
|
|
c7ea89 |
eventcode = PAPI_TOT_INS;
|
|
|
c7ea89 |
- eventname[0] = '\0';
|
|
|
c7ea89 |
/*
|
|
|
c7ea89 |
if ( ( retval = PAPI_describe_event(eventname,(int *)&eventcode,eventdesc) ) != PAPI_OK)
|
|
|
c7ea89 |
test_fail(__FILE__,__LINE__,"PAPI_describe_event",retval);
|
|
|
c7ea89 |
@@ -85,11 +85,9 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
if ( ( retval = PAPI_describe_event(eventname,(int *)&eventcode,eventdesc) ) != PAPI_OK)
|
|
|
c7ea89 |
test_fail(__FILE__,__LINE__,"PAPI_describe_event",retval);
|
|
|
c7ea89 |
*/
|
|
|
c7ea89 |
- strcpy( eventname, info1.symbol );
|
|
|
c7ea89 |
- if ( ( retval =
|
|
|
c7ea89 |
- PAPI_event_name_to_code( eventname,
|
|
|
c7ea89 |
- ( int * ) &eventcode ) ) != PAPI_OK )
|
|
|
c7ea89 |
+ if ( ( retval = PAPI_event_name_to_code( info1.symbol, ( int * ) &eventcode ) ) != PAPI_OK ) {
|
|
|
c7ea89 |
test_fail( __FILE__, __LINE__, "PAPI_event_name_to_code", retval );
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( eventcode != PAPI_TOT_INS )
|
|
|
c7ea89 |
test_fail( __FILE__, __LINE__,
|
|
|
c7ea89 |
diff --git a/src/ctests/get_event_component.c b/src/ctests/get_event_component.c
|
|
|
c7ea89 |
index ae1bdd9..874f394 100644
|
|
|
c7ea89 |
--- a/src/ctests/get_event_component.c
|
|
|
c7ea89 |
+++ b/src/ctests/get_event_component.c
|
|
|
c7ea89 |
@@ -42,8 +42,7 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
test_fail( __FILE__, __LINE__, "PAPI_get_component_info", 2 );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- if (cmpinfo->disabled)
|
|
|
c7ea89 |
- {
|
|
|
c7ea89 |
+ if (cmpinfo->disabled && !TESTS_QUIET) {
|
|
|
c7ea89 |
printf( "Name: %-23s %s\n", cmpinfo->name ,cmpinfo->description);
|
|
|
c7ea89 |
printf(" \\-> Disabled: %s\n",cmpinfo->disabled_reason);
|
|
|
c7ea89 |
continue;
|
|
|
c7ea89 |
@@ -55,7 +54,12 @@ main( int argc, char **argv )
|
|
|
c7ea89 |
if (retval!=PAPI_OK) continue;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
do {
|
|
|
c7ea89 |
- retval = PAPI_get_event_info( i, &info );
|
|
|
c7ea89 |
+ if (PAPI_get_event_info( i, &info ) != PAPI_OK) {
|
|
|
c7ea89 |
+ if (!TESTS_QUIET) {
|
|
|
c7ea89 |
+ printf("Getting information about event: %#x failed\n", i);
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
+ continue;
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
our_cid=PAPI_get_event_component(i);
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if (our_cid!=cid) {
|
|
|
c7ea89 |
diff --git a/src/ctests/krentel_pthreads.c b/src/ctests/krentel_pthreads.c
|
|
|
c7ea89 |
index a8b97ff..2417976 100644
|
|
|
c7ea89 |
--- a/src/ctests/krentel_pthreads.c
|
|
|
c7ea89 |
+++ b/src/ctests/krentel_pthreads.c
|
|
|
c7ea89 |
@@ -125,11 +125,18 @@ my_thread( void *v )
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
PAPI_stop( EventSet, &value );
|
|
|
c7ea89 |
- PAPI_remove_event( EventSet, EVENT );
|
|
|
c7ea89 |
- PAPI_destroy_eventset( &EventSet );
|
|
|
c7ea89 |
+ retval = PAPI_remove_event( EventSet, EVENT );
|
|
|
c7ea89 |
+ if ( PAPI_OK != retval ) {
|
|
|
c7ea89 |
+ test_fail( __FILE__, __LINE__, "PAPI_remove_event", retval );
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
+ retval = PAPI_destroy_eventset( &EventSet );
|
|
|
c7ea89 |
+ if ( PAPI_OK != retval ) {
|
|
|
c7ea89 |
+ test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval );
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
retval = PAPI_unregister_thread( );
|
|
|
c7ea89 |
- if ( retval != PAPI_OK )
|
|
|
c7ea89 |
+ if ( PAPI_OK != retval ) {
|
|
|
c7ea89 |
test_fail( __FILE__, __LINE__, "PAPI_unregister_thread", retval );
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
return ( NULL );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
commit 266c61a4d4e5beee43cce7e3ef1d64da202c0b09
|
|
|
c7ea89 |
Author: James Ralph <ralph@icl.utk.edu>
|
|
|
c7ea89 |
Date: Fri Sep 19 17:46:42 2014 -0400
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Address coverity reported issues in src/
|
|
|
c7ea89 |
|
|
|
c7ea89 |
Thanks to Gary Mohr
|
|
|
c7ea89 |
-------------------
|
|
|
c7ea89 |
Changes in this patch file:
|
|
|
c7ea89 |
|
|
|
c7ea89 |
linux-common.c: Add code to insure that cpu info vendor_string and
|
|
|
c7ea89 |
model_string buffers are NULL terminated strings. Also insure that
|
|
|
c7ea89 |
the value which gets read into mdi->exe_info.fullname gets NULL
|
|
|
c7ea89 |
terminated. This makes it safe to use the 'strxxx' functions on the
|
|
|
c7ea89 |
value (which is done immediately after it is read in).
|
|
|
c7ea89 |
|
|
|
c7ea89 |
papi_hl.c: Fix call to _hl_rate_calls() where the third argument was
|
|
|
c7ea89 |
not the correct data type.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
papi_internal.c: Add code to insure that event info name, short_desc,
|
|
|
c7ea89 |
and long_desc buffers are NULL terminated strings.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
papi_user_events.c: While processing define symbols, insure that the
|
|
|
c7ea89 |
'local_line', 'name', and 'value'
|
|
|
c7ea89 |
buffers get NULL terminated (so we can safely use
|
|
|
c7ea89 |
'strxxx' functions on them).
|
|
|
c7ea89 |
Insure that the 'symbol' field in the user defined
|
|
|
c7ea89 |
event ends up NULL terminated.
|
|
|
c7ea89 |
Rearrange code to avoid falling through from one
|
|
|
c7ea89 |
case to the next in a switch statement.
|
|
|
c7ea89 |
Coverity flagged falling out the bottom of a case
|
|
|
c7ea89 |
statement as a potential defect but it
|
|
|
c7ea89 |
was doing what it should.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
sw_multiplex.c: Unnecessary test. The value of ESI can not be NULL
|
|
|
c7ea89 |
when this code is reached.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
x86_cpuid_info.c: The variable need_leaf4 is set but not used. The
|
|
|
c7ea89 |
only place it gets set returns without
|
|
|
c7ea89 |
checking its value. The place that checks its value
|
|
|
c7ea89 |
never could have set its value non-zero.
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/linux-common.c b/src/linux-common.c
|
|
|
c7ea89 |
index 4adc232..614a83c 100644
|
|
|
c7ea89 |
--- a/src/linux-common.c
|
|
|
c7ea89 |
+++ b/src/linux-common.c
|
|
|
c7ea89 |
@@ -171,6 +171,7 @@ int
|
|
|
c7ea89 |
_linux_get_cpu_info( PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz )
|
|
|
c7ea89 |
{
|
|
|
c7ea89 |
int tmp, retval = PAPI_OK;
|
|
|
c7ea89 |
+ unsigned int strSize;
|
|
|
c7ea89 |
char maxargs[PAPI_HUGE_STR_LEN], *t, *s;
|
|
|
c7ea89 |
float mhz = 0.0;
|
|
|
c7ea89 |
FILE *f;
|
|
|
c7ea89 |
@@ -197,14 +198,17 @@ _linux_get_cpu_info( PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz )
|
|
|
c7ea89 |
/* Vendor Name and Vendor Code */
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
s = search_cpu_info( f, "vendor_id", maxargs );
|
|
|
c7ea89 |
+ strSize = sizeof(hwinfo->vendor_string);
|
|
|
c7ea89 |
if ( s && ( t = strchr( s + 2, '\n' ) ) ) {
|
|
|
c7ea89 |
*t = '\0';
|
|
|
c7ea89 |
+ if (strlen(s+2) >= strSize-1) s[strSize+1] = '\0';
|
|
|
c7ea89 |
strcpy( hwinfo->vendor_string, s + 2 );
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
s = search_cpu_info( f, "vendor", maxargs );
|
|
|
c7ea89 |
if ( s && ( t = strchr( s + 2, '\n' ) ) ) {
|
|
|
c7ea89 |
*t = '\0';
|
|
|
c7ea89 |
+ if (strlen(s+2) >= strSize-1) s[strSize+1] = '\0';
|
|
|
c7ea89 |
strcpy( hwinfo->vendor_string, s + 2 );
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
@@ -212,6 +216,7 @@ _linux_get_cpu_info( PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz )
|
|
|
c7ea89 |
if ( s && ( t = strchr( s + 2, '\n' ) ) ) {
|
|
|
c7ea89 |
*t = '\0';
|
|
|
c7ea89 |
s = strtok( s + 2, " " );
|
|
|
c7ea89 |
+ if (strlen(s) >= strSize-1) s[strSize-1] = '\0';
|
|
|
c7ea89 |
strcpy( hwinfo->vendor_string, s );
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
@@ -258,14 +263,17 @@ _linux_get_cpu_info( PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz )
|
|
|
c7ea89 |
/* Model Name */
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
s = search_cpu_info( f, "model name", maxargs );
|
|
|
c7ea89 |
+ strSize = sizeof(hwinfo->model_string);
|
|
|
c7ea89 |
if ( s && ( t = strchr( s + 2, '\n' ) ) ) {
|
|
|
c7ea89 |
*t = '\0';
|
|
|
c7ea89 |
+ if (strlen(s+2) >= strSize-1) s[strSize+1] = '\0';
|
|
|
c7ea89 |
strcpy( hwinfo->model_string, s + 2 );
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
s = search_cpu_info( f, "family", maxargs );
|
|
|
c7ea89 |
if ( s && ( t = strchr( s + 2, '\n' ) ) ) {
|
|
|
c7ea89 |
*t = '\0';
|
|
|
c7ea89 |
+ if (strlen(s+2) >= strSize-1) s[strSize+1] = '\0';
|
|
|
c7ea89 |
strcpy( hwinfo->model_string, s + 2 );
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
@@ -274,6 +282,7 @@ _linux_get_cpu_info( PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz )
|
|
|
c7ea89 |
*t = '\0';
|
|
|
c7ea89 |
strtok( s + 2, " " );
|
|
|
c7ea89 |
s = strtok( NULL, " " );
|
|
|
c7ea89 |
+ if (strlen(s) >= strSize-1) s[strSize-1] = '\0';
|
|
|
c7ea89 |
strcpy( hwinfo->model_string, s );
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
rewind( f );
|
|
|
c7ea89 |
@@ -282,6 +291,7 @@ _linux_get_cpu_info( PAPI_hw_info_t *hwinfo, int *cpuinfo_mhz )
|
|
|
c7ea89 |
*t = '\0';
|
|
|
c7ea89 |
/* get just the first token */
|
|
|
c7ea89 |
s = strtok( s + 2, " " );
|
|
|
c7ea89 |
+ if (strlen(s) >= strSize-1) s[strSize-1] = '\0';
|
|
|
c7ea89 |
strcpy( hwinfo->model_string, s );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
@@ -444,15 +454,18 @@ _linux_get_system_info( papi_mdi_t *mdi ) {
|
|
|
c7ea89 |
mdi->pid = pid;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
sprintf( maxargs, "/proc/%d/exe", ( int ) pid );
|
|
|
c7ea89 |
- if ( readlink( maxargs, mdi->exe_info.fullname, PAPI_HUGE_STR_LEN ) < 0 ) {
|
|
|
c7ea89 |
+ if ( (retval = readlink( maxargs, mdi->exe_info.fullname, PAPI_HUGE_STR_LEN-1 )) < 0 ) {
|
|
|
c7ea89 |
PAPIERROR( "readlink(%s) returned < 0", maxargs );
|
|
|
c7ea89 |
return PAPI_ESYS;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
+ if (retval > PAPI_HUGE_STR_LEN-1) retval=PAPI_HUGE_STR_LEN-1;
|
|
|
c7ea89 |
+ mdi->exe_info.fullname[retval] = '\0';
|
|
|
c7ea89 |
|
|
|
c7ea89 |
/* Careful, basename can modify it's argument */
|
|
|
c7ea89 |
|
|
|
c7ea89 |
strcpy( maxargs, mdi->exe_info.fullname );
|
|
|
c7ea89 |
- strcpy( mdi->exe_info.address_info.name, basename( maxargs ) );
|
|
|
c7ea89 |
+ strncpy( mdi->exe_info.address_info.name, basename( maxargs ), PAPI_HUGE_STR_LEN-1);
|
|
|
c7ea89 |
+ mdi->exe_info.address_info.name[PAPI_HUGE_STR_LEN-1] = '\0';
|
|
|
c7ea89 |
|
|
|
c7ea89 |
SUBDBG( "Executable is %s\n", mdi->exe_info.address_info.name );
|
|
|
c7ea89 |
SUBDBG( "Full Executable is %s\n", mdi->exe_info.fullname );
|
|
|
c7ea89 |
diff --git a/src/papi_hl.c b/src/papi_hl.c
|
|
|
c7ea89 |
index 19111e7..4fcfe23 100644
|
|
|
c7ea89 |
--- a/src/papi_hl.c
|
|
|
c7ea89 |
+++ b/src/papi_hl.c
|
|
|
c7ea89 |
@@ -204,13 +204,13 @@ int
|
|
|
c7ea89 |
PAPI_flips( float *rtime, float *ptime, long long *flpins, float *mflips )
|
|
|
c7ea89 |
{
|
|
|
c7ea89 |
int retval;
|
|
|
c7ea89 |
- int events = PAPI_FP_INS;
|
|
|
c7ea89 |
+ int events[1] = {PAPI_FP_INS};
|
|
|
c7ea89 |
long long values = 0;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( rtime == NULL || ptime == NULL || flpins == NULL || mflips == NULL )
|
|
|
c7ea89 |
return PAPI_EINVAL;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- retval = _hl_rate_calls( rtime, ptime, &events, &values, flpins, mflips, HL_FLIP );
|
|
|
c7ea89 |
+ retval = _hl_rate_calls( rtime, ptime, events, &values, flpins, mflips, HL_FLIP );
|
|
|
c7ea89 |
return ( retval );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
@@ -259,13 +259,13 @@ int
|
|
|
c7ea89 |
PAPI_flops( float *rtime, float *ptime, long long *flpops, float *mflops )
|
|
|
c7ea89 |
{
|
|
|
c7ea89 |
int retval;
|
|
|
c7ea89 |
- int events = PAPI_FP_OPS;
|
|
|
c7ea89 |
+ int events[1] = {PAPI_FP_OPS};
|
|
|
c7ea89 |
long long values = 0;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( rtime == NULL || ptime == NULL || flpops == NULL || mflops == NULL )
|
|
|
c7ea89 |
return PAPI_EINVAL;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- retval = _hl_rate_calls( rtime, ptime, &events, &values, flpops, mflops, HL_FLOP );
|
|
|
c7ea89 |
+ retval = _hl_rate_calls( rtime, ptime, events, &values, flpops, mflops, HL_FLOP );
|
|
|
c7ea89 |
return ( retval );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
diff --git a/src/papi_internal.c b/src/papi_internal.c
|
|
|
c7ea89 |
index d354b76..3c51717 100644
|
|
|
c7ea89 |
--- a/src/papi_internal.c
|
|
|
c7ea89 |
+++ b/src/papi_internal.c
|
|
|
c7ea89 |
@@ -2162,20 +2162,22 @@ _papi_hwi_get_preset_event_info( int EventCode, PAPI_event_info_t * info )
|
|
|
c7ea89 |
unsigned int j;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( _papi_hwi_presets[i].symbol ) { /* if the event is in the preset table */
|
|
|
c7ea89 |
- /* set whole structure to 0 */
|
|
|
c7ea89 |
+ // since we are setting the whole structure to zero the strncpy calls below will
|
|
|
c7ea89 |
+ // be leaving NULL terminates strings as long as they copy 1 less byte than the
|
|
|
c7ea89 |
+ // buffer size of the field.
|
|
|
c7ea89 |
memset( info, 0, sizeof ( PAPI_event_info_t ) );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
info->event_code = ( unsigned int ) EventCode;
|
|
|
c7ea89 |
strncpy( info->symbol, _papi_hwi_presets[i].symbol,
|
|
|
c7ea89 |
- sizeof(info->symbol));
|
|
|
c7ea89 |
+ sizeof(info->symbol)-1);
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( _papi_hwi_presets[i].short_descr != NULL )
|
|
|
c7ea89 |
strncpy( info->short_descr, _papi_hwi_presets[i].short_descr,
|
|
|
c7ea89 |
- sizeof ( info->short_descr ) );
|
|
|
c7ea89 |
+ sizeof ( info->short_descr )-1 );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( _papi_hwi_presets[i].long_descr != NULL )
|
|
|
c7ea89 |
strncpy( info->long_descr, _papi_hwi_presets[i].long_descr,
|
|
|
c7ea89 |
- sizeof ( info->long_descr ) );
|
|
|
c7ea89 |
+ sizeof ( info->long_descr )-1 );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
info->event_type = _papi_hwi_presets[i].event_type;
|
|
|
c7ea89 |
info->count = _papi_hwi_presets[i].count;
|
|
|
c7ea89 |
@@ -2185,17 +2187,17 @@ _papi_hwi_get_preset_event_info( int EventCode, PAPI_event_info_t * info )
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( _papi_hwi_presets[i].postfix != NULL )
|
|
|
c7ea89 |
strncpy( info->postfix, _papi_hwi_presets[i].postfix,
|
|
|
c7ea89 |
- sizeof ( info->postfix ) );
|
|
|
c7ea89 |
+ sizeof ( info->postfix )-1 );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
for(j=0;j < info->count; j++) {
|
|
|
c7ea89 |
info->code[j]=_papi_hwi_presets[i].code[j];
|
|
|
c7ea89 |
strncpy(info->name[j], _papi_hwi_presets[i].name[j],
|
|
|
c7ea89 |
- sizeof(info->name[j]));
|
|
|
c7ea89 |
+ sizeof(info->name[j])-1);
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( _papi_hwi_presets[i].note != NULL ) {
|
|
|
c7ea89 |
strncpy( info->note, _papi_hwi_presets[i].note,
|
|
|
c7ea89 |
- sizeof ( info->note ) );
|
|
|
c7ea89 |
+ sizeof ( info->note )-1 );
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
return PAPI_OK;
|
|
|
c7ea89 |
diff --git a/src/papi_user_events.c b/src/papi_user_events.c
|
|
|
c7ea89 |
index 04fc4af..b1f124a 100644
|
|
|
c7ea89 |
--- a/src/papi_user_events.c
|
|
|
c7ea89 |
+++ b/src/papi_user_events.c
|
|
|
c7ea89 |
@@ -246,10 +246,11 @@ get_event_line( char **place, FILE * table, char **tmp_perfmon_events_table )
|
|
|
c7ea89 |
|
|
|
c7ea89 |
int add_define( char *line, list_t* LIST ) {
|
|
|
c7ea89 |
char *t;
|
|
|
c7ea89 |
- char local_line[USER_EVENT_OPERATION_LEN];
|
|
|
c7ea89 |
+ char local_line[USER_EVENT_OPERATION_LEN+1];
|
|
|
c7ea89 |
list_t *temp;
|
|
|
c7ea89 |
|
|
|
c7ea89 |
strncpy( local_line, line, USER_EVENT_OPERATION_LEN );
|
|
|
c7ea89 |
+ local_line[USER_EVENT_OPERATION_LEN] = '\0';
|
|
|
c7ea89 |
|
|
|
c7ea89 |
temp = (list_t*)papi_malloc(sizeof(list_t));
|
|
|
c7ea89 |
|
|
|
c7ea89 |
@@ -262,12 +263,14 @@ int add_define( char *line, list_t* LIST ) {
|
|
|
c7ea89 |
|
|
|
c7ea89 |
/* next token should be the name */
|
|
|
c7ea89 |
t = strtok(NULL, " ");
|
|
|
c7ea89 |
- strncpy( temp->name, t, PAPI_MIN_STR_LEN);
|
|
|
c7ea89 |
+ strncpy( temp->name, t, PAPI_MIN_STR_LEN-1);
|
|
|
c7ea89 |
+ temp->name[PAPI_MIN_STR_LEN-1] = '\0';
|
|
|
c7ea89 |
|
|
|
c7ea89 |
/* next token should be the value */
|
|
|
c7ea89 |
t = strtok(NULL," ");
|
|
|
c7ea89 |
t[strlen(t)] = '\0';
|
|
|
c7ea89 |
- strncpy( temp->value, t, PAPI_MIN_STR_LEN);
|
|
|
c7ea89 |
+ strncpy( temp->value, t, PAPI_MIN_STR_LEN-1);
|
|
|
c7ea89 |
+ temp->value[PAPI_MIN_STR_LEN-1] = '\0';
|
|
|
c7ea89 |
|
|
|
c7ea89 |
temp->next = LIST->next;
|
|
|
c7ea89 |
LIST->next = temp;
|
|
|
c7ea89 |
@@ -395,12 +398,15 @@ check_preset_events (char *target, user_defined_event_t* ue, int* msi)
|
|
|
c7ea89 |
strcat(ue->operation, temp);
|
|
|
c7ea89 |
ue->events[ue->count++] = _papi_hwi_presets[j].code[0];
|
|
|
c7ea89 |
} else {
|
|
|
c7ea89 |
- op = '-';
|
|
|
c7ea89 |
switch ( _papi_hwi_presets[j].derived_int ) {
|
|
|
c7ea89 |
case DERIVED_ADD:
|
|
|
c7ea89 |
case DERIVED_ADD_PS:
|
|
|
c7ea89 |
- op = '+';
|
|
|
c7ea89 |
case DERIVED_SUB:
|
|
|
c7ea89 |
+ if (_papi_hwi_presets[j].derived_int == DERIVED_SUB) {
|
|
|
c7ea89 |
+ op = '-';
|
|
|
c7ea89 |
+ } else {
|
|
|
c7ea89 |
+ op = '+';
|
|
|
c7ea89 |
+ }
|
|
|
c7ea89 |
for ( k = 0; k < (int) _papi_hwi_presets[j].count; k++) {
|
|
|
c7ea89 |
ue->events[ue->count++] = _papi_hwi_presets[j].code[k];
|
|
|
c7ea89 |
if (k%2)
|
|
|
c7ea89 |
@@ -574,7 +580,8 @@ load_user_event_table( char *file_name)
|
|
|
c7ea89 |
goto nextline;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- strncpy(foo->symbol, t, PAPI_MIN_STR_LEN);
|
|
|
c7ea89 |
+ // the entire structure was zeroed so if we only copy one less that what fits in the 'symbol' buffer, it will insure that this buffer is NULL terminated
|
|
|
c7ea89 |
+ strncpy(foo->symbol, t, PAPI_MIN_STR_LEN-1);
|
|
|
c7ea89 |
#ifdef SHOW_LOADS
|
|
|
c7ea89 |
INTDBG("Found a user event named %s\n", foo->symbol );
|
|
|
c7ea89 |
#endif
|
|
|
c7ea89 |
diff --git a/src/sw_multiplex.c b/src/sw_multiplex.c
|
|
|
c7ea89 |
index 22db6c2..4b2109c 100644
|
|
|
c7ea89 |
--- a/src/sw_multiplex.c
|
|
|
c7ea89 |
+++ b/src/sw_multiplex.c
|
|
|
c7ea89 |
@@ -1136,8 +1136,6 @@ mpx_check( int EventSet )
|
|
|
c7ea89 |
if ( strcmp( _papi_hwi_system_info.hw_info.model_string, "POWER6" ) == 0 ) {
|
|
|
c7ea89 |
unsigned int chk_domain =
|
|
|
c7ea89 |
PAPI_DOM_USER + PAPI_DOM_KERNEL + PAPI_DOM_SUPERVISOR;
|
|
|
c7ea89 |
- if ( ESI == NULL )
|
|
|
c7ea89 |
- return ( PAPI_ENOEVST );
|
|
|
c7ea89 |
|
|
|
c7ea89 |
if ( ( ESI->domain.domain & chk_domain ) != chk_domain ) {
|
|
|
c7ea89 |
PAPIERROR
|
|
|
c7ea89 |
diff --git a/src/x86_cpuid_info.c b/src/x86_cpuid_info.c
|
|
|
c7ea89 |
index dacc021..2527f3c 100644
|
|
|
c7ea89 |
--- a/src/x86_cpuid_info.c
|
|
|
c7ea89 |
+++ b/src/x86_cpuid_info.c
|
|
|
c7ea89 |
@@ -1416,8 +1416,6 @@ init_intel_leaf2( PAPI_mh_info_t * mh_info , int *num_levels)
|
|
|
c7ea89 |
int size; /* size of the descriptor table */
|
|
|
c7ea89 |
int last_level = 0; /* how many levels in the cache hierarchy */
|
|
|
c7ea89 |
|
|
|
c7ea89 |
- int need_leaf4=0;
|
|
|
c7ea89 |
-
|
|
|
c7ea89 |
/* All of Intel's cache info is in 1 call to cpuid
|
|
|
c7ea89 |
* however it is a table lookup :(
|
|
|
c7ea89 |
*/
|
|
|
c7ea89 |
@@ -1459,7 +1457,6 @@ init_intel_leaf2( PAPI_mh_info_t * mh_info , int *num_levels)
|
|
|
c7ea89 |
if ( i ) { /* skip the low order byte in eax [0]; it's the count (see above) */
|
|
|
c7ea89 |
if ( reg.descrip[i] == 0xff ) {
|
|
|
c7ea89 |
MEMDBG("Warning! PAPI x86_cache: must implement cpuid leaf 4\n");
|
|
|
c7ea89 |
- need_leaf4=1;
|
|
|
c7ea89 |
return PAPI_ENOSUPP;
|
|
|
c7ea89 |
/* we might continue instead */
|
|
|
c7ea89 |
/* in order to get TLB info */
|
|
|
c7ea89 |
@@ -1480,9 +1477,6 @@ init_intel_leaf2( PAPI_mh_info_t * mh_info , int *num_levels)
|
|
|
c7ea89 |
early_exit:
|
|
|
c7ea89 |
MEMDBG( "# of Levels: %d\n", last_level );
|
|
|
c7ea89 |
*num_levels=last_level;
|
|
|
c7ea89 |
- if (need_leaf4) {
|
|
|
c7ea89 |
- return PAPI_ENOSUPP;
|
|
|
c7ea89 |
- }
|
|
|
c7ea89 |
return PAPI_OK;
|
|
|
c7ea89 |
}
|
|
|
c7ea89 |
|