I happened to run "lstopo --of xml" as root on a RHEL6.1 system and was surprised with a core dump:
... Looking for PCI devices Scanning PCI buses... ... 0000:00:01.0 0604 8086:3408 Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 0000:00:00.0 0600 8086:3405 Intel Corporation 5520/5500/X58 I/O Hub to ESI Port *** glibc detected *** /tmp/hwloc-1.4.2/bin/lstopo: double free or corruption (!prev): 0x0000000001bfed50 *** which gdb reported as occurring here: (gdb) bt #0 0x0000003905e32905 in raise () from /lib64/libc.so.6 #1 0x0000003905e340e5 in abort () from /lib64/libc.so.6 #2 0x0000003905e6f827 in __libc_message () from /lib64/libc.so.6 #3 0x0000003905e75146 in malloc_printerr () from /lib64/libc.so.6 #4 0x00000035ace06bdf in ?? () from /lib64/libpci.so.3 #5 0x00000035ace02c9e in pci_free_dev () from /lib64/libpci.so.3 #6 0x00000035ace029e0 in pci_cleanup () from /lib64/libpci.so.3 #7 0x00007f14fe211e5f in hwloc_look_libpci (topology=0x156c130) at topology-libpci.c:751 #8 0x00007f14fe1fccbd in hwloc_discover (topology=0x156c130) at topology.c:2299 #9 0x00007f14fe1fdde2 in hwloc_topology_load (topology=0x156c130) at topology.c:2831 #10 0x0000000000405112 in main (argc=1, argv=0x7fffac612d38) at lstopo.c:530 Sure enough, when I fed the same command to valgrind, it told me # valgrind --tool=memcheck /tmp/hwloc-1.4.2/bin/lstopo --of xml ... 0000:00:01.0 0604 8086:3408 Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 0000:00:00.0 0600 8086:3405 Intel Corporation 5520/5500/X58 I/O Hub to ESI Port ==6531== Invalid read of size 8 ==6531== at 0x35ACE06BDF: ??? (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE02C9D: pci_free_dev (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE029DF: pci_cleanup (in /lib64/libpci.so.3.1.4) ==6531== by 0x4C2BE5E: hwloc_look_libpci (topology-libpci.c:751) ==6531== by 0x4C16CBC: hwloc_discover (topology.c:2299) ==6531== by 0x4C17DE1: hwloc_topology_load (topology.c:2831) ==6531== by 0x405111: main (lstopo.c:530) ==6531== Address 0x4eec440 is 144 bytes inside a block of size 200 free'd ==6531== at 0x4A0595D: free (vg_replace_malloc.c:366) ==6531== by 0x35ACE06BDE: ??? (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE02C9D: pci_free_dev (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE029DF: pci_cleanup (in /lib64/libpci.so.3.1.4) ==6531== by 0x4C2BE5E: hwloc_look_libpci (topology-libpci.c:751) ==6531== by 0x4C16CBC: hwloc_discover (topology.c:2299) ==6531== by 0x4C17DE1: hwloc_topology_load (topology.c:2831) ==6531== by 0x405111: main (lstopo.c:530) ==6531== ==6531== Invalid write of size 8 ==6531== at 0x35ACE06BD0: ??? (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE02C9D: pci_free_dev (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE029DF: pci_cleanup (in /lib64/libpci.so.3.1.4) ==6531== by 0x4C2BE5E: hwloc_look_libpci (topology-libpci.c:751) ==6531== by 0x4C16CBC: hwloc_discover (topology.c:2299) ==6531== by 0x4C17DE1: hwloc_topology_load (topology.c:2831) ==6531== by 0x405111: main (lstopo.c:530) ==6531== Address 0x4eec440 is 144 bytes inside a block of size 200 free'd ==6531== at 0x4A0595D: free (vg_replace_malloc.c:366) ==6531== by 0x35ACE06BDE: ??? (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE02C9D: pci_free_dev (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE029DF: pci_cleanup (in /lib64/libpci.so.3.1.4) ==6531== by 0x4C2BE5E: hwloc_look_libpci (topology-libpci.c:751) ==6531== by 0x4C16CBC: hwloc_discover (topology.c:2299) ==6531== by 0x4C17DE1: hwloc_topology_load (topology.c:2831) ==6531== by 0x405111: main (lstopo.c:530) ==6531== ==6531== Invalid free() / delete / delete[] ==6531== at 0x4A0595D: free (vg_replace_malloc.c:366) ==6531== by 0x35ACE06BDE: ??? (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE02C9D: pci_free_dev (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE029DF: pci_cleanup (in /lib64/libpci.so.3.1.4) ==6531== by 0x4C2BE5E: hwloc_look_libpci (topology-libpci.c:751) ==6531== by 0x4C16CBC: hwloc_discover (topology.c:2299) ==6531== by 0x4C17DE1: hwloc_topology_load (topology.c:2831) ==6531== by 0x405111: main (lstopo.c:530) ==6531== Address 0x4eec3b0 is 0 bytes inside a block of size 200 free'd ==6531== at 0x4A0595D: free (vg_replace_malloc.c:366) ==6531== by 0x35ACE06BDE: ??? (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE02C9D: pci_free_dev (in /lib64/libpci.so.3.1.4) ==6531== by 0x35ACE029DF: pci_cleanup (in /lib64/libpci.so.3.1.4) ==6531== by 0x4C2BE5E: hwloc_look_libpci (topology-libpci.c:751) ==6531== by 0x4C16CBC: hwloc_discover (topology.c:2299) ==6531== by 0x4C17DE1: hwloc_topology_load (topology.c:2831) ==6531== by 0x405111: main (lstopo.c:530) This seems much more like a libpci problem than an hwloc one but I don't recall seeing it mentioned before, nor did I see anything obvious looking for "pci core" in the report tracking system. Did I miss it? Carl