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

glibc/2.7/nptl_db/db_info.c

    1: /* This file is included by pthread_create.c to define in libpthread
    2:    all the magic symbols required by libthread_db.
    3: 
    4:    Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
    5:    This file is part of the GNU C Library.
    6: 
    7:    The GNU C Library is free software; you can redistribute it and/or
    8:    modify it under the terms of the GNU Lesser General Public
    9:    License as published by the Free Software Foundation; either
   10:    version 2.1 of the License, or (at your option) any later version.
   11: 
   12:    The GNU C Library is distributed in the hope that it will be useful,
   13:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   14:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   15:    Lesser General Public License for more details.
   16: 
   17:    You should have received a copy of the GNU Lesser General Public
   18:    License along with the GNU C Library; if not, write to the Free
   19:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   20:    02111-1307 USA.  */
   21: 
   22: #include "thread_dbP.h"
   23: #include <tls.h>
   24: 
   25: typedef struct pthread pthread;
   26: typedef struct pthread_key_struct pthread_key_struct;
   27: typedef struct pthread_key_data pthread_key_data;
   28: typedef struct
   29: {
   30:   struct pthread_key_data data[PTHREAD_KEY_2NDLEVEL_SIZE];
   31: }
   32: pthread_key_data_level2;
   33: 
   34: typedef struct
   35: {
   36:   union dtv dtv[UINT32_MAX / 2 / sizeof (union dtv)]; /* No constant bound.  */
   37: } dtv;
   38: 
   39: typedef struct link_map link_map;
   40: 
   41: /* Actually static in nptl/init.c, but we only need it for typeof.  */
   42: extern bool __nptl_initial_report_events;
   43: 
   44: #define schedparam_sched_priority schedparam.sched_priority
   45: 
   46: #define eventbuf_eventmask eventbuf.eventmask
   47: #define eventbuf_eventmask_event_bits eventbuf.eventmask.event_bits
   48: 
   49: #define DESC(name, offset, obj) \
   50:   DB_DEFINE_DESC (name, 8 * sizeof (obj), 1, offset);
   51: #define ARRAY_DESC(name, offset, obj) \
   52:   DB_DEFINE_DESC (name, \
   53:                   8 * sizeof (obj)[0], sizeof (obj) / sizeof (obj)[0], \
   54:                   offset);
   55: 
   56: #if TLS_TCB_AT_TP
   57: # define dtvp header.dtv
   58: #elif TLS_DTV_AT_TP
   59: /* Special case hack.  If TLS_TCB_SIZE == 0 (on PowerPC), there is no TCB
   60:    containing the DTV at the TP, but actually the TCB lies behind the TP,
   61:    i.e. at the very end of the area covered by TLS_PRE_TCB_SIZE.  */
   62: DESC (_thread_db_pthread_dtvp,
   63:       TLS_PRE_TCB_SIZE + offsetof (tcbhead_t, dtv)
   64:       - (TLS_TCB_SIZE == 0 ? sizeof (tcbhead_t) : 0), union dtv *)
   65: #endif
   66: 
   67: 
   68: #define DB_STRUCT(type) \
   69:   const uint32_t _thread_db_sizeof_##type = sizeof (type);
   70: #define DB_STRUCT_FIELD(type, field) \
   71:   DESC (_thread_db_##type##_##field, \
   72:         offsetof (type, field), ((type *) 0)->field)
   73: #define DB_STRUCT_ARRAY_FIELD(type, field) \
   74:   ARRAY_DESC (_thread_db_##type##_##field, \
   75:               offsetof (type, field), ((type *) 0)->field)
   76: #define DB_VARIABLE(name) DESC (_thread_db_##name, 0, name)
   77: #define DB_ARRAY_VARIABLE(name) ARRAY_DESC (_thread_db_##name, 0, name)
   78: #define DB_SYMBOL(name) /* Nothing.  */
   79: #define DB_FUNCTION(name) /* Nothing.  */
   80: #include "structs.def"
   81: #undef DB_STRUCT
   82: #undef DB_STRUCT_FIELD
   83: #undef DB_SYMBOL
   84: #undef DB_FUNCTION
   85: #undef DB_VARIABLE
   86: #undef DESC
   87: 
   88: 
   89: 
   90: #ifdef DB_THREAD_SELF
   91: # ifdef DB_THREAD_SELF_INCLUDE
   92: #  include DB_THREAD_SELF_INCLUDE
   93: # endif
   94: 
   95: /* This macro is defined in the machine's tls.h using the three below.  */
   96: # define CONST_THREAD_AREA(bits, value) \
   97:   const uint32_t _thread_db_const_thread_area = (value);
   98: # define REGISTER_THREAD_AREA(bits, regofs, scale) \
   99:   DB_DEFINE_DESC (_thread_db_register##bits##_thread_area, \
  100:                   bits, (scale), (regofs));
  101: # define REGISTER(bits, size, regofs, bias) \
  102:   DB_DEFINE_DESC (_thread_db_register##bits, size, (uint32_t)(bias), (regofs));
  103: 
  104: DB_THREAD_SELF
  105: #endif
Syntax (Markdown)