diff options
Diffstat (limited to 'arch/ppc/boot/find_name.c')
-rw-r--r-- | arch/ppc/boot/find_name.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/arch/ppc/boot/find_name.c b/arch/ppc/boot/find_name.c new file mode 100644 index 000000000..23646fb69 --- /dev/null +++ b/arch/ppc/boot/find_name.c @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <asm/page.h> +#include <sys/mman.h> +/* + * Finds a given address in the System.map and prints it out + * with its neighbors. -- Cort + */ + +void main(int argc, char **argv) +{ + unsigned long addr, cmp, i; + FILE *f; + char *ptr; + char s[256], last[256]; + + if ( argc < 2 ) + { + fprintf(stderr, "Usage: %s <address>\n", argv[0]); + exit(-1); + } + + for ( i = 1 ; argv[i] ; i++ ) + { + sscanf( argv[i], "%0x", &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, "%0x", &cmp ); + if ( addr < cmp ) + break; + strcpy( last, s); + } + + printf( "%s", last); + } + fclose(f); +} |