I am trying to profile a C program that uses some methods of openssl/libcrypto. Everything work well when I compile and run the code without profiling information. When I add options to profile it with gprof, I get unexpected results from the profiling tool.
I did many researched but I didn't find any page that solved my problem.
This is my code (named test.c):
#include <stdio.h>
#include <openssl/bn.h>
#include <openssl/rand.h>
static BIGNUM *x;
static BIGNUM *y;
static BIGNUM *z;
static BIGNUM *p;
static BN_CTX *tmp;
static unsigned int max_size;
int main(void){
  int max_bytes, res_gen;
  max_bytes  = 50;
  tmp = BN_CTX_new();
  BN_CTX_init(tmp);
  x = BN_new();
  y = BN_new();
  z = BN_new();
  p = BN_new();
  RAND_load_file("/dev/urandom", max_bytes);
 max_size = 256; 
 BN_rand(x, max_size, 0, 0);
 BN_rand(y, max_size, 0, 0);
 res_gen = BN_generate_prime_ex(p, max_size, 0, NULL, NULL, NULL);
 BN_mul(z, x, y, tmp);
 BN_nnmod(x, z, p, tmp);
 printf("\nOk\n");
 BN_free(x);
 BN_free(y);
 BN_free(z);
 BN_free(p);
 BN_CTX_free(tmp); 
 return 0;
}
When I compile with profiling information using gcc -pg  -static test.c -lcrypto -ldl, it produces the following results. I get 0% (and 0 second) for everything, which is unexpected.
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
%   cumulative   self              self     total           
time   seconds   seconds    calls  Ts/call  Ts/call  name    
0.00      0.00     0.00        1     0.00     0.00  main
                         Call graph
granularity: each sample hit covers 2 byte(s) no time propagated
index % time    self  children    called     name
                0.00    0.00       1/1           __libc_start_main [4282]
[1]      0.0    0.00    0.00       1         main [1]
                0.00    0.00       0/0           mcount (3495)
                0.00    0.00       0/0           BN_CTX_new [275]
                0.00    0.00       0/0           BN_CTX_init [274]
                0.00    0.00       0/0           BN_new [372]
                0.00    0.00       0/0           RAND_load_file [1636]
                0.00    0.00       0/0           BN_rand [386]
                0.00    0.00       0/0           BN_generate_prime_ex [331]
                0.00    0.00       0/0           BN_mul [370]
                0.00    0.00       0/0           BN_nnmod [378]
                0.00    0.00       0/0           puts [3696]
                0.00    0.00       0/0           BN_free [327]
                0.00    0.00       0/0           BN_CTX_free [272]
-----------------------------------------------
Also, it seems that the profiler detects only the main method because details for others methods don't appear in flat profile and call graph.
So, I would like to know if I must compile OpenSSL library with some options (what options ?) or something else.
 
     
     
    