RE: process stack question

From: Perez-Gonzalez, Inaky (inaky.perez-gonzalez@intel.com)
Date: Thu Jun 19 2003 - 20:02:48 EST


> From: Robert Schweikert [mailto:Robert.Schweikert@abaqus.com]
>
> My thinking is that I should be able to get a hold of the process call
> stack and using the top of the stack I should have the name of the
> function/method I am in.

What about something like getting the value of the EIP at
that point (will require some assembly-fu, most probably) and
calling the equivalent of:

$ addr2line -f -e my-program ADDR

#define _GNU_SOURCE
#include <stdio.h>

const char *program_name;

void some_function (void)
{
  int cnt = 0;
  unsigned long my_eip;
  char *command;
  
  for (cnt = 0; cnt < 10; cnt++) {
    printf ("%d ", cnt);
    fflush (stdout);
  }
  printf ("\n");
  asm volatile (
    " call 2f \n"
    "2: \n"
    " pop %0 \n"
    : "=r" (my_eip));
  printf ("I am at 0x%lx\n", my_eip);
  asprintf (&command, "addr2line -f -e \"%s\" 0x%lx\n",
            program_name, my_eip);
  system (command);
}

int main (int argc, char **argv)
{
  program_name = argv[0];
  some_function();
  return 0;
}

Not the most elegant solution, but gives an idea. Surely you
can call the equivalent of addr2line by linking into libbfd.
YMMV.

Iñaky Pérez-González -- Not speaking for Intel -- all opinions are my own
(and my fault)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Jun 23 2003 - 22:00:31 EST