mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-08 13:36:43 +00:00
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>
35 lines
646 B
C
35 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
|