Add bfd_get_bits() and bfd_put_bits().
authorNick Clifton <nickc@redhat.com>
Thu, 21 Dec 2000 18:20:04 +0000 (18:20 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 21 Dec 2000 18:20:04 +0000 (18:20 +0000)
bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/libbfd.c
bfd/po/bfd.pot

index c0d5df67850fcfd2a651c2ed5129ee385a666326..4830e2bc35dac61b0ba79d0770850b4056f6f50a 100644 (file)
@@ -1,3 +1,10 @@
+2000-12-21  Richard Sandiford  <rsandifo@redhat.com>
+
+       * libbfd.c (bfd_get_bits): Added
+       (bfd_put_bits): Likewise
+       * bfd-in.h: Declared the above.
+       * bfd-in2.h: Regenerated.
+
 2000-12-20  Kazu Hirata  <kazu@hxi.com>
 
        * targets.c: Fix formatting.
index cc030246bc1a55fb6a476ff78903c8c30c27838a..08d597fa281e91147be374ca7e6c2adeb618a7d4 100644 (file)
@@ -538,6 +538,11 @@ void               bfd_putb32         PARAMS ((bfd_vma, unsigned char *));
 void           bfd_putl32         PARAMS ((bfd_vma, unsigned char *));
 void           bfd_putb16         PARAMS ((bfd_vma, unsigned char *));
 void           bfd_putl16         PARAMS ((bfd_vma, unsigned char *));
+
+/* Byte swapping routines which take size and endiannes as arguments.  */
+
+bfd_vma         bfd_get_bits       PARAMS ((bfd_byte *, int, boolean));
+void            bfd_put_bits       PARAMS ((bfd_vma, bfd_byte *, int, boolean));
 \f
 /* Externally visible ECOFF routines.  */
 
index 03794fae6762a8024b7d5042e9fa779138bbb55d..5fe2b47ae9bf795253c5706fd47c9d84dfa9348c 100644 (file)
@@ -538,6 +538,11 @@ void               bfd_putb32         PARAMS ((bfd_vma, unsigned char *));
 void           bfd_putl32         PARAMS ((bfd_vma, unsigned char *));
 void           bfd_putb16         PARAMS ((bfd_vma, unsigned char *));
 void           bfd_putl16         PARAMS ((bfd_vma, unsigned char *));
+
+/* Byte swapping routines which take size and endiannes as arguments.  */
+
+bfd_vma         bfd_get_bits       PARAMS ((bfd_byte *, int, boolean));
+void            bfd_put_bits       PARAMS ((bfd_vma, bfd_byte *, int, boolean));
 \f
 /* Externally visible ECOFF routines.  */
 
@@ -1303,7 +1308,7 @@ bfd_set_section_flags PARAMS ((bfd *abfd, asection *sec, flagword flags));
 
 void 
 bfd_map_over_sections PARAMS ((bfd *abfd,
-    void (*func)(bfd *abfd,
+    void (*func) (bfd *abfd,
     asection *sect,
     PTR obj),
     PTR obj));
@@ -3186,13 +3191,13 @@ core_file_matches_executable_p
     (bfd_assert (__FILE__,__LINE__), NULL))
 #endif
 #define BFD_SEND_FMT(bfd, message, arglist) \
-            (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
+            (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
 
 #ifdef DEBUG_BFD_SEND
 #undef BFD_SEND_FMT
 #define BFD_SEND_FMT(bfd, message, arglist) \
   (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
-   (((bfd)->xvec->message[(int)((bfd)->format)]) arglist) : \
+   (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
    (bfd_assert (__FILE__,__LINE__), NULL))
 #endif
 enum bfd_flavour {
@@ -3227,10 +3232,10 @@ typedef struct bfd_target
   enum bfd_flavour flavour;
   enum bfd_endian byteorder;
   enum bfd_endian header_byteorder;
-  flagword object_flags;       
+  flagword object_flags;
   flagword section_flags;
   char symbol_leading_char;
-  char ar_pad_char;            
+  char ar_pad_char;
   unsigned short ar_max_namelen;
   bfd_vma      (*bfd_getx64) PARAMS ((const bfd_byte *));
   bfd_signed_vma (*bfd_getx_signed_64) PARAMS ((const bfd_byte *));
@@ -3269,7 +3274,7 @@ CAT(NAME,_get_section_contents_in_window)
   /* Called when a new section is created.  */
   boolean       (*_new_section_hook) PARAMS ((bfd *, sec_ptr));
   /* Read the contents of a section.  */
-  boolean       (*_bfd_get_section_contents) PARAMS ((bfd *, sec_ptr, PTR, 
+  boolean       (*_bfd_get_section_contents) PARAMS ((bfd *, sec_ptr, PTR,
                                             file_ptr, bfd_size_type));
   boolean       (*_bfd_get_section_contents_in_window)
                           PARAMS ((bfd *, sec_ptr, bfd_window *,
@@ -3293,7 +3298,7 @@ CAT(NAME,_bfd_print_private_bfd_data)\
      to another.  */
   boolean       (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr,
                                                        bfd *, sec_ptr));
-  /* Called to copy BFD private symbol data from one symbol 
+  /* Called to copy BFD private symbol data from one symbol
      to another.  */
   boolean       (*_bfd_copy_private_symbol_data) PARAMS ((bfd *, asymbol *,
                                                           bfd *, asymbol *));
@@ -3329,10 +3334,10 @@ CAT(NAME,_update_armap_timestamp)
   boolean  (*_bfd_construct_extended_name_table)
              PARAMS ((bfd *, char **, bfd_size_type *, const char **));
   void     (*_bfd_truncate_arname) PARAMS ((bfd *, CONST char *, char *));
-  boolean  (*write_armap) PARAMS ((bfd *arch, 
+  boolean  (*write_armap) PARAMS ((bfd *arch,
                               unsigned int elength,
                               struct orl *map,
-                              unsigned int orl_count, 
+                              unsigned int orl_count,
                               int stridx));
   PTR (*_bfd_read_ar_hdr_fn) PARAMS ((bfd *));
   bfd *    (*openr_next_archived_file) PARAMS ((bfd *arch, bfd *prev));
@@ -3465,11 +3470,11 @@ CAT(NAME,_canonicalize_dynamic_reloc)
   long  (*_bfd_canonicalize_dynamic_reloc)
     PARAMS ((bfd *, arelent **, struct symbol_cache_entry **));
 
- /* Opposite endian version of this target.  */  
+ /* Opposite endian version of this target.  */
  const struct bfd_target * alternative_target;
+
  PTR backend_data;
+
 } bfd_target;
 boolean 
 bfd_set_default_target  PARAMS ((const char *name));
@@ -3481,7 +3486,7 @@ const char **
 bfd_target_list PARAMS ((void));
 
 const bfd_target * 
-bfd_search_for_target  PARAMS ((int (* search_func)(const bfd_target *, void *), void *));
+bfd_search_for_target  PARAMS ((int (* search_func) (const bfd_target *, void *), void *));
 
 boolean 
 bfd_check_format PARAMS ((bfd *abfd, bfd_format format));
index 47f1ebbe2bd3506742bf8e4eb6716f8ec6197b6b..c570ddf459b76f8d9a3706ed76baf6a8acab9975 100644 (file)
@@ -1190,6 +1190,54 @@ bfd_putl64 (data, addr)
   BFD_FAIL();
 #endif
 }
+
+void
+bfd_put_bits (data, addr, bits, big_p)
+     bfd_vma data;
+     bfd_byte *addr;
+     int bits;
+     boolean big_p;
+{
+  int i;
+  int bytes;
+
+  if (bits % 8 != 0)
+    abort ();
+
+  bytes = bits / 8;
+  for (i = 0; i < bytes; i++)
+    {
+      int index = big_p ? bytes - i - 1 : i;
+
+      addr[index] = (bfd_byte) data;
+      data >>= 8;
+    }
+}
+
+bfd_vma
+bfd_get_bits (addr, bits, big_p)
+     bfd_byte *addr;
+     int bits;
+     boolean big_p;
+{
+  bfd_vma data;
+  int i;
+  int bytes;
+
+  if (bits % 8 != 0)
+    abort ();
+
+  data = 0;
+  bytes = bits / 8;
+  for (i = 0; i < bytes; i++)
+    {
+      int index = big_p ? i : bytes - i - 1;
+      
+      data = (data << 8) | addr[index];
+    }
+
+  return data;
+}
 \f
 /* Default implementation */
 
index 249b50cee976e608afc151e578af0c4da6b4e2c5..200979132aa24edecdcbbbc078ef80fdb597aaba 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-12-18 10:57-0800\n"
+"POT-Creation-Date: 2000-12-21 10:12-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1425,12 +1425,12 @@ msgstr ""
 msgid "not mapping: env var not set\n"
 msgstr ""
 
-#: libbfd.c:1335
+#: libbfd.c:1383
 #, c-format
 msgid "%s: compiled for a big endian system and target is little endian"
 msgstr ""
 
-#: libbfd.c:1337
+#: libbfd.c:1385
 #, c-format
 msgid "%s: compiled for a little endian system and target is big endian"
 msgstr ""
@@ -1864,12 +1864,12 @@ msgstr ""
 msgid "som_sizeof_headers unimplemented"
 msgstr ""
 
-#: srec.c:301
+#: srec.c:300
 #, c-format
 msgid "%s:%d: Unexpected character `%s' in S-record file\n"
 msgstr ""
 
-#: syms.c:974
+#: syms.c:968
 msgid "Unsupported .stab relocation"
 msgstr ""