 c506c96b61
			
		
	
	
	c506c96b61
	
	
	
		
			
			Eventually this should be useful to other tools/ living utilities. For now don't try to build any .a, just trying the minimal approach of separating existing code into multiple .c files that can then be included wherever they are needed, using whatever build machinery already in place. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@alien8.de> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-pfa8i5zpf4bf9rcccryi0lt3@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			948 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			948 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "symbol/kallsyms.h"
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| int kallsyms__parse(const char *filename, void *arg,
 | |
| 		    int (*process_symbol)(void *arg, const char *name,
 | |
| 					  char type, u64 start))
 | |
| {
 | |
| 	char *line = NULL;
 | |
| 	size_t n;
 | |
| 	int err = -1;
 | |
| 	FILE *file = fopen(filename, "r");
 | |
| 
 | |
| 	if (file == NULL)
 | |
| 		goto out_failure;
 | |
| 
 | |
| 	err = 0;
 | |
| 
 | |
| 	while (!feof(file)) {
 | |
| 		u64 start;
 | |
| 		int line_len, len;
 | |
| 		char symbol_type;
 | |
| 		char *symbol_name;
 | |
| 
 | |
| 		line_len = getline(&line, &n, file);
 | |
| 		if (line_len < 0 || !line)
 | |
| 			break;
 | |
| 
 | |
| 		line[--line_len] = '\0'; /* \n */
 | |
| 
 | |
| 		len = hex2u64(line, &start);
 | |
| 
 | |
| 		len++;
 | |
| 		if (len + 2 >= line_len)
 | |
| 			continue;
 | |
| 
 | |
| 		symbol_type = line[len];
 | |
| 		len += 2;
 | |
| 		symbol_name = line + len;
 | |
| 		len = line_len - len;
 | |
| 
 | |
| 		if (len >= KSYM_NAME_LEN) {
 | |
| 			err = -1;
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 		err = process_symbol(arg, symbol_name, symbol_type, start);
 | |
| 		if (err)
 | |
| 			break;
 | |
| 	}
 | |
| 
 | |
| 	free(line);
 | |
| 	fclose(file);
 | |
| 	return err;
 | |
| 
 | |
| out_failure:
 | |
| 	return -1;
 | |
| }
 |