Package: src:nethogs
Version: 0.9.0-1
Severity: normal
Tags: patch
User: [email protected]
Usertags: origin-ubuntu stonking ubuntu-patch

Dear Maintainer,

nethogs 0.9.0-1 fails to build from source under GCC 15 because dpkg-gensymbols
detects missing symbols in debian/libnethogs0.symbols:

  dpkg-gensymbols: error: some symbols or patterns disappeared in the symbols 
file

GCC 15 optimizes and inlines compiler-generated C++ template instantiations,
destructors (std::map, std::vector, std::list, std::_Rb_tree, std::ctype),
and PackListNode::~PackListNode(), omitting them from dynamic export.

None of these internal C++ symbols belong to the public libnethogs0 C ABI
(nethogsmonitor_loop, nethogsmonitor_breakloop, nethogs_packet_stats,
nethogs_enable_udp).

Marking these symbols as (optional) in debian/libnethogs0.symbols allows the
package to build cleanly under GCC 15 while keeping tracking for architectures
or compilers where they remain emitted.

This issue and fix were tracked in Ubuntu:
https://bugs.launchpad.net/ubuntu/+source/nethogs/+bug/2168992

The attached patch resolves the build failure.

--- a/debian/libnethogs0.symbols
+++ b/debian/libnethogs0.symbols
@@ -7,7 +7,7 @@
  (c++)"process_ip(unsigned char*, pcap_pkthdr const*, unsigned char 
const*)@Base" 0.8.8
  (c++)"sameinaddr(in_addr, in_addr)@Base" 0.8.8
  (c++)"up_running(int)@Base" 0.8.8
- (c++)"addprocinfo(char const*, std::map<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, unsigned long, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>&)@Base" 0.8.8
+ (c++|optional)"addprocinfo(char const*, 
std::map<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, unsigned long, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>&)@Base" 0.8.8
  (c++)"findProcess(prg_node*)@Base" 0.8.8
  (c++)"findProcess(unsigned long)@Base" 0.8.8
  (c++)"get_devices(int, char**, bool)@Base" 0.8.8
@@ -19,7 +19,7 @@
  (c++)"process_init()@Base" 0.8.8
  (c++)"conninode_tcp[abi:cxx11]@Base" 0.8.8
  (c++)"conninode_udp[abi:cxx11]@Base" 0.8.8
- (c++)"addtoconninode(char*, std::map<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, unsigned long, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>&)@Base" 0.8.8
+ (c++|optional)"addtoconninode(char*, 
std::map<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, unsigned long, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>&)@Base" 0.8.8
  (c++)"findConnection(Packet*, short)@Base" 0.8.8
  (c++)"reread_mapping()@Base" 0.8.8
  (c++)"check_all_procs()@Base" 0.8.8
@@ -59,7 +59,7 @@
  (c++)"Connection::~Connection()@Base" 0.8.8
  (c++)"local_addr::contains(in6_addr const&)@Base" 0.8.8
  (c++)"local_addr::contains(unsigned int const&)@Base" 0.8.8
- (c++)"PackListNode::~PackListNode()@Base" 0.8.8
+ (c++|optional)"PackListNode::~PackListNode()@Base" 0.8.8
  (c++)"Packet::isOlderThan(timeval)@Base" 0.8.8
  (c++)"Packet::newInverted()@Base" 0.8.8
  (c++)"Packet::gethashstring()@Base" 0.8.8
@@ -85,23 +85,23 @@
  (c++)"Packet::matchSource(Packet const*) const@Base" 0.8.8
  (c++)"Packet::match(Packet const*) const@Base" 0.8.8
  (c++)"Packet::operator<(Packet const&) const@Base" 0.8.8
- (c++)"std::ctype<char>::do_widen(char) const@Base" 0.8.8
- (c++)"std::map<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, unsigned long, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::~map()@Base" 0.8.8
- (c++)"std::map<void*, NethogsMonitorRecord, std::less<void*>, 
std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::~map()@Base" 
0.8.8
- (c++)"std::map<unsigned long, prg_node*, std::less<unsigned long>, 
std::allocator<std::pair<unsigned long const, prg_node*> > >::~map()@Base" 0.8.8
- (c++)"std::set<int, std::less<int>, std::allocator<int> >::~set()@Base" 0.8.8
- (c++)"std::vector<int, std::allocator<int> >::~vector()@Base" 0.8.8
- (c++)"std::__cxx11::basic_stringbuf<char, std::char_traits<char>, 
std::allocator<char> >::~basic_stringbuf()@Base" 0.8.8
- (c++)"std::__cxx11::list<handle, std::allocator<handle> >::~list()@Base" 0.8.8
- 
(c++|arch=!m68k)"std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char,
 std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::_M_emplace_hint_unique<std::piecewise_construct_t const&, 
std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >&&>, std::tuple<> 
>(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >&&>&&, std::tuple<>&&)@Base" 0.8.8
- (c++)"std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::_M_get_insert_unique_pos(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.8
- (c++)"std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char,
 std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 
const&)@Base" 0.8.8
- 
(c++|arch=!armel,!armhf,!i386,!s390x,!alpha,!powerpc,!ppc64)"std::_Rb_tree<Connection*,
 Connection*, std::_Identity<Connection*>, ConnectionComparator, 
std::allocator<Connection*> >::equal_range(Connection* const&)@Base" 0.8.8
- (c++|arch=amd64,arm64,ppc64el)"std::pair<std::_Rb_tree_iterator<int>, bool> 
std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, 
std::allocator<int> >::_M_insert_unique<int>(int&&)@Base" 0.8.8
- (c++|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, std::pair<void* 
const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* const, 
NethogsMonitorRecord> >, std::less<void*>, std::allocator<std::pair<void* 
const, NethogsMonitorRecord> > >::_M_get_insert_unique_pos(void* const&)@Base" 
0.8.8
- (c++|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, std::pair<void* 
const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* const, 
NethogsMonitorRecord> >, std::less<void*>, std::allocator<std::pair<void* 
const, NethogsMonitorRecord> > 
>::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<void* 
const, NethogsMonitorRecord> >, void* const&)@Base" 0.8.8
- (c++)"std::multiset<Connection*, ConnectionComparator, 
std::allocator<Connection*> >::~multiset()@Base" 0.8.8
- (c++|arch=!m68k)"std::piecewise_construct@Base" 0.8.8
+ (c++|optional)"std::ctype<char>::do_widen(char) const@Base" 0.8.8
+ (c++|optional)"std::map<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, unsigned long, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::~map()@Base" 0.8.8
+ (c++|optional)"std::map<void*, NethogsMonitorRecord, std::less<void*>, 
std::allocator<std::pair<void* const, NethogsMonitorRecord> > >::~map()@Base" 
0.8.8
+ (c++|optional)"std::map<unsigned long, prg_node*, std::less<unsigned long>, 
std::allocator<std::pair<unsigned long const, prg_node*> > >::~map()@Base" 0.8.8
+ (c++|optional)"std::set<int, std::less<int>, std::allocator<int> 
>::~set()@Base" 0.8.8
+ (c++|optional)"std::vector<int, std::allocator<int> >::~vector()@Base" 0.8.8
+ (c++|optional)"std::__cxx11::basic_stringbuf<char, std::char_traits<char>, 
std::allocator<char> >::~basic_stringbuf()@Base" 0.8.8
+ (c++|optional)"std::__cxx11::list<handle, std::allocator<handle> 
>::~list()@Base" 0.8.8
+ 
(c++|optional|arch=!m68k)"std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char,
 std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::_M_emplace_hint_unique<std::piecewise_construct_t const&, 
std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >&&>, std::tuple<> 
>(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >&&>&&, std::tuple<>&&)@Base" 0.8.8
+ (c++|optional)"std::_Rb_tree<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, 
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const, unsigned long>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::_M_get_insert_unique_pos(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.8
+ (c++|optional)"std::_Rb_tree<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, 
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const, unsigned long>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::less<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const, unsigned long> > 
>::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char,
 std::char_traits<char>, std::allocator<char> > const, unsigned long> >, 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 
const&)@Base" 0.8.8
+ 
(c++|optional|arch=!armel,!armhf,!i386,!s390x,!alpha,!powerpc,!ppc64)"std::_Rb_tree<Connection*,
 Connection*, std::_Identity<Connection*>, ConnectionComparator, 
std::allocator<Connection*> >::equal_range(Connection* const&)@Base" 0.8.8
+ 
(c++|optional|arch=amd64,arm64,ppc64el)"std::pair<std::_Rb_tree_iterator<int>, 
bool> std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, 
std::allocator<int> >::_M_insert_unique<int>(int&&)@Base" 0.8.8
+ (c++|optional|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, 
std::pair<void* const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* 
const, NethogsMonitorRecord> >, std::less<void*>, 
std::allocator<std::pair<void* const, NethogsMonitorRecord> > 
>::_M_get_insert_unique_pos(void* const&)@Base" 0.8.8
+ (c++|optional|arch=mips64el,riscv64,loong64)"std::_Rb_tree<void*, 
std::pair<void* const, NethogsMonitorRecord>, std::_Select1st<std::pair<void* 
const, NethogsMonitorRecord> >, std::less<void*>, 
std::allocator<std::pair<void* const, NethogsMonitorRecord> > 
>::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<void* 
const, NethogsMonitorRecord> >, void* const&)@Base" 0.8.8
+ (c++|optional)"std::multiset<Connection*, ConnectionComparator, 
std::allocator<Connection*> >::~multiset()@Base" 0.8.8
+ (c++|optional|arch=!m68k)"std::piecewise_construct@Base" 0.8.8

Reply via email to