1*f3e7f55eSRobert Mustacchi /*
2*f3e7f55eSRobert Mustacchi
3*f3e7f55eSRobert Mustacchi Copyright (C) 2000,2004 Silicon Graphics, Inc. All Rights Reserved.
4*f3e7f55eSRobert Mustacchi
5*f3e7f55eSRobert Mustacchi This program is free software; you can redistribute it and/or modify it
6*f3e7f55eSRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License
7*f3e7f55eSRobert Mustacchi as published by the Free Software Foundation.
8*f3e7f55eSRobert Mustacchi
9*f3e7f55eSRobert Mustacchi This program is distributed in the hope that it would be useful, but
10*f3e7f55eSRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of
11*f3e7f55eSRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12*f3e7f55eSRobert Mustacchi
13*f3e7f55eSRobert Mustacchi Further, this software is distributed without any warranty that it is
14*f3e7f55eSRobert Mustacchi free of the rightful claim of any third person regarding infringement
15*f3e7f55eSRobert Mustacchi or the like. Any license provided herein, whether implied or
16*f3e7f55eSRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if
17*f3e7f55eSRobert Mustacchi any, provided herein do not apply to combinations of this program with
18*f3e7f55eSRobert Mustacchi other software, or any other product whatsoever.
19*f3e7f55eSRobert Mustacchi
20*f3e7f55eSRobert Mustacchi You should have received a copy of the GNU Lesser General Public
21*f3e7f55eSRobert Mustacchi License along with this program; if not, write the Free Software
22*f3e7f55eSRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
23*f3e7f55eSRobert Mustacchi USA.
24*f3e7f55eSRobert Mustacchi
25*f3e7f55eSRobert Mustacchi Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
26*f3e7f55eSRobert Mustacchi Mountain View, CA 94043, or:
27*f3e7f55eSRobert Mustacchi
28*f3e7f55eSRobert Mustacchi http://www.sgi.com
29*f3e7f55eSRobert Mustacchi
30*f3e7f55eSRobert Mustacchi For further information regarding this notice, see:
31*f3e7f55eSRobert Mustacchi
32*f3e7f55eSRobert Mustacchi http://oss.sgi.com/projects/GenInfo/NoticeExplan
33*f3e7f55eSRobert Mustacchi
34*f3e7f55eSRobert Mustacchi */
35*f3e7f55eSRobert Mustacchi
36*f3e7f55eSRobert Mustacchi
37*f3e7f55eSRobert Mustacchi
38*f3e7f55eSRobert Mustacchi #include "config.h"
39*f3e7f55eSRobert Mustacchi #include "libdwarfdefs.h"
40*f3e7f55eSRobert Mustacchi #include <stdio.h>
41*f3e7f55eSRobert Mustacchi #include <string.h>
42*f3e7f55eSRobert Mustacchi #ifdef HAVE_ELFACCESS_H
43*f3e7f55eSRobert Mustacchi #include <elfaccess.h>
44*f3e7f55eSRobert Mustacchi #endif
45*f3e7f55eSRobert Mustacchi #include "pro_incl.h"
46*f3e7f55eSRobert Mustacchi #include "pro_arange.h"
47*f3e7f55eSRobert Mustacchi #include "pro_section.h"
48*f3e7f55eSRobert Mustacchi #include "pro_reloc.h"
49*f3e7f55eSRobert Mustacchi
50*f3e7f55eSRobert Mustacchi
51*f3e7f55eSRobert Mustacchi
52*f3e7f55eSRobert Mustacchi /*
53*f3e7f55eSRobert Mustacchi This function adds another address range
54*f3e7f55eSRobert Mustacchi to the list of address ranges for the
55*f3e7f55eSRobert Mustacchi given Dwarf_P_Debug. It returns 0 on error,
56*f3e7f55eSRobert Mustacchi and 1 otherwise.
57*f3e7f55eSRobert Mustacchi */
58*f3e7f55eSRobert Mustacchi Dwarf_Unsigned
dwarf_add_arange(Dwarf_P_Debug dbg,Dwarf_Addr begin_address,Dwarf_Unsigned length,Dwarf_Signed symbol_index,Dwarf_Error * error)59*f3e7f55eSRobert Mustacchi dwarf_add_arange(Dwarf_P_Debug dbg,
60*f3e7f55eSRobert Mustacchi Dwarf_Addr begin_address,
61*f3e7f55eSRobert Mustacchi Dwarf_Unsigned length,
62*f3e7f55eSRobert Mustacchi Dwarf_Signed symbol_index, Dwarf_Error * error)
63*f3e7f55eSRobert Mustacchi {
64*f3e7f55eSRobert Mustacchi return dwarf_add_arange_b(dbg, begin_address, length, symbol_index,
65*f3e7f55eSRobert Mustacchi /* end_symbol_index */ 0,
66*f3e7f55eSRobert Mustacchi /* offset_from_end_sym */ 0,
67*f3e7f55eSRobert Mustacchi error);
68*f3e7f55eSRobert Mustacchi }
69*f3e7f55eSRobert Mustacchi
70*f3e7f55eSRobert Mustacchi /*
71*f3e7f55eSRobert Mustacchi This function adds another address range
72*f3e7f55eSRobert Mustacchi to the list of address ranges for the
73*f3e7f55eSRobert Mustacchi given Dwarf_P_Debug. It returns 0 on error,
74*f3e7f55eSRobert Mustacchi and 1 otherwise.
75*f3e7f55eSRobert Mustacchi */
76*f3e7f55eSRobert Mustacchi Dwarf_Unsigned
dwarf_add_arange_b(Dwarf_P_Debug dbg,Dwarf_Addr begin_address,Dwarf_Unsigned length,Dwarf_Unsigned symbol_index,Dwarf_Unsigned end_symbol_index,Dwarf_Addr offset_from_end_sym,Dwarf_Error * error)77*f3e7f55eSRobert Mustacchi dwarf_add_arange_b(Dwarf_P_Debug dbg,
78*f3e7f55eSRobert Mustacchi Dwarf_Addr begin_address,
79*f3e7f55eSRobert Mustacchi Dwarf_Unsigned length,
80*f3e7f55eSRobert Mustacchi Dwarf_Unsigned symbol_index,
81*f3e7f55eSRobert Mustacchi Dwarf_Unsigned end_symbol_index,
82*f3e7f55eSRobert Mustacchi Dwarf_Addr offset_from_end_sym, Dwarf_Error * error)
83*f3e7f55eSRobert Mustacchi {
84*f3e7f55eSRobert Mustacchi Dwarf_P_Arange arange;
85*f3e7f55eSRobert Mustacchi
86*f3e7f55eSRobert Mustacchi if (dbg == NULL) {
87*f3e7f55eSRobert Mustacchi _dwarf_p_error(NULL, error, DW_DLE_DBG_NULL);
88*f3e7f55eSRobert Mustacchi return (0);
89*f3e7f55eSRobert Mustacchi }
90*f3e7f55eSRobert Mustacchi
91*f3e7f55eSRobert Mustacchi arange = (Dwarf_P_Arange)
92*f3e7f55eSRobert Mustacchi _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Arange_s));
93*f3e7f55eSRobert Mustacchi if (arange == NULL) {
94*f3e7f55eSRobert Mustacchi _dwarf_p_error(dbg, error, DW_DLE_ALLOC_FAIL);
95*f3e7f55eSRobert Mustacchi return (0);
96*f3e7f55eSRobert Mustacchi }
97*f3e7f55eSRobert Mustacchi
98*f3e7f55eSRobert Mustacchi arange->ag_begin_address = begin_address;
99*f3e7f55eSRobert Mustacchi arange->ag_length = length;
100*f3e7f55eSRobert Mustacchi arange->ag_symbol_index = symbol_index;
101*f3e7f55eSRobert Mustacchi arange->ag_end_symbol_index = end_symbol_index;
102*f3e7f55eSRobert Mustacchi arange->ag_end_symbol_offset = offset_from_end_sym;
103*f3e7f55eSRobert Mustacchi
104*f3e7f55eSRobert Mustacchi if (dbg->de_arange == NULL)
105*f3e7f55eSRobert Mustacchi dbg->de_arange = dbg->de_last_arange = arange;
106*f3e7f55eSRobert Mustacchi else {
107*f3e7f55eSRobert Mustacchi dbg->de_last_arange->ag_next = arange;
108*f3e7f55eSRobert Mustacchi dbg->de_last_arange = arange;
109*f3e7f55eSRobert Mustacchi }
110*f3e7f55eSRobert Mustacchi dbg->de_arange_count++;
111*f3e7f55eSRobert Mustacchi
112*f3e7f55eSRobert Mustacchi return (1);
113*f3e7f55eSRobert Mustacchi }
114*f3e7f55eSRobert Mustacchi
115*f3e7f55eSRobert Mustacchi
116*f3e7f55eSRobert Mustacchi int
_dwarf_transform_arange_to_disk(Dwarf_P_Debug dbg,Dwarf_Error * error)117*f3e7f55eSRobert Mustacchi _dwarf_transform_arange_to_disk(Dwarf_P_Debug dbg, Dwarf_Error * error)
118*f3e7f55eSRobert Mustacchi {
119*f3e7f55eSRobert Mustacchi /* Total num of bytes in .debug_aranges section. */
120*f3e7f55eSRobert Mustacchi Dwarf_Unsigned arange_num_bytes;
121*f3e7f55eSRobert Mustacchi
122*f3e7f55eSRobert Mustacchi /*
123*f3e7f55eSRobert Mustacchi Adjustment to align the start of the actual address ranges on a
124*f3e7f55eSRobert Mustacchi boundary aligned with twice the address size. */
125*f3e7f55eSRobert Mustacchi Dwarf_Small remainder;
126*f3e7f55eSRobert Mustacchi
127*f3e7f55eSRobert Mustacchi /* Total number of bytes excluding the length field. */
128*f3e7f55eSRobert Mustacchi Dwarf_Unsigned adjusted_length;
129*f3e7f55eSRobert Mustacchi
130*f3e7f55eSRobert Mustacchi /* Points to first byte of .debug_aranges buffer. */
131*f3e7f55eSRobert Mustacchi Dwarf_Small *arange;
132*f3e7f55eSRobert Mustacchi
133*f3e7f55eSRobert Mustacchi /* Fills in the .debug_aranges buffer. */
134*f3e7f55eSRobert Mustacchi Dwarf_Small *arange_ptr;
135*f3e7f55eSRobert Mustacchi
136*f3e7f55eSRobert Mustacchi /* Scans the list of address ranges provided by user. */
137*f3e7f55eSRobert Mustacchi Dwarf_P_Arange given_arange;
138*f3e7f55eSRobert Mustacchi
139*f3e7f55eSRobert Mustacchi /* Used to fill in 0. */
140*f3e7f55eSRobert Mustacchi const Dwarf_Signed big_zero = 0;
141*f3e7f55eSRobert Mustacchi
142*f3e7f55eSRobert Mustacchi int extension_word_size = dbg->de_64bit_extension ? 4 : 0;
143*f3e7f55eSRobert Mustacchi int uword_size = dbg->de_offset_size;
144*f3e7f55eSRobert Mustacchi int upointer_size = dbg->de_pointer_size;
145*f3e7f55eSRobert Mustacchi int res;
146*f3e7f55eSRobert Mustacchi
147*f3e7f55eSRobert Mustacchi
148*f3e7f55eSRobert Mustacchi /* ***** BEGIN CODE ***** */
149*f3e7f55eSRobert Mustacchi
150*f3e7f55eSRobert Mustacchi /* Size of the .debug_aranges section header. */
151*f3e7f55eSRobert Mustacchi arange_num_bytes = extension_word_size + uword_size + /* Size
152*f3e7f55eSRobert Mustacchi of
153*f3e7f55eSRobert Mustacchi length
154*f3e7f55eSRobert Mustacchi field.
155*f3e7f55eSRobert Mustacchi */
156*f3e7f55eSRobert Mustacchi sizeof(Dwarf_Half) + /* Size of version field. */
157*f3e7f55eSRobert Mustacchi uword_size + /* Size of .debug_info offset. */
158*f3e7f55eSRobert Mustacchi sizeof(Dwarf_Small) + /* Size of address size field. */
159*f3e7f55eSRobert Mustacchi sizeof(Dwarf_Small); /* Size of segment size field. */
160*f3e7f55eSRobert Mustacchi
161*f3e7f55eSRobert Mustacchi /*
162*f3e7f55eSRobert Mustacchi Adjust the size so that the set of aranges begins on a boundary
163*f3e7f55eSRobert Mustacchi that aligned with twice the address size. This is a Libdwarf
164*f3e7f55eSRobert Mustacchi requirement. */
165*f3e7f55eSRobert Mustacchi remainder = arange_num_bytes % (2 * upointer_size);
166*f3e7f55eSRobert Mustacchi if (remainder != 0)
167*f3e7f55eSRobert Mustacchi arange_num_bytes += (2 * upointer_size) - remainder;
168*f3e7f55eSRobert Mustacchi
169*f3e7f55eSRobert Mustacchi
170*f3e7f55eSRobert Mustacchi /* Add the bytes for the actual address ranges. */
171*f3e7f55eSRobert Mustacchi arange_num_bytes += upointer_size * 2 * (dbg->de_arange_count + 1);
172*f3e7f55eSRobert Mustacchi
173*f3e7f55eSRobert Mustacchi GET_CHUNK(dbg, dbg->de_elf_sects[DEBUG_ARANGES],
174*f3e7f55eSRobert Mustacchi arange, (unsigned long) arange_num_bytes, error);
175*f3e7f55eSRobert Mustacchi arange_ptr = arange;
176*f3e7f55eSRobert Mustacchi if (arange == NULL) {
177*f3e7f55eSRobert Mustacchi _dwarf_p_error(dbg, error, DW_DLE_ALLOC_FAIL);
178*f3e7f55eSRobert Mustacchi return (0);
179*f3e7f55eSRobert Mustacchi }
180*f3e7f55eSRobert Mustacchi if (extension_word_size) {
181*f3e7f55eSRobert Mustacchi Dwarf_Word x = DISTINGUISHED_VALUE;
182*f3e7f55eSRobert Mustacchi
183*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
184*f3e7f55eSRobert Mustacchi (const void *) &x,
185*f3e7f55eSRobert Mustacchi sizeof(x), extension_word_size);
186*f3e7f55eSRobert Mustacchi arange_ptr += extension_word_size;
187*f3e7f55eSRobert Mustacchi }
188*f3e7f55eSRobert Mustacchi
189*f3e7f55eSRobert Mustacchi /* Write the total length of .debug_aranges section. */
190*f3e7f55eSRobert Mustacchi adjusted_length = arange_num_bytes - uword_size
191*f3e7f55eSRobert Mustacchi - extension_word_size;
192*f3e7f55eSRobert Mustacchi {
193*f3e7f55eSRobert Mustacchi Dwarf_Unsigned du = adjusted_length;
194*f3e7f55eSRobert Mustacchi
195*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
196*f3e7f55eSRobert Mustacchi (const void *) &du, sizeof(du), uword_size);
197*f3e7f55eSRobert Mustacchi arange_ptr += uword_size;
198*f3e7f55eSRobert Mustacchi }
199*f3e7f55eSRobert Mustacchi
200*f3e7f55eSRobert Mustacchi /* Write the version as 2 bytes. */
201*f3e7f55eSRobert Mustacchi {
202*f3e7f55eSRobert Mustacchi Dwarf_Half verstamp = CURRENT_VERSION_STAMP;
203*f3e7f55eSRobert Mustacchi
204*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
205*f3e7f55eSRobert Mustacchi (const void *) &verstamp,
206*f3e7f55eSRobert Mustacchi sizeof(verstamp), sizeof(Dwarf_Half));
207*f3e7f55eSRobert Mustacchi arange_ptr += sizeof(Dwarf_Half);
208*f3e7f55eSRobert Mustacchi }
209*f3e7f55eSRobert Mustacchi
210*f3e7f55eSRobert Mustacchi
211*f3e7f55eSRobert Mustacchi /* Write the .debug_info offset. This is always 0. */
212*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
213*f3e7f55eSRobert Mustacchi (const void *) &big_zero,
214*f3e7f55eSRobert Mustacchi sizeof(big_zero), uword_size);
215*f3e7f55eSRobert Mustacchi arange_ptr += uword_size;
216*f3e7f55eSRobert Mustacchi
217*f3e7f55eSRobert Mustacchi {
218*f3e7f55eSRobert Mustacchi unsigned long count = dbg->de_arange_count + 1;
219*f3e7f55eSRobert Mustacchi int res;
220*f3e7f55eSRobert Mustacchi
221*f3e7f55eSRobert Mustacchi if (dbg->de_reloc_pair) {
222*f3e7f55eSRobert Mustacchi count = (3 * dbg->de_arange_count) + 1;
223*f3e7f55eSRobert Mustacchi }
224*f3e7f55eSRobert Mustacchi /* the following is a small optimization: not needed for
225*f3e7f55eSRobert Mustacchi correctness */
226*f3e7f55eSRobert Mustacchi res = _dwarf_pro_pre_alloc_n_reloc_slots(dbg,
227*f3e7f55eSRobert Mustacchi DEBUG_ARANGES, count);
228*f3e7f55eSRobert Mustacchi if (res != DW_DLV_OK) {
229*f3e7f55eSRobert Mustacchi {
230*f3e7f55eSRobert Mustacchi _dwarf_p_error(dbg, error, DW_DLE_ALLOC_FAIL);
231*f3e7f55eSRobert Mustacchi return (0);
232*f3e7f55eSRobert Mustacchi }
233*f3e7f55eSRobert Mustacchi }
234*f3e7f55eSRobert Mustacchi }
235*f3e7f55eSRobert Mustacchi
236*f3e7f55eSRobert Mustacchi /* reloc for .debug_info */
237*f3e7f55eSRobert Mustacchi res = dbg->de_reloc_name(dbg,
238*f3e7f55eSRobert Mustacchi DEBUG_ARANGES,
239*f3e7f55eSRobert Mustacchi extension_word_size +
240*f3e7f55eSRobert Mustacchi uword_size + sizeof(Dwarf_Half),
241*f3e7f55eSRobert Mustacchi dbg->de_sect_name_idx[DEBUG_INFO],
242*f3e7f55eSRobert Mustacchi dwarf_drt_data_reloc, uword_size);
243*f3e7f55eSRobert Mustacchi
244*f3e7f55eSRobert Mustacchi /* Write the size of addresses. */
245*f3e7f55eSRobert Mustacchi *arange_ptr = dbg->de_pointer_size;
246*f3e7f55eSRobert Mustacchi arange_ptr++;
247*f3e7f55eSRobert Mustacchi
248*f3e7f55eSRobert Mustacchi /*
249*f3e7f55eSRobert Mustacchi Write the size of segment addresses. This is zero for MIPS
250*f3e7f55eSRobert Mustacchi architectures. */
251*f3e7f55eSRobert Mustacchi *arange_ptr = 0;
252*f3e7f55eSRobert Mustacchi arange_ptr++;
253*f3e7f55eSRobert Mustacchi
254*f3e7f55eSRobert Mustacchi /*
255*f3e7f55eSRobert Mustacchi Skip over the padding to align the start of the actual address
256*f3e7f55eSRobert Mustacchi ranges to twice the address size. */
257*f3e7f55eSRobert Mustacchi if (remainder != 0)
258*f3e7f55eSRobert Mustacchi arange_ptr += (2 * upointer_size) - remainder;
259*f3e7f55eSRobert Mustacchi
260*f3e7f55eSRobert Mustacchi
261*f3e7f55eSRobert Mustacchi
262*f3e7f55eSRobert Mustacchi
263*f3e7f55eSRobert Mustacchi
264*f3e7f55eSRobert Mustacchi /* The arange address, length are pointer-size fields of the target
265*f3e7f55eSRobert Mustacchi machine. */
266*f3e7f55eSRobert Mustacchi for (given_arange = dbg->de_arange; given_arange != NULL;
267*f3e7f55eSRobert Mustacchi given_arange = given_arange->ag_next) {
268*f3e7f55eSRobert Mustacchi
269*f3e7f55eSRobert Mustacchi /* Write relocation record for beginning of address range. */
270*f3e7f55eSRobert Mustacchi res = dbg->de_reloc_name(dbg, DEBUG_ARANGES, arange_ptr - arange, /* r_offset
271*f3e7f55eSRobert Mustacchi */
272*f3e7f55eSRobert Mustacchi (long) given_arange->ag_symbol_index,
273*f3e7f55eSRobert Mustacchi dwarf_drt_data_reloc, upointer_size);
274*f3e7f55eSRobert Mustacchi if (res != DW_DLV_OK) {
275*f3e7f55eSRobert Mustacchi {
276*f3e7f55eSRobert Mustacchi _dwarf_p_error(dbg, error, DW_DLE_ALLOC_FAIL);
277*f3e7f55eSRobert Mustacchi return (0);
278*f3e7f55eSRobert Mustacchi }
279*f3e7f55eSRobert Mustacchi }
280*f3e7f55eSRobert Mustacchi
281*f3e7f55eSRobert Mustacchi /* Copy beginning address of range. */
282*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
283*f3e7f55eSRobert Mustacchi (const void *) &given_arange->ag_begin_address,
284*f3e7f55eSRobert Mustacchi sizeof(given_arange->ag_begin_address),
285*f3e7f55eSRobert Mustacchi upointer_size);
286*f3e7f55eSRobert Mustacchi arange_ptr += upointer_size;
287*f3e7f55eSRobert Mustacchi
288*f3e7f55eSRobert Mustacchi if (dbg->de_reloc_pair &&
289*f3e7f55eSRobert Mustacchi given_arange->ag_end_symbol_index != 0 &&
290*f3e7f55eSRobert Mustacchi given_arange->ag_length == 0) {
291*f3e7f55eSRobert Mustacchi /* symbolic reloc, need reloc for length What if we really
292*f3e7f55eSRobert Mustacchi know the length? If so, should use the other part of
293*f3e7f55eSRobert Mustacchi 'if'. */
294*f3e7f55eSRobert Mustacchi Dwarf_Unsigned val;
295*f3e7f55eSRobert Mustacchi
296*f3e7f55eSRobert Mustacchi res = dbg->de_reloc_pair(dbg, DEBUG_ARANGES, arange_ptr - arange, /* r_offset
297*f3e7f55eSRobert Mustacchi */
298*f3e7f55eSRobert Mustacchi given_arange->ag_symbol_index,
299*f3e7f55eSRobert Mustacchi given_arange->ag_end_symbol_index,
300*f3e7f55eSRobert Mustacchi dwarf_drt_first_of_length_pair,
301*f3e7f55eSRobert Mustacchi upointer_size);
302*f3e7f55eSRobert Mustacchi if (res != DW_DLV_OK) {
303*f3e7f55eSRobert Mustacchi {
304*f3e7f55eSRobert Mustacchi _dwarf_p_error(dbg, error, DW_DLE_ALLOC_FAIL);
305*f3e7f55eSRobert Mustacchi return (0);
306*f3e7f55eSRobert Mustacchi }
307*f3e7f55eSRobert Mustacchi }
308*f3e7f55eSRobert Mustacchi
309*f3e7f55eSRobert Mustacchi /* arrange pre-calc so assem text can do .word end - begin
310*f3e7f55eSRobert Mustacchi + val (gets val from stream) */
311*f3e7f55eSRobert Mustacchi val = given_arange->ag_end_symbol_offset -
312*f3e7f55eSRobert Mustacchi given_arange->ag_begin_address;
313*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
314*f3e7f55eSRobert Mustacchi (const void *) &val,
315*f3e7f55eSRobert Mustacchi sizeof(val), upointer_size);
316*f3e7f55eSRobert Mustacchi arange_ptr += upointer_size;
317*f3e7f55eSRobert Mustacchi
318*f3e7f55eSRobert Mustacchi } else {
319*f3e7f55eSRobert Mustacchi /* plain old length to copy, no relocation at all */
320*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
321*f3e7f55eSRobert Mustacchi (const void *) &given_arange->ag_length,
322*f3e7f55eSRobert Mustacchi sizeof(given_arange->ag_length),
323*f3e7f55eSRobert Mustacchi upointer_size);
324*f3e7f55eSRobert Mustacchi arange_ptr += upointer_size;
325*f3e7f55eSRobert Mustacchi }
326*f3e7f55eSRobert Mustacchi }
327*f3e7f55eSRobert Mustacchi
328*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
329*f3e7f55eSRobert Mustacchi (const void *) &big_zero,
330*f3e7f55eSRobert Mustacchi sizeof(big_zero), upointer_size);
331*f3e7f55eSRobert Mustacchi
332*f3e7f55eSRobert Mustacchi arange_ptr += upointer_size;
333*f3e7f55eSRobert Mustacchi WRITE_UNALIGNED(dbg, (void *) arange_ptr,
334*f3e7f55eSRobert Mustacchi (const void *) &big_zero,
335*f3e7f55eSRobert Mustacchi sizeof(big_zero), upointer_size);
336*f3e7f55eSRobert Mustacchi return (int) dbg->de_n_debug_sect;
337*f3e7f55eSRobert Mustacchi }
338