openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

memlog.h (1974B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * File: 	memlog.h
      8  * Purpose: 	Supports memlog memory leak tool
      9  */
     10 
     11 #ifndef _SAL_MEMLOG_H
     12 #define _SAL_MEMLOG_H
     13 
     14 #if defined(MEMLOG_SUPPORT) && defined(__GNUC__)
     15 
     16 #include <stdio.h>
     17 #include <unistd.h>
     18 #include <sal/core/sync.h>
     19 
     20 #define MEM_LOG_BUF_SIZE 512
     21 
     22 extern sal_mutex_t memlog_lock;
     23 extern int memlog_fd;
     24 extern char memlog_buf[MEM_LOG_BUF_SIZE];
     25 
     26 #define MEMLOG_ALLOC(func,ptr,size,string) \
     27     { \
     28         int n; \
     29         if (memlog_fd > 0) { \
     30             if (memlog_lock) { \
     31                 sal_mutex_take(memlog_lock, sal_mutex_FOREVER); \
     32             } \
     33             if ((string) != NULL) { \
     34                 n = snprintf(memlog_buf, MEM_LOG_BUF_SIZE, "%s %p %p %d %s\n", \
     35                     (func), __builtin_return_address(0), (ptr), (size), (string)); \
     36             } else {\
     37                 n = snprintf(memlog_buf, MEM_LOG_BUF_SIZE, "%s %p %p %d NULL\n", \
     38                     (func), __builtin_return_address(0), (ptr), (size)); \
     39             } \
     40             write(memlog_fd, memlog_buf, n); \
     41             fsync(memlog_fd); \
     42             if (memlog_lock) { \
     43                 sal_mutex_give(memlog_lock); \
     44             } \
     45         } \
     46     }
     47 
     48 #define MEMLOG_FREE(func,ptr) \
     49     { \
     50         int n; \
     51         if (memlog_fd > 0) { \
     52             if (memlog_lock) { \
     53                 sal_mutex_take(memlog_lock, sal_mutex_FOREVER); \
     54             } \
     55             n = snprintf(memlog_buf, MEM_LOG_BUF_SIZE, "%s %p\n", (func), (ptr)); \
     56             write(memlog_fd, memlog_buf, n); \
     57             fsync(memlog_fd); \
     58             if (memlog_lock) { \
     59                 sal_mutex_give(memlog_lock); \
     60             } \
     61         } \
     62     }
     63 
     64 #else
     65 
     66 #define MEMLOG_ALLOC(func,ptr,size,string)
     67 #define MEMLOG_FREE(func,ptr)
     68 
     69 #endif
     70 
     71 #endif	/* !_SAL_MEMLOG_H */