Add setting to disable the use of dwarf aranges
This commit is contained in:
parent
aed47df73e
commit
728cefab55
@ -47,6 +47,7 @@ namespace cpptrace {
|
|||||||
// dwarf options
|
// dwarf options
|
||||||
namespace experimental {
|
namespace experimental {
|
||||||
CPPTRACE_EXPORT void set_dwarf_resolver_line_table_cache_size(nullable<std::size_t> max_entries);
|
CPPTRACE_EXPORT void set_dwarf_resolver_line_table_cache_size(nullable<std::size_t> max_entries);
|
||||||
|
CPPTRACE_EXPORT void set_dwarf_resolver_disable_aranges(bool disable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,16 +7,25 @@
|
|||||||
namespace cpptrace {
|
namespace cpptrace {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
std::atomic<nullable<std::size_t>> dwarf_resolver_line_table_cache_size{nullable<std::size_t>::null()};
|
std::atomic<nullable<std::size_t>> dwarf_resolver_line_table_cache_size{nullable<std::size_t>::null()};
|
||||||
|
std::atomic<bool> dwarf_resolver_disable_aranges{false};
|
||||||
|
|
||||||
optional<std::size_t> get_dwarf_resolver_line_table_cache_size() {
|
optional<std::size_t> get_dwarf_resolver_line_table_cache_size() {
|
||||||
auto max_entries = dwarf_resolver_line_table_cache_size.load();
|
auto max_entries = dwarf_resolver_line_table_cache_size.load();
|
||||||
return max_entries.has_value() ? optional<std::size_t>(max_entries.value()) : nullopt;
|
return max_entries.has_value() ? optional<std::size_t>(max_entries.value()) : nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get_dwarf_resolver_disable_aranges() {
|
||||||
|
return dwarf_resolver_disable_aranges.load();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace experimental {
|
namespace experimental {
|
||||||
void set_dwarf_resolver_line_table_cache_size(nullable<std::size_t> max_entries) {
|
void set_dwarf_resolver_line_table_cache_size(nullable<std::size_t> max_entries) {
|
||||||
detail::dwarf_resolver_line_table_cache_size.store(max_entries);
|
detail::dwarf_resolver_line_table_cache_size.store(max_entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_dwarf_resolver_disable_aranges(bool disable) {
|
||||||
|
detail::dwarf_resolver_disable_aranges.store(disable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
namespace cpptrace {
|
namespace cpptrace {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
optional<std::size_t> get_dwarf_resolver_line_table_cache_size();
|
optional<std::size_t> get_dwarf_resolver_line_table_cache_size();
|
||||||
|
bool get_dwarf_resolver_disable_aranges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -297,7 +297,7 @@ namespace libdwarf {
|
|||||||
VERIFY(wrap(dwarf_set_tied_dbg, dbg, skeleton.unwrap().resolver.dbg) == DW_DLV_OK);
|
VERIFY(wrap(dwarf_set_tied_dbg, dbg, skeleton.unwrap().resolver.dbg) == DW_DLV_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ok) {
|
if(ok && !get_dwarf_resolver_disable_aranges()) {
|
||||||
// Check for .debug_aranges for fast lookup
|
// Check for .debug_aranges for fast lookup
|
||||||
wrap(dwarf_get_aranges, dbg, &aranges, &arange_count);
|
wrap(dwarf_get_aranges, dbg, &aranges, &arange_count);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user