1047{
1048#if ( ( defined( _AIXVERSION_510) || defined(_AIXVERSION_520)))
1049 struct ma_msg_s
1050 {
1051 long flag;
1053 } ma_msgs[] = {
1054 {
1055 MA_MAINEXEC, "MAINEXEC"}, {
1056 MA_KERNTEXT, "KERNTEXT"}, {
1057 MA_READ, "READ"}, {
1058 MA_WRITE, "WRITE"}, {
1059 MA_EXEC, "EXEC"}, {
1060 MA_SHARED, "SHARED"}, {
1061 MA_BREAK, "BREAK"}, {
1062 MA_STACK, "STACK"},};
1063
1065 prmap_t newp;
1067 FILE *map_f;
1068 void *vaddr;
1069 prmap_t *tmp1 = NULL;
1071
1072 sprintf( fname, "/proc/%d/map", getpid( ) );
1073 map_f = fopen( fname, "r" );
1074 if ( !map_f ) {
1075 PAPIERROR(
"fopen(%s) returned < 0", fname );
1077 }
1078
1079
1081 t_index = 0;
1082 while ( (
retval =
fread( &newp,
sizeof ( prmap_t ), 1, map_f ) ) > 0 ) {
1083 if ( newp.pr_pathoff > 0 && newp.pr_mapname[0] != '\0' ) {
1084 if ( newp.pr_mflags & MA_STACK )
1085 continue;
1086
1089 newp.pr_pathoff, newp.pr_mapname );
1090
1091 if ( ( newp.pr_mflags & MA_READ ) && ( newp.pr_mflags & MA_EXEC ) )
1092 t_index++;
1093 }
1094 }
1095 rewind( map_f );
1097 if ( tmp1 == NULL )
1099
1100 tmp2 =
1103 if ( tmp2 == NULL )
1105
1107 t_index = -1;
1108 while ( (
retval =
fread( &tmp1[
i],
sizeof ( prmap_t ), 1, map_f ) ) > 0 ) {
1109 if ( tmp1[
i].pr_pathoff > 0 && tmp1[
i].pr_mapname[0] !=
'\0' )
1110 if ( !( tmp1[
i].pr_mflags & MA_STACK ) )
1112 }
1115 int cc = 0;
1116
1117 retval = fseek( map_f, tmp1[
i].pr_pathoff, SEEK_SET );
1120 while ( fscanf( map_f,
"%c", &
c ) != EOF ) {
1122
1123 cc++;
1125 break;
1126 }
1127
1128
1129
1130
1132 basename(
name ), cc - 1 ) == 0 ) {
1134 cc - 1 )
1136 ( "executable name too long (%d char). Match of first %d char only",
1139
1140 if ( tmp1[
i].pr_mflags & MA_READ ) {
1141 if ( tmp1[
i].pr_mflags & MA_EXEC ) {
1143 text_start = (
vptr_t ) tmp1[
i].pr_vaddr;
1145 text_end =
1146 (
vptr_t ) ( tmp1[
i].pr_vaddr + tmp1[
i].pr_size );
1147 }
else if ( tmp1[
i].pr_mflags & MA_WRITE ) {
1149 data_start = (
vptr_t ) tmp1[
i].pr_vaddr;
1151 data_end =
1152 (
vptr_t ) ( tmp1[
i].pr_vaddr + tmp1[
i].pr_size );
1153 }
1154 }
1155
1156 } else {
1159 0 ) &&
1162 0 ) )
1163 PAPIERROR(
"executable name not recognized" );
1164
1165 if ( tmp1[
i].pr_mflags & MA_READ ) {
1166 if ( tmp1[
i].pr_mflags & MA_EXEC ) {
1167 t_index++;
1170 (
vptr_t ) ( tmp1[
i].pr_vaddr + tmp1[
i].pr_size );
1172 }
else if ( tmp1[
i].pr_mflags & MA_WRITE ) {
1175 (
vptr_t ) ( tmp1[
i].pr_vaddr + tmp1[
i].pr_size );
1176 }
1177 }
1178
1179 }
1180 }
1182
1188
1190#else
1192#endif
1193}
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
static double c[MATRIX_SIZE][MATRIX_SIZE]
int fclose(FILE *__stream)
void PAPIERROR(char *format,...)
#define papi_calloc(a, b)
get the executable's address space info
PAPI_shlib_info_t shlib_info