OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [bfd/] [bfd.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Generic BFD library interface and support routines.
2
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3
   2000, 2001, 2002
4
   Free Software Foundation, Inc.
5
   Written by Cygnus Support.
6
 
7
This file is part of BFD, the Binary File Descriptor library.
8
 
9
This program is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 2 of the License, or
12
(at your option) any later version.
13
 
14
This program is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
GNU General Public License for more details.
18
 
19
You should have received a copy of the GNU General Public License
20
along with this program; if not, write to the Free Software
21
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
 
23
/*
24
SECTION
25
        <<typedef bfd>>
26
 
27
        A BFD has type <<bfd>>; objects of this type are the
28
        cornerstone of any application using BFD. Using BFD
29
        consists of making references though the BFD and to data in the BFD.
30
 
31
        Here is the structure that defines the type <<bfd>>.  It
32
        contains the major data about the file and pointers
33
        to the rest of the data.
34
 
35
CODE_FRAGMENT
36
.
37
.struct _bfd
38
.{
39
.  {* The filename the application opened the BFD with.  *}
40
.  const char *filename;
41
.
42
.  {* A pointer to the target jump table.  *}
43
.  const struct bfd_target *xvec;
44
.
45
.  {* To avoid dragging too many header files into every file that
46
.     includes `<<bfd.h>>', IOSTREAM has been declared as a "char *",
47
.     and MTIME as a "long".  Their correct types, to which they
48
.     are cast when used, are "FILE *" and "time_t".    The iostream
49
.     is the result of an fopen on the filename.  However, if the
50
.     BFD_IN_MEMORY flag is set, then iostream is actually a pointer
51
.     to a bfd_in_memory struct.  *}
52
.  PTR iostream;
53
.
54
.  {* Is the file descriptor being cached?  That is, can it be closed as
55
.     needed, and re-opened when accessed later?  *}
56
.  boolean cacheable;
57
.
58
.  {* Marks whether there was a default target specified when the
59
.     BFD was opened. This is used to select which matching algorithm
60
.     to use to choose the back end.  *}
61
.  boolean target_defaulted;
62
.
63
.  {* The caching routines use these to maintain a
64
.     least-recently-used list of BFDs.  *}
65
.  struct _bfd *lru_prev, *lru_next;
66
.
67
.  {* When a file is closed by the caching routines, BFD retains
68
.     state information on the file here...  *}
69
.  ufile_ptr where;
70
.
71
.  {* ... and here: (``once'' means at least once).  *}
72
.  boolean opened_once;
73
.
74
.  {* Set if we have a locally maintained mtime value, rather than
75
.     getting it from the file each time.  *}
76
.  boolean mtime_set;
77
.
78
.  {* File modified time, if mtime_set is true.  *}
79
.  long mtime;
80
.
81
.  {* Reserved for an unimplemented file locking extension.  *}
82
.  int ifd;
83
.
84
.  {* The format which belongs to the BFD. (object, core, etc.)  *}
85
.  bfd_format format;
86
.
87
.  {* The direction with which the BFD was opened.  *}
88
.  enum bfd_direction
89
.    {
90
.      no_direction = 0,
91
.      read_direction = 1,
92
.      write_direction = 2,
93
.      both_direction = 3
94
.    }
95
.  direction;
96
.
97
.  {* Format_specific flags.  *}
98
.  flagword flags;
99
.
100
.  {* Currently my_archive is tested before adding origin to
101
.     anything. I believe that this can become always an add of
102
.     origin, with origin set to 0 for non archive files.  *}
103
.  ufile_ptr origin;
104
.
105
.  {* Remember when output has begun, to stop strange things
106
.     from happening.  *}
107
.  boolean output_has_begun;
108
.
109
.  {* A hash table for section names.  *}
110
.  struct bfd_hash_table section_htab;
111
.
112
.  {* Pointer to linked list of sections.  *}
113
.  struct sec *sections;
114
.
115
.  {* The place where we add to the section list.  *}
116
.  struct sec **section_tail;
117
.
118
.  {* The number of sections.  *}
119
.  unsigned int section_count;
120
.
121
.  {* Stuff only useful for object files:
122
.     The start address.  *}
123
.  bfd_vma start_address;
124
.
125
.  {* Used for input and output.  *}
126
.  unsigned int symcount;
127
.
128
.  {* Symbol table for output BFD (with symcount entries).  *}
129
.  struct symbol_cache_entry  **outsymbols;
130
.
131
.  {* Pointer to structure which contains architecture information.  *}
132
.  const struct bfd_arch_info *arch_info;
133
.
134
.  {* Stuff only useful for archives.  *}
135
.  PTR arelt_data;
136
.  struct _bfd *my_archive;     {* The containing archive BFD.  *}
137
.  struct _bfd *next;           {* The next BFD in the archive.  *}
138
.  struct _bfd *archive_head;   {* The first BFD in the archive.  *}
139
.  boolean has_armap;
140
.
141
.  {* A chain of BFD structures involved in a link.  *}
142
.  struct _bfd *link_next;
143
.
144
.  {* A field used by _bfd_generic_link_add_archive_symbols.  This will
145
.     be used only for archive elements.  *}
146
.  int archive_pass;
147
.
148
.  {* Used by the back end to hold private data.  *}
149
.  union
150
.    {
151
.      struct aout_data_struct *aout_data;
152
.      struct artdata *aout_ar_data;
153
.      struct _oasys_data *oasys_obj_data;
154
.      struct _oasys_ar_data *oasys_ar_data;
155
.      struct coff_tdata *coff_obj_data;
156
.      struct pe_tdata *pe_obj_data;
157
.      struct xcoff_tdata *xcoff_obj_data;
158
.      struct ecoff_tdata *ecoff_obj_data;
159
.      struct ieee_data_struct *ieee_data;
160
.      struct ieee_ar_data_struct *ieee_ar_data;
161
.      struct srec_data_struct *srec_data;
162
.      struct ihex_data_struct *ihex_data;
163
.      struct tekhex_data_struct *tekhex_data;
164
.      struct elf_obj_tdata *elf_obj_data;
165
.      struct nlm_obj_tdata *nlm_obj_data;
166
.      struct bout_data_struct *bout_data;
167
.      struct mmo_data_struct *mmo_data;
168
.      struct sun_core_struct *sun_core_data;
169
.      struct sco5_core_struct *sco5_core_data;
170
.      struct trad_core_struct *trad_core_data;
171
.      struct som_data_struct *som_data;
172
.      struct hpux_core_struct *hpux_core_data;
173
.      struct hppabsd_core_struct *hppabsd_core_data;
174
.      struct sgi_core_struct *sgi_core_data;
175
.      struct lynx_core_struct *lynx_core_data;
176
.      struct osf_core_struct *osf_core_data;
177
.      struct cisco_core_struct *cisco_core_data;
178
.      struct versados_data_struct *versados_data;
179
.      struct netbsd_core_struct *netbsd_core_data;
180
.      PTR any;
181
.    }
182
.  tdata;
183
.
184
.  {* Used by the application to hold private data.  *}
185
.  PTR usrdata;
186
.
187
.  {* Where all the allocated stuff under this BFD goes.  This is a
188
.     struct objalloc *, but we use PTR to avoid requiring the inclusion of
189
.     objalloc.h.  *}
190
.  PTR memory;
191
.};
192
.
193
*/
194
 
195
#include "bfd.h"
196
#include "sysdep.h"
197
 
198
#ifdef ANSI_PROTOTYPES
199
#include <stdarg.h>
200
#else
201
#include <varargs.h>
202
#endif
203
 
204
#include "libiberty.h"
205
#include "safe-ctype.h"
206
#include "bfdlink.h"
207
#include "libbfd.h"
208
#include "coff/internal.h"
209
#include "coff/sym.h"
210
#include "libcoff.h"
211
#include "libecoff.h"
212
#undef obj_symbols
213
#include "elf-bfd.h"
214
 
215
/* provide storage for subsystem, stack and heap data which may have been
216
   passed in on the command line.  Ld puts this data into a bfd_link_info
217
   struct which ultimately gets passed in to the bfd.  When it arrives, copy
218
   it to the following struct so that the data will be available in coffcode.h
219
   where it is needed.  The typedef's used are defined in bfd.h */
220
 
221
/*
222
SECTION
223
        Error reporting
224
 
225
        Most BFD functions return nonzero on success (check their
226
        individual documentation for precise semantics).  On an error,
227
        they call <<bfd_set_error>> to set an error condition that callers
228
        can check by calling <<bfd_get_error>>.
229
        If that returns <<bfd_error_system_call>>, then check
230
        <<errno>>.
231
 
232
        The easiest way to report a BFD error to the user is to
233
        use <<bfd_perror>>.
234
 
235
SUBSECTION
236
        Type <<bfd_error_type>>
237
 
238
        The values returned by <<bfd_get_error>> are defined by the
239
        enumerated type <<bfd_error_type>>.
240
 
241
CODE_FRAGMENT
242
.
243
.typedef enum bfd_error
244
.{
245
.  bfd_error_no_error = 0,
246
.  bfd_error_system_call,
247
.  bfd_error_invalid_target,
248
.  bfd_error_wrong_format,
249
.  bfd_error_wrong_object_format,
250
.  bfd_error_invalid_operation,
251
.  bfd_error_no_memory,
252
.  bfd_error_no_symbols,
253
.  bfd_error_no_armap,
254
.  bfd_error_no_more_archived_files,
255
.  bfd_error_malformed_archive,
256
.  bfd_error_file_not_recognized,
257
.  bfd_error_file_ambiguously_recognized,
258
.  bfd_error_no_contents,
259
.  bfd_error_nonrepresentable_section,
260
.  bfd_error_no_debug_section,
261
.  bfd_error_bad_value,
262
.  bfd_error_file_truncated,
263
.  bfd_error_file_too_big,
264
.  bfd_error_invalid_error_code
265
.}
266
.bfd_error_type;
267
.
268
*/
269
 
270
static bfd_error_type bfd_error = bfd_error_no_error;
271
 
272
const char *const bfd_errmsgs[] =
273
{
274
  N_("No error"),
275
  N_("System call error"),
276
  N_("Invalid bfd target"),
277
  N_("File in wrong format"),
278
  N_("Archive object file in wrong format"),
279
  N_("Invalid operation"),
280
  N_("Memory exhausted"),
281
  N_("No symbols"),
282
  N_("Archive has no index; run ranlib to add one"),
283
  N_("No more archived files"),
284
  N_("Malformed archive"),
285
  N_("File format not recognized"),
286
  N_("File format is ambiguous"),
287
  N_("Section has no contents"),
288
  N_("Nonrepresentable section on output"),
289
  N_("Symbol needs debug section which does not exist"),
290
  N_("Bad value"),
291
  N_("File truncated"),
292
  N_("File too big"),
293
  N_("#<Invalid error code>")
294
};
295
 
296
/*
297
FUNCTION
298
        bfd_get_error
299
 
300
SYNOPSIS
301
        bfd_error_type bfd_get_error (void);
302
 
303
DESCRIPTION
304
        Return the current BFD error condition.
305
*/
306
 
307
bfd_error_type
308
bfd_get_error ()
309
{
310
  return bfd_error;
311
}
312
 
313
/*
314
FUNCTION
315
        bfd_set_error
316
 
317
SYNOPSIS
318
        void bfd_set_error (bfd_error_type error_tag);
319
 
320
DESCRIPTION
321
        Set the BFD error condition to be @var{error_tag}.
322
*/
323
 
324
void
325
bfd_set_error (error_tag)
326
     bfd_error_type error_tag;
327
{
328
  bfd_error = error_tag;
329
}
330
 
331
/*
332
FUNCTION
333
        bfd_errmsg
334
 
335
SYNOPSIS
336
        const char *bfd_errmsg (bfd_error_type error_tag);
337
 
338
DESCRIPTION
339
        Return a string describing the error @var{error_tag}, or
340
        the system error if @var{error_tag} is <<bfd_error_system_call>>.
341
*/
342
 
343
const char *
344
bfd_errmsg (error_tag)
345
     bfd_error_type error_tag;
346
{
347
#ifndef errno
348
  extern int errno;
349
#endif
350
  if (error_tag == bfd_error_system_call)
351
    return xstrerror (errno);
352
 
353
  if ((((int) error_tag < (int) bfd_error_no_error) ||
354
       ((int) error_tag > (int) bfd_error_invalid_error_code)))
355
    error_tag = bfd_error_invalid_error_code;/* sanity check */
356
 
357
  return _(bfd_errmsgs [(int)error_tag]);
358
}
359
 
360
/*
361
FUNCTION
362
        bfd_perror
363
 
364
SYNOPSIS
365
        void bfd_perror (const char *message);
366
 
367
DESCRIPTION
368
        Print to the standard error stream a string describing the
369
        last BFD error that occurred, or the last system error if
370
        the last BFD error was a system call failure.  If @var{message}
371
        is non-NULL and non-empty, the error string printed is preceded
372
        by @var{message}, a colon, and a space.  It is followed by a newline.
373
*/
374
 
375
void
376
bfd_perror (message)
377
     const char *message;
378
{
379
  if (bfd_get_error () == bfd_error_system_call)
380
    /* Must be a system error then.  */
381
    perror ((char *)message);
382
  else
383
    {
384
      if (message == NULL || *message == '\0')
385
        fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
386
      else
387
        fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
388
    }
389
}
390
 
391
/*
392
SUBSECTION
393
        BFD error handler
394
 
395
        Some BFD functions want to print messages describing the
396
        problem.  They call a BFD error handler function.  This
397
        function may be overriden by the program.
398
 
399
        The BFD error handler acts like printf.
400
 
401
CODE_FRAGMENT
402
.
403
.typedef void (*bfd_error_handler_type) PARAMS ((const char *, ...));
404
.
405
*/
406
 
407
/* The program name used when printing BFD error messages.  */
408
 
409
static const char *_bfd_error_program_name;
410
 
411
/* This is the default routine to handle BFD error messages.  */
412
 
413
static void _bfd_default_error_handler PARAMS ((const char *s, ...));
414
 
415
static void
416
_bfd_default_error_handler VPARAMS ((const char *s, ...))
417
{
418
  if (_bfd_error_program_name != NULL)
419
    fprintf (stderr, "%s: ", _bfd_error_program_name);
420
  else
421
    fprintf (stderr, "BFD: ");
422
 
423
  VA_OPEN (p, s);
424
  VA_FIXEDARG (p, const char *, s);
425
  vfprintf (stderr, s, p);
426
  VA_CLOSE (p);
427
 
428
  fprintf (stderr, "\n");
429
}
430
 
431
/* This is a function pointer to the routine which should handle BFD
432
   error messages.  It is called when a BFD routine encounters an
433
   error for which it wants to print a message.  Going through a
434
   function pointer permits a program linked against BFD to intercept
435
   the messages and deal with them itself.  */
436
 
437
bfd_error_handler_type _bfd_error_handler = _bfd_default_error_handler;
438
 
439
/*
440
FUNCTION
441
        bfd_set_error_handler
442
 
443
SYNOPSIS
444
        bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
445
 
446
DESCRIPTION
447
        Set the BFD error handler function.  Returns the previous
448
        function.
449
*/
450
 
451
bfd_error_handler_type
452
bfd_set_error_handler (pnew)
453
     bfd_error_handler_type pnew;
454
{
455
  bfd_error_handler_type pold;
456
 
457
  pold = _bfd_error_handler;
458
  _bfd_error_handler = pnew;
459
  return pold;
460
}
461
 
462
/*
463
FUNCTION
464
        bfd_set_error_program_name
465
 
466
SYNOPSIS
467
        void bfd_set_error_program_name (const char *);
468
 
469
DESCRIPTION
470
        Set the program name to use when printing a BFD error.  This
471
        is printed before the error message followed by a colon and
472
        space.  The string must not be changed after it is passed to
473
        this function.
474
*/
475
 
476
void
477
bfd_set_error_program_name (name)
478
     const char *name;
479
{
480
  _bfd_error_program_name = name;
481
}
482
 
483
/*
484
FUNCTION
485
        bfd_get_error_handler
486
 
487
SYNOPSIS
488
        bfd_error_handler_type bfd_get_error_handler (void);
489
 
490
DESCRIPTION
491
        Return the BFD error handler function.
492
*/
493
 
494
bfd_error_handler_type
495
bfd_get_error_handler ()
496
{
497
  return _bfd_error_handler;
498
}
499
 
500
/*
501
FUNCTION
502
        bfd_archive_filename
503
 
504
SYNOPSIS
505
        const char *bfd_archive_filename (bfd *);
506
 
507
DESCRIPTION
508
        For a BFD that is a component of an archive, returns a string
509
        with both the archive name and file name.  For other BFDs, just
510
        returns the file name.
511
*/
512
 
513
const char *
514
bfd_archive_filename (abfd)
515
     bfd *abfd;
516
{
517
  if (abfd->my_archive)
518
    {
519
      static size_t curr = 0;
520
      static char *buf;
521
      size_t needed;
522
 
523
      needed = (strlen (bfd_get_filename (abfd->my_archive))
524
                + strlen (bfd_get_filename (abfd)) + 3);
525
      if (needed > curr)
526
        {
527
          if (curr)
528
            free (buf);
529
          curr = needed + (needed >> 1);
530
          buf = bfd_malloc ((bfd_size_type) curr);
531
          /* If we can't malloc, fail safe by returning just the file
532
             name. This function is only used when building error
533
             messages.  */
534
          if (!buf)
535
            {
536
              curr = 0;
537
              return bfd_get_filename (abfd);
538
            }
539
        }
540
      sprintf (buf, "%s(%s)", bfd_get_filename (abfd->my_archive),
541
               bfd_get_filename (abfd));
542
      return buf;
543
    }
544
  else
545
    return bfd_get_filename (abfd);
546
}
547
 
548
/*
549
SECTION
550
        Symbols
551
*/
552
 
553
/*
554
FUNCTION
555
        bfd_get_reloc_upper_bound
556
 
557
SYNOPSIS
558
        long bfd_get_reloc_upper_bound(bfd *abfd, asection *sect);
559
 
560
DESCRIPTION
561
        Return the number of bytes required to store the
562
        relocation information associated with section @var{sect}
563
        attached to bfd @var{abfd}.  If an error occurs, return -1.
564
 
565
*/
566
 
567
long
568
bfd_get_reloc_upper_bound (abfd, asect)
569
     bfd *abfd;
570
     sec_ptr asect;
571
{
572
  if (abfd->format != bfd_object)
573
    {
574
      bfd_set_error (bfd_error_invalid_operation);
575
      return -1;
576
    }
577
 
578
  return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
579
}
580
 
581
/*
582
FUNCTION
583
        bfd_canonicalize_reloc
584
 
585
SYNOPSIS
586
        long bfd_canonicalize_reloc
587
                (bfd *abfd,
588
                asection *sec,
589
                arelent **loc,
590
                asymbol **syms);
591
 
592
DESCRIPTION
593
        Call the back end associated with the open BFD
594
        @var{abfd} and translate the external form of the relocation
595
        information attached to @var{sec} into the internal canonical
596
        form.  Place the table into memory at @var{loc}, which has
597
        been preallocated, usually by a call to
598
        <<bfd_get_reloc_upper_bound>>.  Returns the number of relocs, or
599
        -1 on error.
600
 
601
        The @var{syms} table is also needed for horrible internal magic
602
        reasons.
603
 
604
*/
605
long
606
bfd_canonicalize_reloc (abfd, asect, location, symbols)
607
     bfd *abfd;
608
     sec_ptr asect;
609
     arelent **location;
610
     asymbol **symbols;
611
{
612
  if (abfd->format != bfd_object)
613
    {
614
      bfd_set_error (bfd_error_invalid_operation);
615
      return -1;
616
    }
617
 
618
  return BFD_SEND (abfd, _bfd_canonicalize_reloc,
619
                   (abfd, asect, location, symbols));
620
}
621
 
622
/*
623
FUNCTION
624
        bfd_set_reloc
625
 
626
SYNOPSIS
627
        void bfd_set_reloc
628
          (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
629
 
630
DESCRIPTION
631
        Set the relocation pointer and count within
632
        section @var{sec} to the values @var{rel} and @var{count}.
633
        The argument @var{abfd} is ignored.
634
 
635
*/
636
 
637
void
638
bfd_set_reloc (ignore_abfd, asect, location, count)
639
     bfd *ignore_abfd ATTRIBUTE_UNUSED;
640
     sec_ptr asect;
641
     arelent **location;
642
     unsigned int count;
643
{
644
  asect->orelocation = location;
645
  asect->reloc_count = count;
646
}
647
 
648
/*
649
FUNCTION
650
        bfd_set_file_flags
651
 
652
SYNOPSIS
653
        boolean bfd_set_file_flags(bfd *abfd, flagword flags);
654
 
655
DESCRIPTION
656
        Set the flag word in the BFD @var{abfd} to the value @var{flags}.
657
 
658
        Possible errors are:
659
        o <<bfd_error_wrong_format>> - The target bfd was not of object format.
660
        o <<bfd_error_invalid_operation>> - The target bfd was open for reading.
661
        o <<bfd_error_invalid_operation>> -
662
        The flag word contained a bit which was not applicable to the
663
        type of file.  E.g., an attempt was made to set the <<D_PAGED>> bit
664
        on a BFD format which does not support demand paging.
665
 
666
*/
667
 
668
boolean
669
bfd_set_file_flags (abfd, flags)
670
     bfd *abfd;
671
     flagword flags;
672
{
673
  if (abfd->format != bfd_object)
674
    {
675
      bfd_set_error (bfd_error_wrong_format);
676
      return false;
677
    }
678
 
679
  if (bfd_read_p (abfd))
680
    {
681
      bfd_set_error (bfd_error_invalid_operation);
682
      return false;
683
    }
684
 
685
  bfd_get_file_flags (abfd) = flags;
686
  if ((flags & bfd_applicable_file_flags (abfd)) != flags)
687
    {
688
      bfd_set_error (bfd_error_invalid_operation);
689
      return false;
690
    }
691
 
692
  return true;
693
}
694
 
695
void
696
bfd_assert (file, line)
697
     const char *file;
698
     int line;
699
{
700
  (*_bfd_error_handler) (_("BFD %s assertion fail %s:%d"),
701
                         BFD_VERSION_STRING, file, line);
702
}
703
 
704
/* A more or less friendly abort message.  In libbfd.h abort is
705
   defined to call this function.  */
706
 
707
#ifndef EXIT_FAILURE
708
#define EXIT_FAILURE 1
709
#endif
710
 
711
void
712
_bfd_abort (file, line, fn)
713
     const char *file;
714
     int line;
715
     const char *fn;
716
{
717
  if (fn != NULL)
718
    (*_bfd_error_handler)
719
      (_("BFD %s internal error, aborting at %s line %d in %s\n"),
720
       BFD_VERSION_STRING, file, line, fn);
721
  else
722
    (*_bfd_error_handler)
723
      (_("BFD %s internal error, aborting at %s line %d\n"),
724
       BFD_VERSION_STRING, file, line);
725
  (*_bfd_error_handler) (_("Please report this bug.\n"));
726
  xexit (EXIT_FAILURE);
727
}
728
 
729
/*
730
FUNCTION
731
        bfd_get_arch_size
732
 
733
SYNOPSIS
734
        int bfd_get_arch_size (bfd *abfd);
735
 
736
DESCRIPTION
737
        Returns the architecture address size, in bits, as determined
738
        by the object file's format.  For ELF, this information is
739
        included in the header.
740
 
741
RETURNS
742
        Returns the arch size in bits if known, <<-1>> otherwise.
743
*/
744
 
745
int
746
bfd_get_arch_size (abfd)
747
     bfd *abfd;
748
{
749
  if (abfd->xvec->flavour == bfd_target_elf_flavour)
750
    return (get_elf_backend_data (abfd))->s->arch_size;
751
 
752
  return -1;
753
}
754
 
755
/*
756
FUNCTION
757
        bfd_get_sign_extend_vma
758
 
759
SYNOPSIS
760
        int bfd_get_sign_extend_vma (bfd *abfd);
761
 
762
DESCRIPTION
763
        Indicates if the target architecture "naturally" sign extends
764
        an address.  Some architectures implicitly sign extend address
765
        values when they are converted to types larger than the size
766
        of an address.  For instance, bfd_get_start_address() will
767
        return an address sign extended to fill a bfd_vma when this is
768
        the case.
769
 
770
RETURNS
771
        Returns <<1>> if the target architecture is known to sign
772
        extend addresses, <<0>> if the target architecture is known to
773
        not sign extend addresses, and <<-1>> otherwise.
774
*/
775
 
776
int
777
bfd_get_sign_extend_vma (abfd)
778
     bfd *abfd;
779
{
780
  char *name;
781
 
782
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
783
    return (get_elf_backend_data (abfd)->sign_extend_vma);
784
 
785
  name = bfd_get_target (abfd);
786
 
787
  /* Return a proper value for DJGPP COFF (an x86 COFF variant).
788
     This function is required for DWARF2 support, but there is
789
     no place to store this information in the COFF back end.
790
     Should enough other COFF targets add support for DWARF2,
791
     a place will have to be found.  Until then, this hack will do.  */
792
  if (strncmp (name, "coff-go32", sizeof ("coff-go32") - 1) == 0)
793
    return 1;
794
 
795
  bfd_set_error (bfd_error_wrong_format);
796
  return -1;
797
}
798
 
799
/*
800
FUNCTION
801
        bfd_set_start_address
802
 
803
SYNOPSIS
804
        boolean bfd_set_start_address(bfd *abfd, bfd_vma vma);
805
 
806
DESCRIPTION
807
        Make @var{vma} the entry point of output BFD @var{abfd}.
808
 
809
RETURNS
810
        Returns <<true>> on success, <<false>> otherwise.
811
*/
812
 
813
boolean
814
bfd_set_start_address (abfd, vma)
815
     bfd *abfd;
816
     bfd_vma vma;
817
{
818
  abfd->start_address = vma;
819
  return true;
820
}
821
 
822
/*
823
FUNCTION
824
        bfd_get_mtime
825
 
826
SYNOPSIS
827
        long bfd_get_mtime(bfd *abfd);
828
 
829
DESCRIPTION
830
        Return the file modification time (as read from the file system, or
831
        from the archive header for archive members).
832
 
833
*/
834
 
835
long
836
bfd_get_mtime (abfd)
837
     bfd *abfd;
838
{
839
  FILE *fp;
840
  struct stat buf;
841
 
842
  if (abfd->mtime_set)
843
    return abfd->mtime;
844
 
845
  fp = bfd_cache_lookup (abfd);
846
  if (0 != fstat (fileno (fp), &buf))
847
    return 0;
848
 
849
  abfd->mtime = buf.st_mtime;           /* Save value in case anyone wants it */
850
  return buf.st_mtime;
851
}
852
 
853
/*
854
FUNCTION
855
        bfd_get_size
856
 
857
SYNOPSIS
858
        long bfd_get_size(bfd *abfd);
859
 
860
DESCRIPTION
861
        Return the file size (as read from file system) for the file
862
        associated with BFD @var{abfd}.
863
 
864
        The initial motivation for, and use of, this routine is not
865
        so we can get the exact size of the object the BFD applies to, since
866
        that might not be generally possible (archive members for example).
867
        It would be ideal if someone could eventually modify
868
        it so that such results were guaranteed.
869
 
870
        Instead, we want to ask questions like "is this NNN byte sized
871
        object I'm about to try read from file offset YYY reasonable?"
872
        As as example of where we might do this, some object formats
873
        use string tables for which the first <<sizeof (long)>> bytes of the
874
        table contain the size of the table itself, including the size bytes.
875
        If an application tries to read what it thinks is one of these
876
        string tables, without some way to validate the size, and for
877
        some reason the size is wrong (byte swapping error, wrong location
878
        for the string table, etc.), the only clue is likely to be a read
879
        error when it tries to read the table, or a "virtual memory
880
        exhausted" error when it tries to allocate 15 bazillon bytes
881
        of space for the 15 bazillon byte table it is about to read.
882
        This function at least allows us to answer the quesion, "is the
883
        size reasonable?".
884
*/
885
 
886
long
887
bfd_get_size (abfd)
888
     bfd *abfd;
889
{
890
  FILE *fp;
891
  struct stat buf;
892
 
893
  if ((abfd->flags & BFD_IN_MEMORY) != 0)
894
    return ((struct bfd_in_memory *) abfd->iostream)->size;
895
 
896
  fp = bfd_cache_lookup (abfd);
897
  if (0 != fstat (fileno (fp), & buf))
898
    return 0;
899
 
900
  return buf.st_size;
901
}
902
 
903
/*
904
FUNCTION
905
        bfd_get_gp_size
906
 
907
SYNOPSIS
908
        unsigned int bfd_get_gp_size(bfd *abfd);
909
 
910
DESCRIPTION
911
        Return the maximum size of objects to be optimized using the GP
912
        register under MIPS ECOFF.  This is typically set by the <<-G>>
913
        argument to the compiler, assembler or linker.
914
*/
915
 
916
unsigned int
917
bfd_get_gp_size (abfd)
918
     bfd *abfd;
919
{
920
  if (abfd->format == bfd_object)
921
    {
922
      if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
923
        return ecoff_data (abfd)->gp_size;
924
      else if (abfd->xvec->flavour == bfd_target_elf_flavour)
925
        return elf_gp_size (abfd);
926
    }
927
  return 0;
928
}
929
 
930
/*
931
FUNCTION
932
        bfd_set_gp_size
933
 
934
SYNOPSIS
935
        void bfd_set_gp_size(bfd *abfd, unsigned int i);
936
 
937
DESCRIPTION
938
        Set the maximum size of objects to be optimized using the GP
939
        register under ECOFF or MIPS ELF.  This is typically set by
940
        the <<-G>> argument to the compiler, assembler or linker.
941
*/
942
 
943
void
944
bfd_set_gp_size (abfd, i)
945
     bfd *abfd;
946
     unsigned int i;
947
{
948
  /* Don't try to set GP size on an archive or core file!  */
949
  if (abfd->format != bfd_object)
950
    return;
951
 
952
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
953
    ecoff_data (abfd)->gp_size = i;
954
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
955
    elf_gp_size (abfd) = i;
956
}
957
 
958
/* Get the GP value.  This is an internal function used by some of the
959
   relocation special_function routines on targets which support a GP
960
   register.  */
961
 
962
bfd_vma
963
_bfd_get_gp_value (abfd)
964
     bfd *abfd;
965
{
966
  if (abfd->format != bfd_object)
967
    return 0;
968
 
969
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
970
    return ecoff_data (abfd)->gp;
971
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
972
    return elf_gp (abfd);
973
 
974
  return 0;
975
}
976
 
977
/* Set the GP value.  */
978
 
979
void
980
_bfd_set_gp_value (abfd, v)
981
     bfd *abfd;
982
     bfd_vma v;
983
{
984
  if (abfd->format != bfd_object)
985
    return;
986
 
987
  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
988
    ecoff_data (abfd)->gp = v;
989
  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
990
    elf_gp (abfd) = v;
991
}
992
 
993
/*
994
FUNCTION
995
        bfd_scan_vma
996
 
997
SYNOPSIS
998
        bfd_vma bfd_scan_vma(const char *string, const char **end, int base);
999
 
1000
DESCRIPTION
1001
        Convert, like <<strtoul>>, a numerical expression
1002
        @var{string} into a <<bfd_vma>> integer, and return that integer.
1003
        (Though without as many bells and whistles as <<strtoul>>.)
1004
        The expression is assumed to be unsigned (i.e., positive).
1005
        If given a @var{base}, it is used as the base for conversion.
1006
        A base of 0 causes the function to interpret the string
1007
        in hex if a leading "0x" or "0X" is found, otherwise
1008
        in octal if a leading zero is found, otherwise in decimal.
1009
 
1010
        If the value would overflow, the maximum <<bfd_vma>> value is
1011
        returned.
1012
*/
1013
 
1014
bfd_vma
1015
bfd_scan_vma (string, end, base)
1016
     const char *string;
1017
     const char **end;
1018
     int base;
1019
{
1020
  bfd_vma value;
1021
  bfd_vma cutoff;
1022
  unsigned int cutlim;
1023
  int overflow;
1024
 
1025
  /* Let the host do it if possible.  */
1026
  if (sizeof (bfd_vma) <= sizeof (unsigned long))
1027
    return (bfd_vma) strtoul (string, (char **) end, base);
1028
 
1029
  if (base == 0)
1030
    {
1031
      if (string[0] == '0')
1032
        {
1033
          if ((string[1] == 'x') || (string[1] == 'X'))
1034
            base = 16;
1035
          else
1036
            base = 8;
1037
        }
1038
    }
1039
 
1040
  if ((base < 2) || (base > 36))
1041
    base = 10;
1042
 
1043
  if (base == 16
1044
      && string[0] == '0'
1045
      && (string[1] == 'x' || string[1] == 'X')
1046
      && ISXDIGIT (string[2]))
1047
    {
1048
      string += 2;
1049
    }
1050
 
1051
  cutoff = (~ (bfd_vma) 0) / (bfd_vma) base;
1052
  cutlim = (~ (bfd_vma) 0) % (bfd_vma) base;
1053
  value = 0;
1054
  overflow = 0;
1055
  while (1)
1056
    {
1057
      unsigned int digit;
1058
 
1059
      digit = *string;
1060
      if (ISDIGIT (digit))
1061
        digit = digit - '0';
1062
      else if (ISALPHA (digit))
1063
        digit = TOUPPER (digit) - 'A' + 10;
1064
      else
1065
        break;
1066
      if (digit >= (unsigned int) base)
1067
        break;
1068
      if (value > cutoff || (value == cutoff && digit > cutlim))
1069
        overflow = 1;
1070
      value = value * base + digit;
1071
      ++string;
1072
    }
1073
 
1074
  if (overflow)
1075
    value = ~ (bfd_vma) 0;
1076
 
1077
  if (end != NULL)
1078
    *end = string;
1079
 
1080
  return value;
1081
}
1082
 
1083
/*
1084
FUNCTION
1085
        bfd_copy_private_bfd_data
1086
 
1087
SYNOPSIS
1088
        boolean bfd_copy_private_bfd_data(bfd *ibfd, bfd *obfd);
1089
 
1090
DESCRIPTION
1091
        Copy private BFD information from the BFD @var{ibfd} to the
1092
        the BFD @var{obfd}.  Return <<true>> on success, <<false>> on error.
1093
        Possible error returns are:
1094
 
1095
        o <<bfd_error_no_memory>> -
1096
        Not enough memory exists to create private data for @var{obfd}.
1097
 
1098
.#define bfd_copy_private_bfd_data(ibfd, obfd) \
1099
.     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
1100
.               (ibfd, obfd))
1101
 
1102
*/
1103
 
1104
/*
1105
FUNCTION
1106
        bfd_merge_private_bfd_data
1107
 
1108
SYNOPSIS
1109
        boolean bfd_merge_private_bfd_data(bfd *ibfd, bfd *obfd);
1110
 
1111
DESCRIPTION
1112
        Merge private BFD information from the BFD @var{ibfd} to the
1113
        the output file BFD @var{obfd} when linking.  Return <<true>>
1114
        on success, <<false>> on error.  Possible error returns are:
1115
 
1116
        o <<bfd_error_no_memory>> -
1117
        Not enough memory exists to create private data for @var{obfd}.
1118
 
1119
.#define bfd_merge_private_bfd_data(ibfd, obfd) \
1120
.     BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
1121
.               (ibfd, obfd))
1122
 
1123
*/
1124
 
1125
/*
1126
FUNCTION
1127
        bfd_set_private_flags
1128
 
1129
SYNOPSIS
1130
        boolean bfd_set_private_flags(bfd *abfd, flagword flags);
1131
 
1132
DESCRIPTION
1133
        Set private BFD flag information in the BFD @var{abfd}.
1134
        Return <<true>> on success, <<false>> on error.  Possible error
1135
        returns are:
1136
 
1137
        o <<bfd_error_no_memory>> -
1138
        Not enough memory exists to create private data for @var{obfd}.
1139
 
1140
.#define bfd_set_private_flags(abfd, flags) \
1141
.     BFD_SEND (abfd, _bfd_set_private_flags, \
1142
.               (abfd, flags))
1143
 
1144
*/
1145
 
1146
/*
1147
FUNCTION
1148
        stuff
1149
 
1150
DESCRIPTION
1151
        Stuff which should be documented:
1152
 
1153
.#define bfd_sizeof_headers(abfd, reloc) \
1154
.     BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
1155
.
1156
.#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
1157
.     BFD_SEND (abfd, _bfd_find_nearest_line,  (abfd, sec, syms, off, file, func, line))
1158
.
1159
.       {* Do these three do anything useful at all, for any back end?  *}
1160
.#define bfd_debug_info_start(abfd) \
1161
.        BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1162
.
1163
.#define bfd_debug_info_end(abfd) \
1164
.        BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1165
.
1166
.#define bfd_debug_info_accumulate(abfd, section) \
1167
.        BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1168
.
1169
.
1170
.#define bfd_stat_arch_elt(abfd, stat) \
1171
.        BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1172
.
1173
.#define bfd_update_armap_timestamp(abfd) \
1174
.        BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
1175
.
1176
.#define bfd_set_arch_mach(abfd, arch, mach)\
1177
.        BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
1178
.
1179
.#define bfd_relax_section(abfd, section, link_info, again) \
1180
.       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
1181
.
1182
.#define bfd_gc_sections(abfd, link_info) \
1183
.       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
1184
.
1185
.#define bfd_merge_sections(abfd, link_info) \
1186
.       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
1187
.
1188
.#define bfd_discard_group(abfd, sec) \
1189
.       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
1190
.
1191
.#define bfd_link_hash_table_create(abfd) \
1192
.       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
1193
.
1194
.#define bfd_link_hash_table_free(abfd, hash) \
1195
.       BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
1196
.
1197
.#define bfd_link_add_symbols(abfd, info) \
1198
.       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
1199
.
1200
.#define bfd_link_just_syms(sec, info) \
1201
.       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
1202
.
1203
.#define bfd_final_link(abfd, info) \
1204
.       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
1205
.
1206
.#define bfd_free_cached_info(abfd) \
1207
.       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
1208
.
1209
.#define bfd_get_dynamic_symtab_upper_bound(abfd) \
1210
.       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
1211
.
1212
.#define bfd_print_private_bfd_data(abfd, file)\
1213
.       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
1214
.
1215
.#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
1216
.       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
1217
.
1218
.#define bfd_get_dynamic_reloc_upper_bound(abfd) \
1219
.       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
1220
.
1221
.#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
1222
.       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
1223
.
1224
.extern bfd_byte *bfd_get_relocated_section_contents
1225
.       PARAMS ((bfd *, struct bfd_link_info *,
1226
.                 struct bfd_link_order *, bfd_byte *,
1227
.                 boolean, asymbol **));
1228
.
1229
 
1230
*/
1231
 
1232
bfd_byte *
1233
bfd_get_relocated_section_contents (abfd, link_info, link_order, data,
1234
                                    relocateable, symbols)
1235
     bfd *abfd;
1236
     struct bfd_link_info *link_info;
1237
     struct bfd_link_order *link_order;
1238
     bfd_byte *data;
1239
     boolean relocateable;
1240
     asymbol **symbols;
1241
{
1242
  bfd *abfd2;
1243
  bfd_byte *(*fn) PARAMS ((bfd *, struct bfd_link_info *,
1244
                           struct bfd_link_order *, bfd_byte *, boolean,
1245
                           asymbol **));
1246
 
1247
  if (link_order->type == bfd_indirect_link_order)
1248
    {
1249
      abfd2 = link_order->u.indirect.section->owner;
1250
      if (abfd2 == NULL)
1251
        abfd2 = abfd;
1252
    }
1253
  else
1254
    abfd2 = abfd;
1255
 
1256
  fn = abfd2->xvec->_bfd_get_relocated_section_contents;
1257
 
1258
  return (*fn) (abfd, link_info, link_order, data, relocateable, symbols);
1259
}
1260
 
1261
/* Record information about an ELF program header.  */
1262
 
1263
boolean
1264
bfd_record_phdr (abfd, type, flags_valid, flags, at_valid, at,
1265
                 includes_filehdr, includes_phdrs, count, secs)
1266
     bfd *abfd;
1267
     unsigned long type;
1268
     boolean flags_valid;
1269
     flagword flags;
1270
     boolean at_valid;
1271
     bfd_vma at;
1272
     boolean includes_filehdr;
1273
     boolean includes_phdrs;
1274
     unsigned int count;
1275
     asection **secs;
1276
{
1277
  struct elf_segment_map *m, **pm;
1278
  bfd_size_type amt;
1279
 
1280
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
1281
    return true;
1282
 
1283
  amt = sizeof (struct elf_segment_map);
1284
  amt += ((bfd_size_type) count - 1) * sizeof (asection *);
1285
  m = (struct elf_segment_map *) bfd_alloc (abfd, amt);
1286
  if (m == NULL)
1287
    return false;
1288
 
1289
  m->next = NULL;
1290
  m->p_type = type;
1291
  m->p_flags = flags;
1292
  m->p_paddr = at;
1293
  m->p_flags_valid = flags_valid;
1294
  m->p_paddr_valid = at_valid;
1295
  m->includes_filehdr = includes_filehdr;
1296
  m->includes_phdrs = includes_phdrs;
1297
  m->count = count;
1298
  if (count > 0)
1299
    memcpy (m->sections, secs, count * sizeof (asection *));
1300
 
1301
  for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
1302
    ;
1303
  *pm = m;
1304
 
1305
  return true;
1306
}
1307
 
1308
void
1309
bfd_sprintf_vma (abfd, buf, value)
1310
     bfd *abfd;
1311
     char *buf;
1312
     bfd_vma value;
1313
{
1314
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1315
    get_elf_backend_data (abfd)->elf_backend_sprintf_vma (abfd, buf, value);
1316
  else
1317
    sprintf_vma (buf, value);
1318
}
1319
 
1320
void
1321
bfd_fprintf_vma (abfd, stream, value)
1322
     bfd *abfd;
1323
     PTR stream;
1324
     bfd_vma value;
1325
{
1326
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1327
    get_elf_backend_data (abfd)->elf_backend_fprintf_vma (abfd, stream, value);
1328
  else
1329
    fprintf_vma ((FILE *) stream, value);
1330
}
1331
 
1332
/*
1333
FUNCTION
1334
        bfd_alt_mach_code
1335
 
1336
SYNOPSIS
1337
        boolean bfd_alt_mach_code(bfd *abfd, int alternative);
1338
 
1339
DESCRIPTION
1340
 
1341
        When more than one machine code number is available for the
1342
        same machine type, this function can be used to switch between
1343
        the preferred one (alternative == 0) and any others.  Currently,
1344
        only ELF supports this feature, with up to two alternate
1345
        machine codes.
1346
*/
1347
 
1348
boolean
1349
bfd_alt_mach_code (abfd, alternative)
1350
     bfd *abfd;
1351
     int alternative;
1352
{
1353
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1354
    {
1355
      int code;
1356
 
1357
      switch (alternative)
1358
        {
1359
        case 0:
1360
          code = get_elf_backend_data (abfd)->elf_machine_code;
1361
          break;
1362
 
1363
        case 1:
1364
          code = get_elf_backend_data (abfd)->elf_machine_alt1;
1365
          if (code == 0)
1366
            return false;
1367
          break;
1368
 
1369
        case 2:
1370
          code = get_elf_backend_data (abfd)->elf_machine_alt2;
1371
          if (code == 0)
1372
            return false;
1373
          break;
1374
 
1375
        default:
1376
          return false;
1377
        }
1378
 
1379
      elf_elfheader (abfd)->e_machine = code;
1380
 
1381
      return true;
1382
    }
1383
 
1384
  return false;
1385
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.