(linenum→info "unix/slp.c:2238")

glibc/2.7/nptl_db/td_symbol_list.c

    1: /* Return list of symbols the library can request.
    2:    Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
    3:    This file is part of the GNU C Library.
    4:    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
    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 <assert.h>
   22: #include <gnu/lib-names.h>
   23: #include "thread_dbP.h"
   24: 
   25: 
   26: #ifdef HAVE_ASM_GLOBAL_DOT_NAME
   27: # define DOT "."                /* PPC64 requires . prefix on code symbols.  */
   28: #else
   29: # define DOT                    /* No prefix.  */
   30: #endif
   31: 
   32: static const char *symbol_list_arr[] =
   33: {
   34: # define DB_STRUCT(type) \
   35:   [SYM_SIZEOF_##type] = "_thread_db_sizeof_" #type,
   36: # define DB_STRUCT_FIELD(type, field) \
   37:   [SYM_##type##_FIELD_##field] = "_thread_db_" #type "_" #field,
   38: # define DB_SYMBOL(name) \
   39:   [SYM_##name] = #name,
   40: # define DB_FUNCTION(name) \
   41:   [SYM_##name] = DOT #name,
   42: # define DB_VARIABLE(name) \
   43:   [SYM_##name] = #name, \
   44:   [SYM_DESC_##name] = "_thread_db_" #name,
   45: # include "structs.def"
   46: # undef DB_STRUCT
   47: # undef DB_FUNCTION
   48: # undef DB_SYMBOL
   49: # undef DB_VARIABLE
   50: 
   51:   [SYM_TH_UNIQUE_CONST_THREAD_AREA] = "_thread_db_const_thread_area",
   52:   [SYM_TH_UNIQUE_REGISTER64] = "_thread_db_register64",
   53:   [SYM_TH_UNIQUE_REGISTER32] = "_thread_db_register32",
   54:   [SYM_TH_UNIQUE_REGISTER32_THREAD_AREA] = "_thread_db_register32_thread_area",
   55:   [SYM_TH_UNIQUE_REGISTER64_THREAD_AREA] = "_thread_db_register64_thread_area",
   56: 
   57:   [SYM_NUM_MESSAGES] = NULL
   58: };
   59: 
   60: 
   61: const char **
   62: td_symbol_list (void)
   63: {
   64:   return symbol_list_arr;
   65: }
   66: 
   67: 
   68: ps_err_e
   69: td_lookup (struct ps_prochandle *ps, int idx, psaddr_t *sym_addr)
   70: {
   71:   ps_err_e result;
   72:   assert (idx >= 0 && idx < SYM_NUM_MESSAGES);
   73:   result = ps_pglobal_lookup (ps, LIBPTHREAD_SO, symbol_list_arr[idx],
   74:                               sym_addr);
   75: 
   76: #ifdef HAVE_ASM_GLOBAL_DOT_NAME
   77:   /* For PowerPC, 64-bit uses dot symbols but 32-bit does not.
   78:      We could be a 64-bit libthread_db debugging a 32-bit libpthread.  */
   79:   if (result == PS_NOSYM && symbol_list_arr[idx][0] == '.')
   80:     result = ps_pglobal_lookup (ps, LIBPTHREAD_SO, &symbol_list_arr[idx][1],
   81:                                 sym_addr);
   82: #endif
   83: 
   84:   return result;
   85: }
Syntax (Markdown)