opcodes/
[deliverable/binutils-gdb.git] / gas / subsegs.h
CommitLineData
252b5132 1/* subsegs.h -> subsegs.c
c9049d30 2 Copyright 1987, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2003, 2005,
aa820537 3 2006, 2007, 2009 Free Software Foundation, Inc.
252b5132
RH
4
5 This file is part of GAS, the GNU Assembler.
6
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
ec2655a6 9 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
10 any later version.
11
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.
16
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 the Free
4b4da160
NC
19 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
252b5132
RH
21
22/*
23 * For every sub-segment the user mentions in the ASsembler program,
24 * we make one struct frchain. Each sub-segment has exactly one struct frchain
25 * and vice versa.
26 *
27 * Struct frchain's are forward chained (in ascending order of sub-segment
28 * code number). The chain runs through frch_next of each subsegment.
29 * This makes it hard to find a subsegment's frags
30 * if programmer uses a lot of them. Most programs only use text0 and
31 * data0, so they don't suffer. At least this way:
32 * (1) There are no "arbitrary" restrictions on how many subsegments
33 * can be programmed;
34 * (2) Subsegments' frchain-s are (later) chained together in the order in
35 * which they are emitted for object file viz text then data.
36 *
37 * From each struct frchain dangles a chain of struct frags. The frags
38 * represent code fragments, for that sub-segment, forward chained.
39 */
40
41#include "obstack.h"
42
ae424f82
JJ
43struct frch_cfi_data;
44
252b5132
RH
45struct frchain /* control building of a frag chain */
46{ /* FRCH = FRagment CHain control */
47 struct frag *frch_root; /* 1st struct frag in chain, or NULL */
48 struct frag *frch_last; /* last struct frag in chain, or NULL */
49 struct frchain *frch_next; /* next in chain of struct frchain-s */
252b5132 50 subsegT frch_subseg; /* subsegment number of this chain */
252b5132
RH
51 fixS *fix_root; /* Root of fixups for this subsegment. */
52 fixS *fix_tail; /* Last fixup for this subsegment. */
252b5132
RH
53 struct obstack frch_obstack; /* for objects in this frag chain */
54 fragS *frch_frag_now; /* frag_now for this subsegment */
ae424f82 55 struct frch_cfi_data *frch_cfi_data;
252b5132
RH
56};
57
58typedef struct frchain frchainS;
59
252b5132 60/* Frchain we are assembling into now. That is, the current segment's
a01b9fa4 61 frag chain, even if it contains no (complete) frags. */
252b5132
RH
62extern frchainS *frchain_now;
63
ef99799a 64typedef struct segment_info_struct {
252b5132
RH
65 frchainS *frchainP;
66 unsigned int hadone : 1;
67
68 /* This field is set if this is a .bss section which does not really
69 have any contents. Once upon a time a .bss section did not have
70 any frags, but that is no longer true. This field prevent the
71 SEC_HAS_CONTENTS flag from being set for the section even if
72 there are frags. */
73 unsigned int bss : 1;
74
75 int user_stuff;
76
7be1c489
AM
77 /* Fixups for this segment. This is only valid after the frchains
78 are run together. */
252b5132
RH
79 fixS *fix_root;
80 fixS *fix_tail;
81
252b5132
RH
82 symbolS *dot;
83
84 struct lineno_list *lineno_list_head;
85 struct lineno_list *lineno_list_tail;
86
252b5132
RH
87 /* Which BFD section does this gas segment correspond to? */
88 asection *bfd_section;
89
90 /* NULL, or pointer to the gas symbol that is the section symbol for
91 this section. sym->bsym and bfd_section->symbol should be the same. */
92 symbolS *sym;
252b5132 93
ef99799a
KH
94 union {
95 /* Current size of section holding stabs strings. */
96 unsigned long stab_string_size;
97 /* Initial frag for ELF. */
98 char *p;
99 }
252b5132
RH
100 stabu;
101
102#ifdef NEED_LITERAL_POOL
103 unsigned long literal_pool_size;
104#endif
105
106#ifdef TC_SEGMENT_INFO_TYPE
107 TC_SEGMENT_INFO_TYPE tc_segment_info_data;
108#endif
109} segment_info_type;
110
c9049d30
AM
111
112#define seg_info(sec) \
113 ((segment_info_type *) bfd_get_section_userdata (stdoutput, sec))
114
24361518 115extern symbolS *section_symbol (segT);
252b5132 116
24361518 117extern void subsegs_print_statistics (FILE *);
This page took 0.554498 seconds and 4 git commands to generate.