|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* File: profile.c
|
|
Packit |
577717 |
* Author: Philip Mucci
|
|
Packit |
577717 |
* mucci@cs.utk.edu
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include <stdio.h>
|
|
Packit |
577717 |
#include <stdlib.h>
|
|
Packit |
577717 |
#include <string.h>
|
|
Packit |
577717 |
#include <unistd.h>
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#if (!defined(NO_DLFCN) && !defined(_BGL) && !defined(_BGP))
|
|
Packit |
577717 |
#include <dlfcn.h>
|
|
Packit |
577717 |
#endif
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include "papi.h"
|
|
Packit |
577717 |
#include "papi_test.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void print_shlib_info_map(const PAPI_shlib_info_t *shinfo, int quiet)
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
PAPI_address_map_t *map = shinfo->map;
|
|
Packit |
577717 |
int i;
|
|
Packit |
577717 |
if (NULL == map) {
|
|
Packit |
577717 |
test_fail(__FILE__, __LINE__, "PAPI_get_shared_lib_info", 1);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) for ( i = 0; i < shinfo->count; i++ ) {
|
|
Packit |
577717 |
printf( "Library: %s\n", map->name );
|
|
Packit |
577717 |
printf( "Text start: %p, Text end: %p\n", map->text_start,
|
|
Packit |
577717 |
map->text_end );
|
|
Packit |
577717 |
printf( "Data start: %p, Data end: %p\n", map->data_start,
|
|
Packit |
577717 |
map->data_end );
|
|
Packit |
577717 |
printf( "Bss start: %p, Bss end: %p\n", map->bss_start, map->bss_end );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( strlen( &(map->name[0]) ) == 0 )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_shared_lib_info", 1 );
|
|
Packit |
577717 |
if ( ( map->text_start == 0x0 ) || ( map->text_end == 0x0 ) ||
|
|
Packit |
577717 |
( map->text_start >= map->text_end ) )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_shared_lib_info", 1 );
|
|
Packit |
577717 |
/*
|
|
Packit |
577717 |
if ((map->data_start == 0x0) || (map->data_end == 0x0) ||
|
|
Packit |
577717 |
(map->data_start >= map->data_end))
|
|
Packit |
577717 |
test_fail(__FILE__, __LINE__, "PAPI_get_shared_lib_info",1);
|
|
Packit |
577717 |
if (((map->bss_start) && (!map->bss_end)) ||
|
|
Packit |
577717 |
((!map->bss_start) && (map->bss_end)) ||
|
|
Packit |
577717 |
(map->bss_start > map->bss_end))
|
|
Packit |
577717 |
test_fail(__FILE__, __LINE__, "PAPI_get_shared_lib_info",1);
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
map++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void display( char *msg )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int i;
|
|
Packit |
577717 |
for (i=0; i<64; i++)
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
printf( "%1d", (msg[i] ? 1 : 0) );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
printf("\n");
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
main( int argc, char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int retval,quiet;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
const PAPI_shlib_info_t *shinfo;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Set TESTS_QUIET variable */
|
|
Packit |
577717 |
quiet = tests_quiet( argc, argv );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_library_init( PAPI_VER_CURRENT );
|
|
Packit |
577717 |
if (retval != PAPI_VER_CURRENT ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( shinfo = PAPI_get_shared_lib_info( ) ) == NULL ) {
|
|
Packit |
577717 |
test_skip( __FILE__, __LINE__, "PAPI_get_shared_lib_info", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( shinfo->count == 0 ) && ( shinfo->map ) ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_shared_lib_info", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
print_shlib_info_map(shinfo, quiet);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Needed for debugging, so you can ^Z and stop the process, */
|
|
Packit |
577717 |
/* inspect /proc to see if it's right */
|
|
Packit |
577717 |
sleep( 1 );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#ifndef NO_DLFCN
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
|
|
Packit |
577717 |
const char *_libname = "libcrypt.so";
|
|
Packit |
577717 |
void *handle;
|
|
Packit |
577717 |
void ( *setkey) (const char *key);
|
|
Packit |
577717 |
void ( *encrypt) (char block[64], int edflag);
|
|
Packit |
577717 |
char key[64]={
|
|
Packit |
577717 |
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
|
|
Packit |
577717 |
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
|
|
Packit |
577717 |
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
|
|
Packit |
577717 |
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,
|
|
Packit |
577717 |
}; /* bit pattern for key */
|
|
Packit |
577717 |
char orig[64]; /* bit pattern for messages */
|
|
Packit |
577717 |
char txt[64]; /* bit pattern for messages */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int oldcount;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
handle = dlopen( _libname, RTLD_NOW );
|
|
Packit |
577717 |
if ( !handle ) {
|
|
Packit |
577717 |
printf( "dlopen: %s\n", dlerror( ) );
|
|
Packit |
577717 |
if (!quiet) printf( "Did you forget to set the environmental "
|
|
Packit |
577717 |
"variable LIBPATH (in AIX) or "
|
|
Packit |
577717 |
"LD_LIBRARY_PATH (in linux) ?\n" );
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "dlopen", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
setkey = dlsym( handle, "setkey" );
|
|
Packit |
577717 |
encrypt = dlsym( handle, "encrypt" );
|
|
Packit |
577717 |
if ( setkey == NULL || encrypt == NULL) {
|
|
Packit |
577717 |
if (!quiet) printf( "dlsym: %s\n", dlerror( ) );
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "dlsym", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
memset(orig,0,64);
|
|
Packit |
577717 |
memcpy(txt,orig,64);
|
|
Packit |
577717 |
setkey(key);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf("original ");
|
|
Packit |
577717 |
display(txt);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
encrypt(txt, 0); /* encode */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf("encrypted ");
|
|
Packit |
577717 |
display(txt);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!memcmp(txt,orig,64)) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "encode", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
encrypt(txt, 1); /* decode */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf("decrypted ");
|
|
Packit |
577717 |
display(txt);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (memcmp(txt,orig,64)) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "decode", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
oldcount = shinfo->count;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( shinfo = PAPI_get_shared_lib_info( ) ) == NULL ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_shared_lib_info", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Needed for debugging, so you can ^Z and stop the process, */
|
|
Packit |
577717 |
/* inspect /proc to see if it's right */
|
|
Packit |
577717 |
sleep( 1 );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( shinfo->count == 0 ) && ( shinfo->map ) ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_shared_lib_info", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( shinfo->count <= oldcount ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_shared_lib_info", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
print_shlib_info_map(shinfo, quiet);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Needed for debugging, so you can ^Z and stop the process, */
|
|
Packit |
577717 |
/* inspect /proc to see if it's right */
|
|
Packit |
577717 |
sleep( 1 );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
dlclose( handle );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
#endif
|
|
Packit |
577717 |
|
|
Packit |
577717 |
test_pass( __FILE__ );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
}
|