// STT_COMMON definition of that name that has the largest size.
bool is_common_;
bool is_linux_string_cst_;
+ bool is_in_ksymtab_;
elf_symbol_wptr main_symbol_;
elf_symbol_wptr next_alias_;
elf_symbol_wptr next_common_instance_;
visibility_(elf_symbol::DEFAULT_VISIBILITY),
is_defined_(false),
is_common_(false),
- is_linux_string_cst_(false)
+ is_linux_string_cst_(false),
+ is_in_ksymtab_(false)
{}
- priv(const environment* e,
- size_t i,
- size_t s,
- const string& n,
- elf_symbol::type t,
- elf_symbol::binding b,
- bool d,
- bool c,
- const elf_symbol::version& ve,
- elf_symbol::visibility vi,
- bool is_linux_string_cst)
+ priv(const environment* e,
+ size_t i,
+ size_t s,
+ const string& n,
+ elf_symbol::type t,
+ elf_symbol::binding b,
+ bool d,
+ bool c,
+ const elf_symbol::version& ve,
+ elf_symbol::visibility vi,
+ bool is_linux_string_cst,
+ bool is_in_ksymtab)
: env_(e),
index_(i),
size_(s),
visibility_(vi),
is_defined_(d),
is_common_(c),
- is_linux_string_cst_(is_linux_string_cst)
+ is_linux_string_cst_(is_linux_string_cst),
+ is_in_ksymtab_(is_in_ksymtab)
{
if (!is_common_)
is_common_ = type_ == COMMON_TYPE;
///
/// @param is_linux_string_cst true if the symbol is a Linux Kernel
/// string constant defined in the __ksymtab_strings section.
-elf_symbol::elf_symbol(const environment* e,
- size_t i,
- size_t s,
- const string& n,
- type t,
- binding b,
- bool d,
- bool c,
- const version& ve,
- visibility vi,
- bool is_linux_string_cst)
- : priv_(new priv(e, i, s, n, t, b, d,
- c, ve, vi, is_linux_string_cst))
+elf_symbol::elf_symbol(const environment* e,
+ size_t i,
+ size_t s,
+ const string& n,
+ type t,
+ binding b,
+ bool d,
+ bool c,
+ const version& ve,
+ visibility vi,
+ bool is_linux_string_cst,
+ bool is_in_ksymtab)
+ : priv_(new priv(e,
+ i,
+ s,
+ n,
+ t,
+ b,
+ d,
+ c,
+ ve,
+ vi,
+ is_linux_string_cst,
+ is_in_ksymtab))
{}
/// Factory of instances of @ref elf_symbol.
/// @return a (smart) pointer to a newly created instance of @ref
/// elf_symbol.
elf_symbol_sptr
-elf_symbol::create(const environment* e,
- size_t i,
- size_t s,
- const string& n,
- type t,
- binding b,
- bool d,
- bool c,
- const version& ve,
- visibility vi,
- bool is_linux_string_cst)
-{
- elf_symbol_sptr sym(new elf_symbol(e, i, s, n, t, b, d, c, ve,
- vi, is_linux_string_cst));
+elf_symbol::create(const environment* e,
+ size_t i,
+ size_t s,
+ const string& n,
+ type t,
+ binding b,
+ bool d,
+ bool c,
+ const version& ve,
+ visibility vi,
+ bool is_linux_string_cst,
+ bool is_in_ksymtab)
+{
+ elf_symbol_sptr sym(new elf_symbol(e, i, s, n, t, b, d, c, ve, vi,
+ is_linux_string_cst,
+ is_in_ksymtab));
sym->priv_->main_symbol_ = sym;
return sym;
}
elf_symbol::is_variable() const
{return get_type() == OBJECT_TYPE || get_type() == TLS_TYPE;}
+/// Getter of the 'is-in-ksymtab' property.
+///
+/// @return true iff the current symbol is in the Linux Kernel
+/// specific 'ksymtab' symbol table.
+bool
+elf_symbol::is_in_ksymtab() const
+{return priv_->is_in_ksymtab_;}
+
+/// Setter of the 'is-in-ksymtab' property.
+///
+/// @p is_in_ksymtab this is true iff the current symbol is in the
+/// Linux Kernel specific 'ksymtab' symbol table.
+void
+elf_symbol::set_is_in_ksymtab(bool is_in_ksymtab)
+{priv_->is_in_ksymtab_ = is_in_ksymtab;}
+
/// @name Elf symbol aliases
///
/// An alias A for an elf symbol S is a symbol that is defined at the