(root)/
binutils-2.41/
bfd/
vms.h
       1  /* vms.h -- Header file for VMS (Alpha and Vax) support.
       2     Copyright (C) 1996-2023 Free Software Foundation, Inc.
       3  
       4     Main header file.
       5  
       6     Written by Klaus K"ampf (kkaempf@rmi.de)
       7  
       8     This file is part of BFD, the Binary File Descriptor library.
       9  
      10     This program is free software; you can redistribute it and/or modify
      11     it under the terms of the GNU General Public License as published by
      12     the Free Software Foundation; either version 3 of the License, or
      13     (at your option) any later version.
      14  
      15     This program is distributed in the hope that it will be useful,
      16     but WITHOUT ANY WARRANTY; without even the implied warranty of
      17     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      18     GNU General Public License for more details.
      19  
      20     You should have received a copy of the GNU General Public License
      21     along with this program; if not, write to the Free Software
      22     Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
      23     MA 02110-1301, USA.  */
      24  
      25  #undef vms
      26  #ifndef VMS_H
      27  #define VMS_H
      28  
      29  #include <time.h>
      30  
      31  /* Size of a VMS block on disk.  */
      32  
      33  #define VMS_BLOCK_SIZE  512
      34  
      35  /* Miscellaneous definitions.  */
      36  
      37  #define MAX_OUTREC_SIZE 4096
      38  #define MIN_OUTREC_LUFT 64
      39  
      40  /* File format.  */
      41  
      42  enum file_format_enum
      43    {
      44      /* Not yet known.  */
      45      FF_UNKNOWN,
      46  
      47      /* Unix format.  Each record is preceeded by the record length,
      48         on 2 bytes.  */
      49      FF_FOREIGN,
      50  
      51      /* Native (=VMS) format.  The file only contains the content of the
      52         records.  This may also appear on Unix, depending on which tool
      53         was used to transfer files.  */
      54      FF_NATIVE
      55    };
      56  
      57  /* VMS records input buffer.  */
      58  
      59  struct vms_rec_rd
      60  {
      61    /* Buffer and its size.  */
      62    unsigned char *buf;
      63    unsigned int buf_size;
      64  
      65    /* Current record and its size.  */
      66    unsigned char *rec;
      67    unsigned int rec_size;
      68  
      69    /* Input file format.  */
      70    enum file_format_enum file_format;
      71  };
      72  
      73  /* VMS records output buffer.  */
      74  
      75  struct vms_rec_wr
      76  {
      77    /* Output buffer.  */
      78    unsigned char *buf;
      79  
      80    /* Current length of the record.  */
      81    unsigned short int size;
      82  
      83    /* Sub-record start offset.  */
      84    unsigned short int subrec_offset;
      85  
      86    /* Some records must have a size that is a multiple of the alignment.
      87       Mustn't be 0.  */
      88    unsigned short int align;
      89  };
      90  
      91  struct evax_private_udata_struct
      92  {
      93    asymbol *bsym;
      94    asymbol *enbsym;
      95    char *origname;
      96    int lkindex;
      97  };
      98  
      99  /* vms-misc.c.  */
     100  
     101  #define VMS_DEBUG 0
     102  
     103  #if VMS_DEBUG
     104  extern void _bfd_vms_debug (int, char *, ...) ATTRIBUTE_PRINTF_2;
     105  extern void _bfd_hexdump   (int, unsigned char *, int, int);
     106  
     107  #define vms_debug _bfd_vms_debug
     108  #define vms_debug2(X) _bfd_vms_debug X
     109  #else
     110  #define vms_debug2(X)
     111  #endif
     112  
     113  extern char * vms_get_module_name (const char *, bool);
     114  extern unsigned char *get_vms_time_string (unsigned char *);
     115  extern time_t vms_time_to_time_t (unsigned int hi, unsigned int lo);
     116  extern time_t vms_rawtime_to_time_t (unsigned char *);
     117  extern void vms_time_t_to_vms_time (time_t ut, unsigned int *hi, unsigned int *lo);
     118  extern void vms_get_time (unsigned int *hi, unsigned int *lo);
     119  extern void vms_raw_get_time (unsigned char *buf);
     120  
     121  extern char * _bfd_vms_save_sized_string (bfd *, unsigned char *, size_t);
     122  extern char * _bfd_vms_save_counted_string (bfd *, unsigned char *, size_t);
     123  extern void   _bfd_vms_output_begin (struct vms_rec_wr *, int);
     124  extern void   _bfd_vms_output_alignment (struct vms_rec_wr *, int);
     125  extern void   _bfd_vms_output_begin_subrec (struct vms_rec_wr *, int);
     126  extern void   _bfd_vms_output_end_subrec (struct vms_rec_wr *);
     127  extern void   _bfd_vms_output_end (bfd *, struct vms_rec_wr *);
     128  extern int    _bfd_vms_output_check (struct vms_rec_wr *, int);
     129  extern void   _bfd_vms_output_byte (struct vms_rec_wr *, unsigned);
     130  extern void   _bfd_vms_output_short (struct vms_rec_wr *, unsigned);
     131  extern void   _bfd_vms_output_long (struct vms_rec_wr *, unsigned long);
     132  extern void   _bfd_vms_output_quad (struct vms_rec_wr *, bfd_vma);
     133  extern void   _bfd_vms_output_counted (struct vms_rec_wr *, const char *);
     134  extern void   _bfd_vms_output_dump (struct vms_rec_wr *, const unsigned char *, int);
     135  extern void   _bfd_vms_output_fill (struct vms_rec_wr *, int, int);
     136  extern int    _bfd_vms_convert_to_var_unix_filename (const char *);
     137  
     138  /* vms-alpha.c  */
     139  
     140  extern void bfd_vms_set_section_flags (bfd *, asection *, flagword, flagword);
     141  
     142  #endif /* VMS_H */