mem: exclude unused memory from core dump
[dpdk.git] / lib / librte_eal / common / eal_common_memory.c
index cc7d54e..9a797a4 100644 (file)
 static void *next_baseaddr;
 static uint64_t system_page_sz;
 
+#ifdef RTE_EXEC_ENV_LINUX
+#define RTE_DONTDUMP MADV_DONTDUMP
+#elif RTE_EXEC_ENV_FREEBSD
+#define RTE_DONTDUMP MADV_NOCORE
+#else
+#error "madvise doesn't support this OS"
+#endif
+
 #define MAX_MMAP_WITH_DEFINED_ADDR_TRIES 5
 void *
 eal_get_virtual_area(void *requested_addr, size_t *size,
@@ -179,6 +187,13 @@ eal_get_virtual_area(void *requested_addr, size_t *size,
                        munmap(aligned_end, after_len);
        }
 
+       if (!unmap) {
+               /* Exclude these pages from a core dump. */
+               if (madvise(aligned_addr, *size, RTE_DONTDUMP) != 0)
+                       RTE_LOG(DEBUG, EAL, "madvise failed: %s\n",
+                               strerror(errno));
+       }
+
        return aligned_addr;
 }