* config.in: Rename from config.h.in.
[deliverable/binutils-gdb.git] / gas / subsegs.h
CommitLineData
fecd2382 1/* subsegs.h -> subsegs.c
939b21d2 2
87e48495 3 Copyright (C) 1987, 1992, 1993, 1994 Free Software Foundation, Inc.
939b21d2 4
a39116f1 5 This file is part of GAS, the GNU Assembler.
939b21d2 6
a39116f1
RP
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
939b21d2 11
a39116f1
RP
12 GAS 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
15 GNU General Public License for more details.
939b21d2 16
a39116f1
RP
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to
19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
fecd2382
RP
20
21/*
22 * For every sub-segment the user mentions in the ASsembler program,
23 * we make one struct frchain. Each sub-segment has exactly one struct frchain
24 * and vice versa.
25 *
26 * Struct frchain's are forward chained (in ascending order of sub-segment
27 * code number). The chain runs through frch_next of each subsegment.
28 * This makes it hard to find a subsegment's frags
29 * if programmer uses a lot of them. Most programs only use text0 and
30 * data0, so they don't suffer. At least this way:
31 * (1) There are no "arbitrary" restrictions on how many subsegments
32 * can be programmed;
33 * (2) Subsegments' frchain-s are (later) chained together in the order in
34 * which they are emitted for object file viz text then data.
35 *
36 * From each struct frchain dangles a chain of struct frags. The frags
37 * represent code fragments, for that sub-segment, forward chained.
38 */
39
40struct frchain /* control building of a frag chain */
41{ /* FRCH = FRagment CHain control */
939b21d2
KR
42 struct frag *frch_root; /* 1st struct frag in chain, or NULL */
43 struct frag *frch_last; /* last struct frag in chain, or NULL */
44 struct frchain *frch_next; /* next in chain of struct frchain-s */
45 segT frch_seg; /* SEG_TEXT or SEG_DATA. */
46 subsegT frch_subseg; /* subsegment number of this chain */
87e48495
KR
47#ifdef BFD_ASSEMBLER
48 fixS *fix_root; /* Root of fixups for this subsegment. */
49 fixS *fix_tail; /* Last fixup for this subsegment. */
50#endif
51 struct obstack frch_obstack; /* for objects in this frag chain */
fecd2382
RP
52};
53
54typedef struct frchain frchainS;
55
939b21d2
KR
56/* All subsegments' chains hang off here. NULL means no frchains yet. */
57extern frchainS *frchain_root;
fecd2382 58
939b21d2
KR
59/* Frchain we are assembling into now That is, the current segment's
60 frag chain, even if it contains no (complete) frags. */
61extern frchainS *frchain_now;
fecd2382 62
ace68c4e 63
939b21d2 64typedef struct
ace68c4e 65{
939b21d2
KR
66 frchainS *frchainP;
67 int hadone : 1;
68
69 /* This field is set if this is a .bss section which does not really
70 have any contents. Once upon a time a .bss section did not have
71 any frags, but that is no longer true. This field prevent the
72 SEC_HAS_CONTENTS flag from being set for the section even if
73 there are frags. */
74 int bss : 1;
75
76 int user_stuff;
87e48495
KR
77
78 /* Fixups for this segment. If BFD_ASSEMBLER, this is only valid
79 after the frchains are run together. */
939b21d2
KR
80 fixS *fix_root;
81 fixS *fix_tail;
87e48495 82
939b21d2
KR
83#if defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER)
84 struct internal_scnhdr scnhdr;
85#endif
86 symbolS *dot;
87
88 struct lineno_list *lineno_list_head;
89 struct lineno_list *lineno_list_tail;
90
91#ifdef BFD_ASSEMBLER
92 /* Which BFD section does this gas segment correspond to? */
93 asection *bfd_section;
94
95 /* NULL, or pointer to the gas symbol that is the section symbol for
96 this section. sym->bsym and bfd_section->symbol should be the same. */
97 symbolS *sym;
98#endif
99
100 union
101 {
102 /* Current size of section holding stabs strings. */
103 unsigned long stab_string_size;
104 /* Initial frag for ELF. */
105 char *p;
106 }
107 stabu;
108
109#ifdef NEED_LITERAL_POOL
110 unsigned long literal_pool_size;
111#endif
ace68c4e 112} segment_info_type;
939b21d2
KR
113
114#ifdef BFD_ASSEMBLER
115
87e48495 116extern segment_info_type *seg_info PARAMS ((segT));
939b21d2
KR
117extern symbolS *section_symbol PARAMS ((segT));
118
119#else /* ! BFD_ASSEMBLER */
120
121#ifdef MANY_SEGMENTS
122
123extern segment_info_type segment_info[];
124
125#define seg_info(SEC) (&segment_info[SEC])
126
ace68c4e 127#else
939b21d2
KR
128
129/* Sentinel for frchain crawling. Points to the 1st data-segment
130 frchain. (Which is pointed to by the last text-segment frchain.) */
131extern frchainS *data0_frchainP;
132extern frchainS *bss0_frchainP;
fecd2382 133
ace68c4e
SC
134#endif
135
939b21d2
KR
136#endif /* ! BFD_ASSEMBLER */
137
8b228fe9 138/* end of subsegs.h */
This page took 0.214249 seconds and 4 git commands to generate.