64
64
if ((addr >= (unsigned long)_stext && addr <= (unsigned long)_etext) ||
65
65
arch_is_kernel_text(addr))
67
return in_gate_area_no_task(addr);
67
return in_gate_area_no_mm(addr);
70
70
static inline int is_kernel(unsigned long addr)
72
72
if (addr >= (unsigned long)_stext && addr <= (unsigned long)_end)
74
return in_gate_area_no_task(addr);
74
return in_gate_area_no_mm(addr);
77
77
static int is_ksym_addr(unsigned long addr)
344
344
/* Look up a kernel symbol and return it in a text buffer. */
345
int sprint_symbol(char *buffer, unsigned long address)
345
static int __sprint_symbol(char *buffer, unsigned long address,
348
349
const char *name;
349
350
unsigned long offset, size;
353
address += symbol_offset;
352
354
name = kallsyms_lookup(address, &size, &offset, &modname, buffer);
354
356
return sprintf(buffer, "0x%lx", address);
357
359
strcpy(buffer, name);
358
360
len = strlen(buffer);
362
offset -= symbol_offset;
362
len += sprintf(buffer, "+%#lx/%#lx [%s]",
363
offset, size, modname);
365
len += sprintf(buffer, "+%#lx/%#lx [%s]", offset, size, modname);
365
367
len += sprintf(buffer, "+%#lx/%#lx", offset, size);
373
* sprint_symbol - Look up a kernel symbol and return it in a text buffer
374
* @buffer: buffer to be stored
375
* @address: address to lookup
377
* This function looks up a kernel symbol with @address and stores its name,
378
* offset, size and module name to @buffer if possible. If no symbol was found,
379
* just saves its @address as is.
381
* This function returns the number of bytes stored in @buffer.
383
int sprint_symbol(char *buffer, unsigned long address)
385
return __sprint_symbol(buffer, address, 0);
369
388
EXPORT_SYMBOL_GPL(sprint_symbol);
391
* sprint_backtrace - Look up a backtrace symbol and return it in a text buffer
392
* @buffer: buffer to be stored
393
* @address: address to lookup
395
* This function is for stack backtrace and does the same thing as
396
* sprint_symbol() but with modified/decreased @address. If there is a
397
* tail-call to the function marked "noreturn", gcc optimized out code after
398
* the call so that the stack-saved return address could point outside of the
399
* caller. This function ensures that kallsyms will find the original caller
400
* by decreasing @address.
402
* This function returns the number of bytes stored in @buffer.
404
int sprint_backtrace(char *buffer, unsigned long address)
406
return __sprint_symbol(buffer, address, -1);
371
409
/* Look up a kernel symbol and print it to the kernel messages. */
372
410
void __print_symbol(const char *fmt, unsigned long address)