diff options
Diffstat (limited to 'arch/ppc/kernel/find_name.c')
-rw-r--r-- | arch/ppc/kernel/find_name.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/arch/ppc/kernel/find_name.c b/arch/ppc/kernel/find_name.c new file mode 100644 index 00000000000..3c0fa8e0c07 --- /dev/null +++ b/arch/ppc/kernel/find_name.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#include <asm/page.h> +#include <sys/mman.h> +#include <strings.h> +/* + * Finds a given address in the System.map and prints it out + * with its neighbors. -- Cort + */ + +int main(int argc, char **argv) +{ + unsigned long addr, cmp, i; + FILE *f; + char s[256], last[256]; + + if ( argc < 2 ) + { + fprintf(stderr, "Usage: %s <address>\n", argv[0]); + return -1; + } + + for ( i = 1 ; argv[i] ; i++ ) + { + sscanf( argv[i], "%0lx", &addr ); + /* adjust if addr is relative to kernelbase */ + if ( addr < PAGE_OFFSET ) + addr += PAGE_OFFSET; + + if ( (f = fopen( "System.map", "r" )) == NULL ) + { + perror("fopen()\n"); + exit(-1); + } + + while ( !feof(f) ) + { + fgets(s, 255 , f); + sscanf( s, "%0lx", &cmp ); + if ( addr < cmp ) + break; + strcpy( last, s); + } + + printf( "%s%s", last, s ); + } + fclose(f); + return 0; +} |