* bfd-in2.h: Rebuilt.
[deliverable/binutils-gdb.git] / gas / subsegs.h
CommitLineData
fecd2382 1/* subsegs.h -> subsegs.c
939b21d2
KR
2
3 Copyright (C) 1987, 1992 Free Software Foundation, Inc.
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 */
fecd2382
RP
47};
48
49typedef struct frchain frchainS;
50
939b21d2
KR
51/* All subsegments' chains hang off here. NULL means no frchains yet. */
52extern frchainS *frchain_root;
fecd2382 53
939b21d2
KR
54/* Frchain we are assembling into now That is, the current segment's
55 frag chain, even if it contains no (complete) frags. */
56extern frchainS *frchain_now;
fecd2382 57
ace68c4e 58
939b21d2 59typedef struct
ace68c4e 60{
939b21d2
KR
61 frchainS *frchainP;
62 int hadone : 1;
63
64 /* This field is set if this is a .bss section which does not really
65 have any contents. Once upon a time a .bss section did not have
66 any frags, but that is no longer true. This field prevent the
67 SEC_HAS_CONTENTS flag from being set for the section even if
68 there are frags. */
69 int bss : 1;
70
71 int user_stuff;
72 fixS *fix_root;
73 fixS *fix_tail;
74#if defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER)
75 struct internal_scnhdr scnhdr;
76#endif
77 symbolS *dot;
78
79 struct lineno_list *lineno_list_head;
80 struct lineno_list *lineno_list_tail;
81
82#ifdef BFD_ASSEMBLER
83 /* Which BFD section does this gas segment correspond to? */
84 asection *bfd_section;
85
86 /* NULL, or pointer to the gas symbol that is the section symbol for
87 this section. sym->bsym and bfd_section->symbol should be the same. */
88 symbolS *sym;
89#endif
90
91 union
92 {
93 /* Current size of section holding stabs strings. */
94 unsigned long stab_string_size;
95 /* Initial frag for ELF. */
96 char *p;
97 }
98 stabu;
99
100#ifdef NEED_LITERAL_POOL
101 unsigned long literal_pool_size;
102#endif
ace68c4e 103} segment_info_type;
939b21d2
KR
104
105#ifdef BFD_ASSEMBLER
106
107#define seg_info(SEC) \
108 ((segment_info_type *) bfd_get_section_userdata (stdoutput, (SEC)))
109extern symbolS *section_symbol PARAMS ((segT));
110
111#else /* ! BFD_ASSEMBLER */
112
113#ifdef MANY_SEGMENTS
114
115extern segment_info_type segment_info[];
116
117#define seg_info(SEC) (&segment_info[SEC])
118
ace68c4e 119#else
939b21d2
KR
120
121/* Sentinel for frchain crawling. Points to the 1st data-segment
122 frchain. (Which is pointed to by the last text-segment frchain.) */
123extern frchainS *data0_frchainP;
124extern frchainS *bss0_frchainP;
fecd2382 125
ace68c4e
SC
126#endif
127
939b21d2
KR
128#endif /* ! BFD_ASSEMBLER */
129
8b228fe9 130/* end of subsegs.h */
This page took 0.116844 seconds and 4 git commands to generate.