• Masami Hiramatsu's avatar
    perf probe: Use right type to access array elements · d0461794
    Masami Hiramatsu authored
    Current 'perf probe' converts the type of array-elements incorrectly. It
    always converts the types as a pointer of array. This passes the "array"
    type DIE to the type converter so that it can get correct "element of
    array" type DIE from it.
    
    E.g.
      ====
      $ cat hello.c
      #include <stdio.h>
    
      void foo(int a[])
      {
    	  printf("%d\n", a[1]);
      }
    
      void main()
      {
    	  int a[3] = {4, 5, 6};
    	  printf("%d\n", a[0]);
    	  foo(a);
      }
    
      $ gcc -g hello.c -o hello
      $ perf probe -x ./hello -D "foo a[1]"
      ====
    
    Without this fix, above outputs
      ====
      p:probe_hello/foo /tmp/hello:0x4d3 a=+4(-8(%bp)):u64
      ====
    The "u64" means "int *", but a[1] is "int".
    
    With this,
      ====
      p:probe_hello/foo /tmp/hello:0x4d3 a=+4(-8(%bp)):s32
      ====
    So, "int" correctly converted to "s32"
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
    Cc: linux-kselftest@vger.kernel.org
    Cc: linux-trace-users@vger.kernel.org
    Fixes: b2a3c12b ("perf probe: Support tracing an entry of array")
    Link: http://lkml.kernel.org/r/152129114502.31874.2474068470011496356.stgit@devboxSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    d0461794
probe-finder.c 46.4 KB