📄 ptt_glibc-2.4.patch
字号:
+#define PTT_TRACE_INTERNALS(x,...)+#else /* PTT_DBG != PTT_DBG_NONE */+#define PTT_TRACE_INTERNALS(level,...) \+ if (level & PTT_DBG) fprintf (stderr, __VA_ARGS__)+#endif /* PTT_DBG != PTT_DBG_NONE */++#endif /* PTT_DEBUG_H */+#endif /* PTT_NEW_FILES */+diff -Naur ori_glibc/nptl/ptt_module.c new_glibc/nptl/ptt_module.c--- ori_glibc/nptl/ptt_module.c 1970-01-01 01:00:00.000000000 +0100+++ new_glibc/nptl/ptt_module.c 2006-06-22 14:48:19.000000000 +0200@@ -0,0 +1,510 @@+/* Copyright (C) 2004,2005,2006 Bull S.A.+ *+ * This library is free software; you can redistribute it and/or+ * modify it under the terms of the GNU Lesser General Public+ * License as published by the Free Software Foundation; either+ * version 2.1 of the License, or (at your option) any later version.+ *+ * This library is distributed in the hope that it will be useful,+ * but WITHOUT ANY WARRANTY; without even the implied warranty of+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU+ * Lesser General Public License for more details.+ *+ * You should have received a copy of the GNU Lesser General Public+ * License along with this library; if not, write to the Free Software+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA+ */++/* PTT module to initialize PTT and write trace points in a shared buffer */++#ifdef PTT_NEW_FILES++#define _XOPEN_SOURCE 500++#include "ptt_types.h"+#include "ptt_trace.h"+#include "ptt_debug.h"+#include "pthreadP.h"+#include <stdio.h>+#include <stdlib.h>+#include <unistd.h>+#include <fcntl.h>+#include <stdarg.h>+#include <assert.h>+#include <pthread.h>+#include <sys/types.h>+#include <sys/mman.h>+#include <libc-symbols.h>+#include <atomic.h>+#include <hp-timing.h>++struct ptt_buffer* ptt_buf;+pid_t attribute_hidden ptt_trace_pid;++ptt_point_data_t attribute_hidden ptt_point_array[] = {+#if __WORDSIZE == 64+ {{}, 0, 7}, /* NULL */+ {{PTT_UINT}, 1, 8}, /* INIT */+ {{}, 0, 7}, /* FINI */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* BAR_1 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* BAR_2 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* BAR_3 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* BAR_4 */+ {{PTT_PTR, PTT_PTR, PTT_UINT}, 3, 12}, /* BAR_5 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* BAR_6 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* BAR_7 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* BAR_8 */+ {{PTT_PTR, PTT_UINT}, 2, 10}, /* BAR_9 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* BAR_10 */+ {{PTT_PTR, PTT_UINT}, 2, 10}, /* BAR_11 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* BAR_12 */+ {{PTT_PTR}, 1, 9}, /* BAR_13 */+ {{PTT_PTR}, 1, 9}, /* BAR_14 */+ {{PTT_PTR}, 1, 9}, /* BAR_15 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* COND_1 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_2 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_3 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_4 */+ {{PTT_PTR, PTT_ULL}, 2, 11}, /* COND_5 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_6 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_7 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* COND_8 */+ {{PTT_PTR, PTT_PTR}, 2, 11}, /* COND_9 */+ {{PTT_PTR, PTT_PTR, PTT_ULL, PTT_UINT, PTT_PTR, PTT_INT}, 6, 17},+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_INT}, 4, 14}, /* COND_11 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_12 */+ {{PTT_PTR, PTT_PTR}, 2, 11}, /* COND_13 */+ {{PTT_PTR, PTT_ULL}, 2, 11}, /* COND_14 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_15 */+ {{PTT_PTR, PTT_PTR}, 2, 11}, /* COND_16 */+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_INT}, 4, 14}, /* COND_17 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* COND_18 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* COND_19 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_20 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* COND_21 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* COND_22 */+ {{PTT_PTR}, 1, 9}, /* COND_23 */+ {{PTT_PTR}, 1, 9}, /* COND_24 */+ {{PTT_PTR}, 1, 9}, /* MTX_1 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* MTX_2 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* MTX_3 */+ {{PTT_PTR, PTT_PTR}, 2, 11}, /* MTX_4 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* MTX_5 */+ {{PTT_PTR, PTT_UINT, PTT_INT, PTT_INT, PTT_PTR, PTT_INT}, 6, 15},+ {{PTT_PTR}, 1, 9}, /* MTX_7 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* MTX_8 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* MTX_9 */+ {{PTT_PTR, PTT_INT, PTT_PTR}, 3, 12}, /* MTX_10 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* MTX_11 */+ {{PTT_PTR, PTT_UINT}, 2, 10}, /* MTX_12 */+ {{PTT_PTR, PTT_INT, PTT_PTR, PTT_INT}, 4, 13}, /* MTX_13 */+ {{PTT_PTR}, 1, 9}, /* MTX_14 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* MTX_15 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* MTX_16 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* MTX_17 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* MTX_18 */+ {{}, 0, 7}, /* THR_1 */+ {{}, 0, 7}, /* THR_2 */+ {{}, 0, 7}, /* THR_3 */+ {{PTT_PTR}, 1, 9}, /* THR_4 */+ {{PTT_INT}, 1, 8}, /* THR_5 */+ {{PTT_PTR}, 1, 9}, /* THR_6 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* THR_7 */+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_PTR}, 4, 15}, /* THR_8 */+ {{PTT_INT}, 1, 8}, /* THR_9 */+ {{PTT_PTR}, 1, 9}, /* THR_10 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 12}, /* THR_11 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* THR_12 */+ {{PTT_PTR, PTT_PTR}, 2, 11}, /* THR_13 */+ {{PTT_INT}, 1, 8}, /* THR_14 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* THR_15 */+ {{PTT_INT}, 1, 8}, /* FORK */+ {{PTT_PTR, PTT_INT, PTT_UINT}, 3, 11}, /* SEM_1 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* SEM_2 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* SEM_3 */+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_INT}, 4, 14}, /* SEM_4 */+ {{PTT_PTR, PTT_PTR, PTT_UINT}, 3, 12}, /* SEM_5 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* SEM_6 */+ {{PTT_PTR}, 1, 9}, /* SEM_7 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* SEM_8 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* SEM_9 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 13}, /* SEM_10 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* SEM_11 */+ {{PTT_PTR}, 1, 9}, /* SEM_12 */+ {{PTT_PTR}, 1, 9}, /* SEM_13 */+ {{}, 0, 7}, /* SEM_14 */+ {{PTT_INT}, 1, 8}, /* SEM_15 */+ {{PTT_PTR, PTT_UINT}, 2, 10}, /* SEM_16 */+ {{PTT_PTR}, 1, 9}, /* SEM_17 */+ {{}, 0, 7}, /* SEM_18 */+ {{}, 0, 7}, /* SEM_19 */+ {{PTT_PTR, PTT_UINT}, 2, 10}, /* SEM_20 */+ {{PTT_PTR, PTT_UINT}, 2, 10}, /* SEM_21 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* SEM_22 */+ {{PTT_PTR, PTT_PTR}, 2, 11}, /* SEM_23 */+ {{PTT_PTR}, 1, 9}, /* SEM_24 */+ {{PTT_PTR, PTT_INT}, 2, 10}, /* SEM_25 */+ {{PTT_UINT, PTT_INT}, 2, 9}, /* SEM_26 */+ {{PTT_PTR}, 1, 9}, /* SEM_27 */+ {{PTT_PTR}, 1, 9}, /* SEM_28 */+#else /* __WORDSIZE != 64 */+ {{}, 0, 6}, /* NULL */+ {{PTT_UINT}, 1, 7}, /* INIT */+ {{}, 0, 6}, /* FINI */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* BAR_1 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* BAR_2 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* BAR_3 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* BAR_4 */+ {{PTT_PTR, PTT_PTR, PTT_UINT}, 3, 9}, /* BAR_5 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* BAR_6 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* BAR_7 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* BAR_8 */+ {{PTT_PTR, PTT_UINT}, 2, 8}, /* BAR_9 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* BAR_10 */+ {{PTT_PTR, PTT_UINT}, 2, 8}, /* BAR_11 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* BAR_12 */+ {{PTT_PTR}, 1, 7}, /* BAR_13 */+ {{PTT_PTR}, 1, 7}, /* BAR_14 */+ {{PTT_PTR}, 1, 7}, /* BAR_15 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* COND_1 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_2 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_3 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_4 */+ {{PTT_PTR, PTT_ULL}, 2, 9}, /* COND_5 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_6 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_7 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* COND_8 */+ {{PTT_PTR, PTT_PTR}, 2, 8}, /* COND_9 */+ {{PTT_PTR, PTT_PTR, PTT_ULL, PTT_UINT, PTT_PTR, PTT_INT}, 6, 13},+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_INT}, 4, 10}, /* COND_11 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_12 */+ {{PTT_PTR, PTT_PTR}, 2, 8}, /* COND_13 */+ {{PTT_PTR, PTT_ULL}, 2, 9}, /* COND_14 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_15 */+ {{PTT_PTR, PTT_PTR}, 2, 8}, /* COND_16 */+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_INT}, 4, 10}, /* COND_17 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* COND_18 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* COND_19 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_20 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* COND_21 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* COND_22 */+ {{PTT_PTR}, 1, 7}, /* COND_23 */+ {{PTT_PTR}, 1, 7}, /* COND_24 */+ {{PTT_PTR}, 1, 7}, /* MTX_1 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* MTX_2 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* MTX_3 */+ {{PTT_PTR, PTT_PTR}, 2, 8}, /* MTX_4 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* MTX_5 */+ {{PTT_PTR, PTT_UINT, PTT_INT, PTT_INT, PTT_PTR, PTT_INT}, 6, 12},+ {{PTT_PTR}, 1, 7}, /* MTX_7 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* MTX_8 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* MTX_9 */+ {{PTT_PTR, PTT_INT, PTT_PTR}, 3, 9}, /* MTX_10 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* MTX_11 */+ {{PTT_PTR, PTT_UINT}, 2, 8}, /* MTX_12 */+ {{PTT_PTR, PTT_INT, PTT_PTR, PTT_INT}, 4, 10}, /* MTX_13 */+ {{PTT_PTR}, 1, 7}, /* MTX_14 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* MTX_15 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* MTX_16 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* MTX_17 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* MTX_18 */+ {{}, 0, 6}, /* THR_1 */+ {{}, 0, 6}, /* THR_2 */+ {{}, 0, 6}, /* THR_3 */+ {{PTT_PTR}, 1, 7}, /* THR_4 */+ {{PTT_INT}, 1, 7}, /* THR_5 */+ {{PTT_PTR}, 1, 7}, /* THR_6 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* THR_7 */+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_PTR}, 4, 10}, /* THR_8 */+ {{PTT_INT}, 1, 7}, /* THR_9 */+ {{PTT_PTR}, 1, 7}, /* THR_10 */+ {{PTT_PTR, PTT_PTR, PTT_INT}, 3, 9}, /* THR_11 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* THR_12 */+ {{PTT_PTR, PTT_PTR}, 2, 8}, /* THR_13 */+ {{PTT_INT}, 1, 7}, /* THR_14 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* THR_15 */+ {{PTT_INT}, 1, 7}, /* FORK */+ {{PTT_PTR, PTT_INT, PTT_UINT}, 3, 9}, /* SEM_1 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* SEM_2 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* SEM_3 */+ {{PTT_PTR, PTT_PTR, PTT_PTR, PTT_INT}, 4, 10}, /* SEM_4 */+ {{PTT_PTR, PTT_PTR, PTT_UINT}, 3, 9}, /* SEM_5 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* SEM_6 */+ {{PTT_PTR}, 1, 7}, /* SEM_7 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* SEM_8 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* SEM_9 */+ {{PTT_PTR, PTT_UINT, PTT_PTR, PTT_INT}, 4, 10}, /* SEM_10 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* SEM_11 */+ {{PTT_PTR}, 1, 7}, /* SEM_12 */+ {{PTT_PTR}, 1, 7}, /* SEM_13 */+ {{}, 0, 6}, /* SEM_14 */+ {{PTT_INT}, 1, 7}, /* SEM_15 */+ {{PTT_PTR, PTT_UINT}, 2, 8}, /* SEM_16 */+ {{PTT_PTR}, 1, 7}, /* SEM_17 */+ {{}, 0, 6}, /* SEM_18 */+ {{}, 0, 6}, /* SEM_19 */+ {{PTT_PTR, PTT_UINT}, 2, 8}, /* SEM_20 */+ {{PTT_PTR, PTT_UINT}, 2, 8}, /* SEM_21 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* SEM_22 */+ {{PTT_PTR, PTT_PTR}, 2, 8}, /* SEM_23 */+ {{PTT_PTR}, 1, 7}, /* SEM_24 */+ {{PTT_PTR, PTT_INT}, 2, 8}, /* SEM_25 */+ {{PTT_UINT, PTT_INT}, 2, 8}, /* SEM_26 */+ {{PTT_PTR}, 1, 7}, /* SEM_27 */+ {{PTT_PTR}, 1, 7}, /* SEM_28 */+#endif /* __WORDSIZE == 64 */+};++#define PTT_VERS_MAJOR 1+#define PTT_VERS_MINOR 0++#define PTT_FILE_LEN 255++#if HP_TIMING_AVAIL == 0+#error no hp-timing+#endif /* HP_TIMING_AVAIL == 0 */+#define PTT_GET_TIME(time) HP_TIMING_NOW(time)++#define PTT_SIZE (ptt_buf->size_buff)+#define PTT_SZ_WORD (sizeof(PTT_WORD))++/* write data in an array and increment the index */+#define PTT_WR_32(arg,deb,tab,sum) \+({sum ^= tab[(deb)%(PTT_SIZE)] = (PTT_WORD)(arg); \+ (deb)++;})+#define PTT_WR_64(arg,deb,tab,sum) \+({sum ^= tab[(deb)%(PTT_SIZE)] = \+ (PTT_WORD)((unsigned long long)(arg) & 0xffffffff); \+ (deb)++; \+ sum ^= tab[(deb)%(PTT_SIZE)] = \+ (PTT_WORD)((unsigned long long)(arg) >> 32); \+ (deb)++;})+/* trace point name */+#define PTT_WR_NAME(arg,deb,tab,sum) PTT_WR_32(arg,deb,tab,sum)+/* integer data */+#define PTT_WR_INT(arg,deb,tab,sum) PTT_WR_32(arg,deb,tab,sum)+/* pointer data */ +#if __WORDSIZE == 64+#define PTT_WR_PTR(arg,deb,tab,sum) PTT_WR_64(arg,deb,tab,sum)+#else /* __WORDSIZE != 64 */+#define PTT_WR_PTR(arg,deb,tab,sum) PTT_WR_32(arg,deb,tab,sum)+#endif /* __WORDSIZE == 64 */+/* unsigned integer data */ +#define PTT_WR_UINT(arg,deb,tab,sum) PTT_WR_32(arg,deb,tab,sum)+/* unsigned long long data */ +#define PTT_WR_ULL(arg,deb,tab,sum) PTT_WR_64(arg,deb,tab,sum)+/* time (unsigned long long) */+#define PTT_WR_TIME(arg,deb,tab,sum) PTT_WR_64(arg,deb,tab,sum)+/* check_sum (integer) */ +#define PTT_WR_CHECK(arg,deb,tab) \+({tab[(deb)%(PTT_SIZE)] = (PTT_WORD)(arg); \+ deb++;})++/* If NPTL is initialized while PTT daemon is not running, trace mechanism is+ * disabled.+ * PTT daemon initializes the shared buffer (shared memory object called+ * ptt_[daemon_pid] with [daemon_pid]==[daemon_pgid]). So, if this shared+ * buffer doesn't exists (no shared memory object ptt_[pgid]), PTT daemon is+ * not running, and therefore trace mechanism is disabled.+ */+void attribute_hidden ptt_init_nptl (void)+{+ char region[PTT_FILE_LEN]; /* name of the shared memory */+ int fd;++ snprintf (region, sizeof (region), "/ptt_%d", getpgid (0));+ if ((fd = shm_open (region, O_RDWR, S_IRUSR | S_IWUSR)) == -1) {+ PTT_TRACE_INTERNALS (PTT_DBG_GENERAL, "PTT daemon is not running: "+ "trace mechanism disabled\n");+ ptt_buf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -