
1: /* Write formatted list with names for addresses in backtrace to a file. 2: Copyright (C) 1998, 2003, 2005 Free Software Foundation, Inc. 3: This file is part of the GNU C Library. 4: Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. 5: 6: The GNU C Library is free software; you can redistribute it and/or 7: modify it under the terms of the GNU Lesser General Public 8: License as published by the Free Software Foundation; either 9: version 2.1 of the License, or (at your option) any later version. 10: 11: The GNU C Library is distributed in the hope that it will be useful, 12: but WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: Lesser General Public License for more details. 15: 16: You should have received a copy of the GNU Lesser General Public 17: License along with the GNU C Library; if not, write to the Free 18: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 19: 02111-1307 USA. */ 20: 21: #include <execinfo.h> 22: #include <string.h> 23: #include <sys/uio.h> 24: 25: #include <stdio-common/_itoa.h> 26: #include <not-cancel.h> 27: 28: #if __ELF_NATIVE_CLASS == 32 29: # define WORD_WIDTH 8 30: #else 31: /* We assume 64bits. */ 32: # define WORD_WIDTH 16 33: #endif 34: 35: 36: void 37: __backtrace_symbols_fd (array, size, fd) 38: void *const *array; 39: int size; 40: int fd; 41: { 42: struct iovec iov[3]; 43: int cnt; 44: 45: for (cnt = 0; cnt < size; ++cnt) 46: { 47: char buf[WORD_WIDTH]; 48: 49: iov[0].iov_base = (void *) "[0x"; 50: iov[0].iov_len = 3; 51: 52: iov[1].iov_base = _itoa_word ((unsigned long int) array[cnt], 53: &buf[WORD_WIDTH], 16, 0); 54: iov[1].iov_len = &buf[WORD_WIDTH] - (char *) iov[1].iov_base; 55: 56: iov[2].iov_base = (void *) "]\n"; 57: iov[2].iov_len = 2; 58: 59: /* We prefer to use the non-cancelable interface if it is available. */ 60: writev_not_cancel_no_status (fd, iov, 3); 61: } 62: } 63: weak_alias (__backtrace_symbols_fd, backtrace_symbols_fd) 64: libc_hidden_def (__backtrace_symbols_fd)