Subversion Repositories tendra.SVN

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 7
Line -... Line 1...
-
 
1
/*
-
 
2
 * Copyright (c) 2002-2005 The TenDRA Project <http://www.tendra.org/>.
-
 
3
 * All rights reserved.
-
 
4
 *
-
 
5
 * Redistribution and use in source and binary forms, with or without
-
 
6
 * modification, are permitted provided that the following conditions are met:
-
 
7
 *
-
 
8
 * 1. Redistributions of source code must retain the above copyright notice,
-
 
9
 *    this list of conditions and the following disclaimer.
-
 
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
-
 
11
 *    this list of conditions and the following disclaimer in the documentation
-
 
12
 *    and/or other materials provided with the distribution.
-
 
13
 * 3. Neither the name of The TenDRA Project nor the names of its contributors
-
 
14
 *    may be used to endorse or promote products derived from this software
-
 
15
 *    without specific, prior written permission.
-
 
16
 *
-
 
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-
 
18
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-
 
19
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-
 
20
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-
 
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-
 
22
 * EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-
 
23
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-
 
24
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-
 
25
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-
 
26
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-
 
27
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 
28
 *
-
 
29
 * $Id$
-
 
30
 */
1
/*
31
/*
2
    		 Crown Copyright (c) 1997
32
    		 Crown Copyright (c) 1997
3
 
33
 
4
    This TenDRA(r) Computer Program is subject to Copyright
34
    This TenDRA(r) Computer Program is subject to Copyright
5
    owned by the United Kingdom Secretary of State for Defence
35
    owned by the United Kingdom Secretary of State for Defence
Line 163... Line 193...
163
 
193
 
164
 
194
 
165
static exp delayed_const_list = nilexp;
195
static exp delayed_const_list = nilexp;
166
 
196
 
167
static int const_ready
197
static int const_ready
168
    PROTO_N ( (e) )
-
 
169
    PROTO_T ( exp e )
198
(exp e)
170
{
199
{
171
  unsigned char  n = name (e);
200
  unsigned char  n = name(e);
172
  if (n == env_size_tag)
201
  if (n == env_size_tag)
173
    return (brog(son(son(e))) -> dec_u.dec_val.processed);
202
    return(brog(son(son(e))) -> dec_u.dec_val.processed);
174
  if (n == env_offset_tag)
203
  if (n == env_offset_tag)
175
    return (name(son(e)) == 0);
204
    return(name(son(e)) == 0);
176
  if (n == name_tag || son(e) == nilexp)
205
  if (n == name_tag || son(e) == nilexp)
177
    return 1;
206
    return 1;
178
  e = son(e);
207
  e = son(e);
179
  while (!last(e)) {
208
  while (!last(e)) {
180
    if (!const_ready(e))
209
    if (!const_ready(e))
181
      return 0;
210
      return 0;
182
    e = bro(e);
211
    e = bro(e);
183
  }
212
  }
184
  return (const_ready(e));
213
  return(const_ready(e));
185
}
214
}
186
 
215
 
187
static void eval_if_ready
216
static void eval_if_ready
188
    PROTO_N ( (t,now) )
-
 
189
    PROTO_T ( exp t X int now )
217
(exp t, int now)
190
{
218
{
191
  if (now || const_ready(son(t))) {
219
  if (now || const_ready(son(t))) {
192
    if (isglob(t)) {
220
    if (isglob(t)) {
193
	dec * d = ptg(t);
221
	dec * d = ptg(t);
194
	if (!writable_strings &&
222
	if (!writable_strings &&
195
	    (!isvar (t) || (d -> dec_u.dec_val.acc & f_constant)) &&
223
	   (!isvar(t) || (d -> dec_u.dec_val.acc & f_constant)) &&
196
	    !PIC_code) {
224
	    !PIC_code) {
197
          out_readonly_section();
225
          out_readonly_section();
198
	  outnl ();
226
	  outnl();
199
#ifdef NEWDWARF
227
#ifdef NEWDWARF
200
	  if (dwarf2)
228
	  if (dwarf2)
201
	    note_ro (d -> dec_u.dec_val.dec_id);
229
	    note_ro(d -> dec_u.dec_val.dec_id);
202
#endif
230
#endif
203
	}
231
	}
204
	else {
232
	else {
205
	  if (do_prom)
233
	  if (do_prom)
206
	    failer ("prom data");
234
	    failer("prom data");
207
	  outs (".data");
235
	  outs(".data");
208
	  outnl ();
236
	  outnl();
209
#ifdef NEWDWARF
237
#ifdef NEWDWARF
210
	  if (dwarf2)
238
	  if (dwarf2)
211
	    note_data (d -> dec_u.dec_val.dec_id);
239
	    note_data(d -> dec_u.dec_val.dec_id);
212
#endif
240
#endif
213
	};
241
	};
214
	evaluate (son(t),
242
	evaluate(son(t),
215
                  (-1),
243
                 (-1),
216
                  d -> dec_u.dec_val.dec_id,
244
                  d -> dec_u.dec_val.dec_id,
217
		  (!isvar (t)),
245
		 (!isvar(t)),
218
                  (int)(d -> dec_u.dec_val.extnamed),
246
                 (int)(d -> dec_u.dec_val.extnamed),
219
                  d -> dec_u.dec_val.diag_info);
247
                  d -> dec_u.dec_val.diag_info);
220
    }
248
    }
221
    else {
249
    else {
222
	if (!writable_strings && name (son (t)) != res_tag) {
250
	if (!writable_strings && name(son(t))!= res_tag) {
223
             out_readonly_section();
251
             out_readonly_section();
224
	     outnl ();
252
	     outnl();
225
	   }
253
	   }
226
	else {
254
	else {
227
	     if (do_prom)
255
	     if (do_prom)
228
	       failer ("prom data");
256
	       failer("prom data");
229
	     outs (".data");
257
	     outs(".data");
230
	     outnl ();
258
	     outnl();
231
	   };
259
	   };
232
	evaluate (son (t), no (t), (char *) 0,
260
	evaluate(son(t), no(t), (char *)0,
233
	        (name (son (t)) != res_tag), 0, (diag_global*)0);
261
	       (name(son(t))!= res_tag), 0,(diag_global*)0);
234
    }
262
    }
235
    retcell (t);
263
    retcell(t);
236
  }
264
  }
237
  else {
265
  else {
238
    bro(t) = delayed_const_list;
266
    bro(t) = delayed_const_list;
239
    delayed_const_list = t;
267
    delayed_const_list = t;
240
  }
268
  }
Line 243... Line 271...
243
 
271
 
244
 
272
 
245
/* PROCEDURES */
273
/* PROCEDURES */
246
 
274
 
247
void make_code
275
void make_code
248
    PROTO_N ( (my_def) )
-
 
249
    PROTO_T ( dec * my_def )
276
(dec * my_def)
250
{
277
{
251
  exp tg = my_def -> dec_u.dec_val.dec_exp;
278
  exp tg = my_def -> dec_u.dec_val.dec_exp;
252
  char *id = my_def -> dec_u.dec_val.dec_id;
279
  char *id = my_def -> dec_u.dec_val.dec_id;
253
 
280
 
254
  if (son(tg) != nilexp && shape_size(sh(son(tg))) == 0 && name(son(tg)) == asm_tag) {
281
  if (son(tg)!= nilexp && shape_size(sh(son(tg))) == 0 && name(son(tg)) == asm_tag) {
255
    ash stack;
282
    ash stack;
256
    stack.ashsize = stack.ashalign = 0;
283
    stack.ashsize = stack.ashalign = 0;
257
    if (props(son(tg)) != 0)
284
    if (props(son(tg))!= 0)
258
      failer ("~asm not in ~asm_sequence");
285
      failer("~asm not in ~asm_sequence");
259
    check_asm_seq (son(son(tg)), 1);
286
    check_asm_seq(son(son(tg)), 1);
260
    outs (".text");
287
    outs(".text");
261
    coder (zero, stack, son(tg));
288
    coder(zero, stack, son(tg));
262
    outnl ();
289
    outnl();
263
  }
290
  }
264
 
291
 
265
  if (son (tg) != nilexp && (my_def -> dec_u.dec_val.extnamed || no(tg) != 0)) {
292
  if (son(tg)!= nilexp && (my_def -> dec_u.dec_val.extnamed || no(tg)!= 0)) {
266
    if (name (son (tg)) == proc_tag || name (son (tg)) == general_proc_tag) {
293
    if (name(son(tg)) == proc_tag || name(son(tg)) == general_proc_tag) {
267
      if (strncmp("__I.TDF", id+prefix_length, 7)==0) {
294
      if (strncmp("__I.TDF", id+prefix_length, 7) ==0) {
268
	out_initialiser (id);
295
	out_initialiser(id);
269
	set_proc_uses_external (son (tg));	/* for PIC_code, should be done in install_fns? */
296
	set_proc_uses_external (son (tg));	/* for PIC_code, should be done in install_fns? */
270
      }
297
      }
271
      outs (".text");
298
      outs(".text");
272
      outnl ();
299
      outnl();
273
      if (isvar(tg)) {
300
      if (isvar(tg)) {
274
        char * newid = make_local_name();
301
        char * newid = make_local_name();
275
	if (my_def -> dec_u.dec_val.extnamed) {
302
	if (my_def -> dec_u.dec_val.extnamed) {
276
	  my_def -> dec_u.dec_val.extnamed = 0;
303
	  my_def -> dec_u.dec_val.extnamed = 0;
277
	  outs(".globl ");
304
	  outs(".globl ");
Line 287... Line 314...
287
	outnl();
314
	outnl();
288
	id = newid;
315
	id = newid;
289
	my_def -> dec_u.dec_val.extnamed = 0;
316
	my_def -> dec_u.dec_val.extnamed = 0;
290
      }
317
      }
291
      my_def -> dec_u.dec_val.index =	/* for use in constant evaluation */
318
      my_def -> dec_u.dec_val.index =	/* for use in constant evaluation */
292
	cproc (son (tg), id, (-1), (int)(my_def -> dec_u.dec_val.extnamed),
319
	cproc(son(tg), id,(-1), (int)(my_def -> dec_u.dec_val.extnamed),
293
                my_def -> dec_u.dec_val.diag_info);
320
                my_def -> dec_u.dec_val.diag_info);
294
      while (const_list != nilexp) {
321
      while (const_list != nilexp) {
295
	/* put in the constants required by the procedure */
322
	/* put in the constants required by the procedure */
296
	exp t = const_list;
323
	exp t = const_list;
297
	const_list = bro (const_list);
324
	const_list = bro(const_list);
298
	eval_if_ready(t,0);
325
	eval_if_ready(t,0);
299
      };
326
      };
300
    }
327
    }
301
    else {			/* global values */
328
    else {			/* global values */
302
     diag_global * diag_props = my_def -> dec_u.dec_val.diag_info;
329
     diag_global * diag_props = my_def -> dec_u.dec_val.diag_info;
Line 352... Line 379...
352
          is_comm(son(tg)))
379
          is_comm(son(tg)))
353
       {
380
       {
354
	 int is_ext = (my_def -> dec_u.dec_val.extnamed);
381
	 int is_ext = (my_def -> dec_u.dec_val.extnamed);
355
         if (diag_props)
382
         if (diag_props)
356
#ifdef NEWDWARF
383
#ifdef NEWDWARF
357
           DIAG_VAL_BEGIN (diag_props, is_ext, -1, id);
384
           DIAG_VAL_BEGIN(diag_props, is_ext, -1, id);
358
#else
385
#else
359
           diag_val_begin(diag_props, is_ext, -1, id);
386
           diag_val_begin(diag_props, is_ext, -1, id);
360
#endif
387
#endif
361
	 if (name(son(tg)) == clear_tag && no(son(tg)) == -1) {
388
	 if (name(son(tg)) == clear_tag && no(son(tg)) == -1) {
362
				/* prom global data */
389
				/* prom global data */
Line 366... Line 393...
366
	     outnl();
393
	     outnl();
367
	   }
394
	   }
368
           out_bss(id, sh(son(tg)));
395
           out_bss(id, sh(son(tg)));
369
#ifdef NEWDWARF
396
#ifdef NEWDWARF
370
	   if (dwarf2)
397
	   if (dwarf2)
371
	     note_data (id);
398
	     note_data(id);
372
#endif
399
#endif
373
	 }
400
	 }
374
	 else
401
	 else
375
	 if (is_ext)
402
	 if (is_ext)
376
           out_dot_comm(id, sh(son(tg)));
403
           out_dot_comm(id, sh(son(tg)));
377
	 else
404
	 else
378
           out_dot_lcomm(id, sh(son(tg)));
405
           out_dot_lcomm(id, sh(son(tg)));
379
         if (diag_props) {
406
         if (diag_props) {
380
#ifdef NEWDWARF
407
#ifdef NEWDWARF
381
           DIAG_VAL_END (diag_props);
408
           DIAG_VAL_END(diag_props);
382
#else
409
#else
383
           diag_val_end(diag_props);
410
           diag_val_end(diag_props);
384
#endif
411
#endif
385
	 }
412
	 }
386
       }
413
       }
387
 
414
 
388
      else {			/* global values */
415
      else {			/* global values */
389
 
416
 
390
	exp t = getexp (f_bottom, nilexp, 0, son(tg), nilexp, props(tg), -1, 0);
417
	exp t = getexp(f_bottom, nilexp, 0, son(tg), nilexp, props(tg), -1, 0);
391
	ptg(t) = my_def;
418
	ptg(t) = my_def;
392
	eval_if_ready (t, 0);
419
	eval_if_ready(t, 0);
393
 
420
 
394
      };
421
      };
395
     };
422
     };
396
    };
423
    };
397
  };
424
  };
398
 
425
 
399
  if (son(tg) != nilexp)  {
426
  if (son(tg)!= nilexp) {
400
     my_def -> dec_u.dec_val.processed = 1;
427
     my_def -> dec_u.dec_val.processed = 1;
401
  };
428
  };
402
  return;
429
  return;
403
}
430
}
404
 
431
 
405
void mark_unaliased
432
void mark_unaliased
406
    PROTO_N ( (e) )
-
 
407
    PROTO_T ( exp e )
433
(exp e)
408
{
434
{
409
  exp p = pt (e);
435
  exp p = pt(e);
410
  int ca = 1;
436
  int ca = 1;
411
  while (p != nilexp && ca) {
437
  while (p != nilexp && ca) {
412
#ifdef NEWDIAGS
438
#ifdef NEWDIAGS
413
    if ((bro(p) == nilexp ||
439
    if ((bro(p) == nilexp ||
414
#else
440
#else
415
    if (bro(p) == nilexp ||
441
    if (bro(p) == nilexp ||
416
#endif
442
#endif
417
        (!(last (p) && name (bro (p)) == cont_tag) &&
443
       (!(last(p) && name(bro(p)) == cont_tag) &&
418
	 !(!last (p) && last (bro (p)) &&
444
	 !(!last(p) && last(bro(p)) &&
419
                 name (bro (bro (p))) == ass_tag)))
445
                 name(bro(bro(p))) == ass_tag)))
420
#ifdef NEWDIAGS
446
#ifdef NEWDIAGS
421
	&& !isdiaginfo(p))
447
	&& !isdiaginfo(p))
422
#endif
448
#endif
423
      ca = 0;
449
      ca = 0;
424
    p = pt (p);
450
    p = pt(p);
425
  };
451
  };
426
  if (ca)
452
  if (ca)
427
    setcaonly (e);
453
    setcaonly(e);
428
  return;
454
  return;
429
}
455
}
430
 
456
 
431
 
457
 
432
void translate_capsule
458
void translate_capsule
433
    PROTO_Z ()
459
(void)
434
{
460
{
435
  dec * my_def;
461
  dec * my_def;
436
 
462
 
437
#ifdef STABS
463
#ifdef STABS
438
#ifdef NEWDWARF
464
#ifdef NEWDWARF
439
  if (diagnose && !dwarf2)
465
  if (diagnose && !dwarf2)
440
#else
466
#else
441
  if (diagnose)
467
  if (diagnose)
442
#endif
468
#endif
443
    init_stab_aux ();
469
    init_stab_aux();
444
#endif
470
#endif
445
 
471
 
446
 
472
 
447
  my_def = top_def;
473
  my_def = top_def;
448
  while (my_def != (dec *) 0) {
474
  while (my_def != (dec *)0) {
449
    exp crt_exp = my_def -> dec_u.dec_val.dec_exp;
475
    exp crt_exp = my_def -> dec_u.dec_val.dec_exp;
450
    if (PIC_code) {
476
    if (PIC_code) {
451
      exp idval = son(crt_exp);
477
      exp idval = son(crt_exp);
452
      if (!(my_def -> dec_u.dec_val.dec_var) &&
478
      if (!(my_def -> dec_u.dec_val.dec_var) &&
453
	   ( idval == nilexp || ( name(idval) != val_tag && name(idval) != real_tag &&
479
	  (idval == nilexp || (name(idval)!= val_tag && name(idval)!= real_tag &&
454
		name(idval) != null_tag )	/* optimised out in opt_all_exps/checkext */
480
		name(idval) != null_tag )	/* optimised out in opt_all_exps/checkext */
455
	   ) &&
481
	  ) &&
456
	   (name(sh(crt_exp)) != prokhd ||
482
	  (name(sh(crt_exp))!= prokhd ||
457
		( idval != nilexp && name(idval) != null_tag &&
483
		(idval != nilexp && name(idval)!= null_tag &&
458
		  name(idval) != proc_tag && name(idval) != general_proc_tag )
484
		  name(idval)!= proc_tag && name(idval)!= general_proc_tag)
459
	   ) )
485
	  ))
460
      {
486
      {
461
		/* make variable, and change all uses to contents */
487
		/* make variable, and change all uses to contents */
462
	exp p = pt(crt_exp);
488
	exp p = pt(crt_exp);
463
	if (my_def -> dec_u.dec_val.extnamed)
489
	if (my_def -> dec_u.dec_val.extnamed)
464
	  sh(crt_exp) = f_pointer(f_alignment(sh(crt_exp)));
490
	  sh(crt_exp) = f_pointer(f_alignment(sh(crt_exp)));
465
	else
491
	else
466
	  setvar(crt_exp);
492
	  setvar(crt_exp);
467
	while (p != nilexp) {
493
	while (p != nilexp) {
468
	  exp np = pt(p);
494
	  exp np = pt(p);
469
	  exp* ptr = refto (father(p), p);
495
	  exp* ptr = refto(father(p), p);
470
	  exp c = getexp (sh(p), bro(p), last(p), p, nilexp, 0, 0, cont_tag);
496
	  exp c = getexp(sh(p), bro(p), last(p), p, nilexp, 0, 0, cont_tag);
471
	  setfather (c, p);
497
	  setfather(c, p);
472
	  if (no(p) != 0) {
498
	  if (no(p)!= 0) {
473
	    exp r = getexp (sh(p), c, 1, p, nilexp, 0, no(p), reff_tag);
499
	    exp r = getexp(sh(p), c, 1, p, nilexp, 0, no(p), reff_tag);
474
	    no(p) = 0;
500
	    no(p) = 0;
475
	    son(c) = r;
501
	    son(c) = r;
476
	    setfather (r, p);
502
	    setfather(r, p);
477
	  }
503
	  }
478
	  *ptr = c;
504
	  *ptr = c;
479
	  p = np;
505
	  p = np;
480
	}
506
	}
481
      }
507
      }
482
    }
508
    }
483
    else {	/* !PIC_code; make indirect global idents direct */
509
    else {	/* !PIC_code; make indirect global idents direct */
484
      exp tg = crt_exp;
510
      exp tg = crt_exp;
485
      while (!isvar(tg) && son(tg) != nilexp && name(son(tg)) == name_tag && no(son(tg)) == 0)
511
      while (!isvar(tg) && son(tg)!= nilexp && name(son(tg)) == name_tag && no(son(tg)) == 0)
486
	tg = son(son(tg));
512
	tg = son(son(tg));
487
      if (tg != crt_exp) {
513
      if (tg != crt_exp) {
488
	exp p = pt(crt_exp);
514
	exp p = pt(crt_exp);
489
	while (p != nilexp) {
515
	while (p != nilexp) {
490
	  exp np = pt(p);
516
	  exp np = pt(p);
491
	  if (son(p) != crt_exp)
517
	  if (son(p)!= crt_exp)
492
	    failer ("not simple name");
518
	    failer("not simple name");
493
	  son(p) = tg;
519
	  son(p) = tg;
494
	  pt(p) = pt(tg);
520
	  pt(p) = pt(tg);
495
	  pt(tg) = p;
521
	  pt(tg) = p;
496
	  ++no(tg);
522
	  ++no(tg);
497
	  p = np;
523
	  p = np;
Line 501... Line 527...
501
      }
527
      }
502
    };
528
    };
503
    my_def = my_def -> def_next;
529
    my_def = my_def -> def_next;
504
  }
530
  }
505
 
531
 
506
  opt_all_exps ();
532
  opt_all_exps();
507
 
533
 
508
  transform_var_callees ();
534
  transform_var_callees();
509
 
535
 
510
      /* mark static unaliased */
536
      /* mark static unaliased */
511
    my_def = top_def;
537
    my_def = top_def;
512
    while (my_def != (dec *) 0) {
538
    while (my_def != (dec *)0) {
513
      exp crt_exp = my_def -> dec_u.dec_val.dec_exp;
539
      exp crt_exp = my_def -> dec_u.dec_val.dec_exp;
514
      if (son (crt_exp) != nilexp &&
540
      if (son(crt_exp)!= nilexp &&
515
	  !my_def -> dec_u.dec_val.extnamed &&
541
	  !my_def -> dec_u.dec_val.extnamed &&
516
   	  isvar (crt_exp))
542
   	  isvar(crt_exp))
517
        mark_unaliased (crt_exp);
543
        mark_unaliased(crt_exp);
518
      my_def = my_def -> def_next;
544
      my_def = my_def -> def_next;
519
    };
545
    };
520
 
546
 
521
  /* compile procedures, evaluate constants, put in the .comm entries for
547
  /* compile procedures, evaluate constants, put in the .comm entries for
522
     undefined objects */
548
     undefined objects */
523
 
549
 
524
#ifdef NEWDWARF
550
#ifdef NEWDWARF
525
  if (dwarf2) {
551
  if (dwarf2) {
526
    outs (".text\n");
552
    outs(".text\n");
527
    dwarf2_prelude ();
553
    dwarf2_prelude();
528
  }
554
  }
529
#endif
555
#endif
530
 
556
 
531
  my_def = top_def;
557
  my_def = top_def;
532
 
558
 
533
  while (my_def != (dec *) 0) {
559
  while (my_def != (dec *)0) {
534
    if (!my_def -> dec_u.dec_val.processed)
560
    if (!my_def -> dec_u.dec_val.processed)
535
       make_code (my_def);
561
       make_code(my_def);
536
    my_def = my_def -> def_next;
562
    my_def = my_def -> def_next;
537
  };
563
  };
538
 
564
 
539
  while (delayed_const_list != nilexp) {
565
  while (delayed_const_list != nilexp) {
540
    exp t = delayed_const_list;
566
    exp t = delayed_const_list;
541
    delayed_const_list = bro (delayed_const_list);
567
    delayed_const_list = bro(delayed_const_list);
542
    eval_if_ready(t,1);
568
    eval_if_ready(t,1);
543
  }
569
  }
544
 
570
 
545
  outs (".text\n");
571
  outs(".text\n");
546
#ifdef NEWDWARF
572
#ifdef NEWDWARF
547
  if (dwarf2) {
573
  if (dwarf2) {
548
    dwarf2_postlude ();
574
    dwarf2_postlude();
549
  }
575
  }
550
#endif
576
#endif
551
  return;
577
  return;
552
 
578
 
553
}
579
}
554
 
580
 
555
void translate_tagdef
581
void translate_tagdef
556
    PROTO_Z ()
582
(void)
557
{
583
{
558
  return;
584
  return;
559
}
585
}
560
 
586
 
561
void translate_unit
587
void translate_unit
562
    PROTO_Z ()
588
(void)
563
{
589
{
564
  return;
590
  return;
565
}
591
}
566
 
592