2003-09-08 Roland McGrath <roland@redhat.com>
[kopensolaris-gnu/glibc.git] / 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 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
42 #define schedparam_sched_priority schedparam.sched_priority
43
44 #define eventbuf_eventmask eventbuf.eventmask
45 #define eventbuf_eventmask_event_bits eventbuf.eventmask.event_bits
46
47 #define DESC(name, offset, obj) \
48   DB_DEFINE_DESC (name, 8 * sizeof (obj), 1, offset);
49 #define ARRAY_DESC(name, offset, obj) \
50   DB_DEFINE_DESC (name, \
51                   8 * sizeof (obj)[0], sizeof (obj) / sizeof (obj)[0], \
52                   offset);
53
54 #if TLS_TCB_AT_TP
55 # define dtvp header.dtv
56 #elif TLS_DTV_AT_TP
57 /* Special case hack.  */
58 DESC (_thread_db_pthread_dtvp,
59       TLS_PRE_TCB_SIZE + offsetof (tcbhead_t, dtv), union dtv)
60 #endif
61
62
63 #define DB_STRUCT(type) \
64   const uint32_t _thread_db_sizeof_##type = sizeof (type);
65 #define DB_STRUCT_FIELD(type, field) \
66   DESC (_thread_db_##type##_##field, \
67         offsetof (type, field), ((type *) 0)->field)
68 #define DB_STRUCT_ARRAY_FIELD(type, field) \
69   ARRAY_DESC (_thread_db_##type##_##field, \
70               offsetof (type, field), ((type *) 0)->field)
71 #define DB_VARIABLE(name) DESC (_thread_db_##name, 0, name)
72 #define DB_ARRAY_VARIABLE(name) ARRAY_DESC (_thread_db_##name, 0, name)
73 #define DB_SYMBOL(name) /* Nothing.  */
74 #include "structs.def"
75 #undef DB_STRUCT
76 #undef DB_STRUCT_FIELD
77 #undef DB_SYMBOL
78 #undef DB_VARIABLE
79 #undef DESC
80
81
82
83 #ifdef DB_THREAD_SELF
84 # ifdef DB_THREAD_SELF_INCLUDE
85 #  include DB_THREAD_SELF_INCLUDE
86 # endif
87
88 /* This macro is defined in the machine's tls.h using the three below.  */
89 # define CONST_THREAD_AREA(bits, value) \
90   const uint32_t _thread_db_const_thread_area = (value);
91 # define REGISTER_THREAD_AREA(bits, regofs, scale) \
92   DB_DEFINE_DESC (_thread_db_register##bits##_thread_area, \
93                   bits, (scale), (regofs));
94 # define REGISTER(bits, regofs, bias) \
95   DB_DEFINE_DESC (_thread_db_register##bits, bits, (uint32_t)(bias), (regofs));
96
97 DB_THREAD_SELF
98 #endif