aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/kallsyms.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kallsyms.c')
-rw-r--r--kernel/kallsyms.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
index 6f294ff4f9ee..5a0de8409739 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -267,27 +267,33 @@ const char *kallsyms_lookup(unsigned long addr,
267 return NULL; 267 return NULL;
268} 268}
269 269
270/* Replace "%s" in format with address, or returns -errno. */ 270/* Look up a kernel symbol and return it in a text buffer. */
271void __print_symbol(const char *fmt, unsigned long address) 271int sprint_symbol(char *buffer, unsigned long address)
272{ 272{
273 char *modname; 273 char *modname;
274 const char *name; 274 const char *name;
275 unsigned long offset, size; 275 unsigned long offset, size;
276 char namebuf[KSYM_NAME_LEN+1]; 276 char namebuf[KSYM_NAME_LEN+1];
277 char buffer[sizeof("%s+%#lx/%#lx [%s]") + KSYM_NAME_LEN +
278 2*(BITS_PER_LONG*3/10) + MODULE_NAME_LEN + 1];
279 277
280 name = kallsyms_lookup(address, &size, &offset, &modname, namebuf); 278 name = kallsyms_lookup(address, &size, &offset, &modname, namebuf);
281
282 if (!name) 279 if (!name)
283 sprintf(buffer, "0x%lx", address); 280 return sprintf(buffer, "0x%lx", address);
284 else { 281 else {
285 if (modname) 282 if (modname)
286 sprintf(buffer, "%s+%#lx/%#lx [%s]", name, offset, 283 return sprintf(buffer, "%s+%#lx/%#lx [%s]", name, offset,
287 size, modname); 284 size, modname);
288 else 285 else
289 sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); 286 return sprintf(buffer, "%s+%#lx/%#lx", name, offset, size);
290 } 287 }
288}
289
290/* Look up a kernel symbol and print it to the kernel messages. */
291void __print_symbol(const char *fmt, unsigned long address)
292{
293 char buffer[KSYM_SYMBOL_LEN];
294
295 sprint_symbol(buffer, address);
296
291 printk(fmt, buffer); 297 printk(fmt, buffer);
292} 298}
293 299
@@ -452,3 +458,4 @@ static int __init kallsyms_init(void)
452__initcall(kallsyms_init); 458__initcall(kallsyms_init);
453 459
454EXPORT_SYMBOL(__print_symbol); 460EXPORT_SYMBOL(__print_symbol);
461EXPORT_SYMBOL_GPL(sprint_symbol);