* config/tc-i370.c: Fix typo in last change.
[deliverable/binutils-gdb.git] / bfd / bfd.c
index 8305ddc23a2262cc0543f2484536df9cc41e3884..8101814106f2f04f6f9e9b68bb8327ad001c7370 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -70,7 +70,7 @@ CODE_FRAGMENT
 .    {* When a file is closed by the caching routines, BFD retains
 .       state information on the file here: *}
 .
-.    file_ptr where;
+.    ufile_ptr where;
 .
 .    {* and here: (``once'' means at least once) *}
 .
@@ -108,7 +108,7 @@ CODE_FRAGMENT
 .       anything. I believe that this can become always an add of
 .       origin, with origin set to 0 for non archive files.   *}
 .
-.    file_ptr origin;
+.    ufile_ptr origin;
 .
 .    {* Remember when output has begun, to stop strange things
 .       from happening. *}
@@ -203,6 +203,7 @@ CODE_FRAGMENT
 #endif
 
 #include "libiberty.h"
+#include "safe-ctype.h"
 #include "bfdlink.h"
 #include "libbfd.h"
 #include "coff/internal.h"
@@ -211,8 +212,6 @@ CODE_FRAGMENT
 #include "libecoff.h"
 #undef obj_symbols
 #include "elf-bfd.h"
-
-#include <ctype.h>
 \f
 /* provide storage for subsystem, stack and heap data which may have been
    passed in on the command line.  Ld puts this data into a bfd_link_info
@@ -891,7 +890,7 @@ FUNCTION
        bfd_get_gp_size
 
 SYNOPSIS
-       int bfd_get_gp_size(bfd *abfd);
+       unsigned int bfd_get_gp_size(bfd *abfd);
 
 DESCRIPTION
        Return the maximum size of objects to be optimized using the GP
@@ -899,7 +898,7 @@ DESCRIPTION
        argument to the compiler, assembler or linker.
 */
 
-int
+unsigned int
 bfd_get_gp_size (abfd)
      bfd *abfd;
 {
@@ -918,7 +917,7 @@ FUNCTION
        bfd_set_gp_size
 
 SYNOPSIS
-       void bfd_set_gp_size(bfd *abfd, int i);
+       void bfd_set_gp_size(bfd *abfd, unsigned int i);
 
 DESCRIPTION
        Set the maximum size of objects to be optimized using the GP
@@ -929,7 +928,7 @@ DESCRIPTION
 void
 bfd_set_gp_size (abfd, i)
      bfd *abfd;
-     int i;
+     unsigned int i;
 {
   /* Don't try to set GP size on an archive or core file!  */
   if (abfd->format != bfd_object)
@@ -1034,10 +1033,10 @@ bfd_scan_vma (string, end, base)
 
 /* Speed could be improved with a table like hex_value[] in gas.  */
 #define HEX_VALUE(c) \
-  (isxdigit ((unsigned char) c)                                        \
-   ? (isdigit ((unsigned char) c)                              \
+  (ISXDIGIT (c)                                                        \
+   ? (ISDIGIT (c)                                              \
       ? (c - '0')                                              \
-      : (10 + c - (islower ((unsigned char) c) ? 'a' : 'A')))  \
+      : (10 + c - (ISLOWER (c) ? 'a' : 'A')))                  \
    : 42)
 
   for (value = 0; (digit = HEX_VALUE (* string)) < base; string ++)
@@ -1235,14 +1234,14 @@ bfd_record_phdr (abfd, type, flags_valid, flags, at_valid, at,
      asection **secs;
 {
   struct elf_segment_map *m, **pm;
+  bfd_size_type amt;
 
   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
     return true;
 
-  m = ((struct elf_segment_map *)
-       bfd_alloc (abfd,
-                 (sizeof (struct elf_segment_map)
-                  + ((size_t) count - 1) * sizeof (asection *))));
+  amt = sizeof (struct elf_segment_map);
+  amt += ((bfd_size_type) count - 1) * sizeof (asection *);
+  m = (struct elf_segment_map *) bfd_alloc (abfd, amt);
   if (m == NULL)
     return false;
 
@@ -1288,3 +1287,58 @@ bfd_fprintf_vma (abfd, stream, value)
   else
     fprintf_vma ((FILE *) stream, value);
 }
+
+/*
+FUNCTION
+       bfd_alt_mach_code
+
+SYNOPSIS
+       boolean bfd_alt_mach_code(bfd *abfd, int index);
+
+DESCRIPTION
+
+       When more than one machine code number is available for the
+       same machine type, this function can be used to switch between
+       the preferred one (index == 0) and any others.  Currently,
+       only ELF supports this feature, with up to two alternate
+       machine codes.
+*/
+
+boolean
+bfd_alt_mach_code (abfd, index)
+     bfd *abfd;
+     int index;
+{
+  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+    {
+      int code;
+
+      switch (index)
+       {
+       case 0:
+         code = get_elf_backend_data (abfd)->elf_machine_code;
+         break;
+
+       case 1:
+         code = get_elf_backend_data (abfd)->elf_machine_alt1;
+         if (code == 0)
+           return false;
+         break;
+
+       case 2:
+         code = get_elf_backend_data (abfd)->elf_machine_alt2;
+         if (code == 0)
+           return false;
+         break;
+
+       default:
+         return false;
+       }
+
+      elf_elfheader (abfd)->e_machine = code;
+
+      return true;
+    }
+
+  return false;
+}
This page took 0.025713 seconds and 4 git commands to generate.