mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 00:48:50 +00:00
b8a94bfb33
Rust symbols can become quite long due to namespacing introduced by modules, types, traits, generics, etc. For instance, the following code: pub mod my_module { pub struct MyType; pub struct MyGenericType<T>(T); pub trait MyTrait { fn my_method() -> u32; } impl MyTrait for MyGenericType<MyType> { fn my_method() -> u32 { 42 } } } generates a symbol of length 96 when using the upcoming v0 mangling scheme: _RNvXNtCshGpAVYOtgW1_7example9my_moduleINtB2_13MyGenericTypeNtB2_6MyTypeENtB2_7MyTrait9my_method At the moment, Rust symbols may reach up to 300 in length. Setting 512 as the maximum seems like a reasonable choice to keep some headroom. Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Petr Mladek <pmladek@suse.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Co-developed-by: Alex Gaynor <alex.gaynor@gmail.com> Signed-off-by: Alex Gaynor <alex.gaynor@gmail.com> Co-developed-by: Wedson Almeida Filho <wedsonaf@google.com> Signed-off-by: Wedson Almeida Filho <wedsonaf@google.com> Co-developed-by: Gary Guo <gary@garyguo.net> Signed-off-by: Gary Guo <gary@garyguo.net> Co-developed-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
34 lines
646 B
C
34 lines
646 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LIBLOCKDEP_LINUX_KALLSYMS_H_
|
|
#define _LIBLOCKDEP_LINUX_KALLSYMS_H_
|
|
|
|
#include <linux/kernel.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
#define KSYM_NAME_LEN 512
|
|
|
|
struct module;
|
|
|
|
static inline const char *kallsyms_lookup(unsigned long addr,
|
|
unsigned long *symbolsize,
|
|
unsigned long *offset,
|
|
char **modname, char *namebuf)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
#include <execinfo.h>
|
|
#include <stdlib.h>
|
|
static inline void print_ip_sym(const char *loglvl, unsigned long ip)
|
|
{
|
|
char **name;
|
|
|
|
name = backtrace_symbols((void **)&ip, 1);
|
|
|
|
dprintf(STDOUT_FILENO, "%s\n", *name);
|
|
|
|
free(name);
|
|
}
|
|
|
|
#endif
|