X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fvms-hdr.c;h=24a0aec1a0c50b9ccc979b67b36512e12e17535a;hb=ebdca51ad97f11dff355fb709a77403c8187be3f;hp=3b36b3278c580b65acfb1ca1fc69cd6d4ca4f1fb;hpb=abd8680d6efd97e7ba848a6392ee3ad72be18cd0;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/vms-hdr.c b/bfd/vms-hdr.c index 3b36b3278c..24a0aec1a0 100644 --- a/bfd/vms-hdr.c +++ b/bfd/vms-hdr.c @@ -1,6 +1,7 @@ /* vms-hdr.c -- BFD back-end for VMS/VAX (openVMS/VAX) and EVAX (openVMS/Alpha) files. - Copyright 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 + Free Software Foundation, Inc. HDR record handling functions EMH record handling functions @@ -10,39 +11,38 @@ Written by Klaus K"ampf (kkaempf@rmi.de) -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "bfd.h" +#include "bfdver.h" #include "sysdep.h" #include "bfdlink.h" +#include "safe-ctype.h" #include "libbfd.h" #include "vms.h" -/*---------------------------------------------------------------------------*/ - +#ifdef HAVE_ALLOCA_H +#include +#endif /* Read & process emh record - return 0 on success, -1 on error */ + return 0 on success, -1 on error. */ int -_bfd_vms_slurp_hdr (abfd, objtype) - bfd *abfd; - int objtype; +_bfd_vms_slurp_hdr (bfd *abfd, int objtype) { unsigned char *ptr; unsigned char *vms_rec; @@ -56,14 +56,14 @@ _bfd_vms_slurp_hdr (abfd, objtype) switch (objtype) { - case OBJ_S_C_HDR: - subtype = vms_rec[1]; - break; - case EOBJ_S_C_EMH: - subtype = bfd_getl16 (vms_rec + 4) + EVAX_OFFSET; - break; - default: - subtype = -1; + case OBJ_S_C_HDR: + subtype = vms_rec[1]; + break; + case EOBJ_S_C_EMH: + subtype = bfd_getl16 (vms_rec + 4) + EVAX_OFFSET; + break; + default: + subtype = -1; } #if VMS_DEBUG @@ -72,140 +72,77 @@ _bfd_vms_slurp_hdr (abfd, objtype) switch (subtype) { - - case MHD_S_C_MHD: - /* - * module header - */ - PRIV(hdr_data).hdr_b_strlvl = vms_rec[2]; - PRIV(hdr_data).hdr_l_recsiz = bfd_getl16 (vms_rec + 3); - PRIV(hdr_data).hdr_t_name = _bfd_vms_save_counted_string (vms_rec + 5); - ptr = vms_rec + 5 + vms_rec[5] + 1; - PRIV(hdr_data).hdr_t_version = _bfd_vms_save_counted_string (ptr); - ptr += *ptr + 1; - PRIV(hdr_data).hdr_t_date = _bfd_vms_save_sized_string (ptr, 17); - - break; - - case MHD_S_C_LNM: - /* - * - */ - PRIV(hdr_data).hdr_c_lnm = _bfd_vms_save_sized_string (vms_rec, PRIV(rec_length-2)); - break; - - case MHD_S_C_SRC: - /* - * - */ - PRIV(hdr_data).hdr_c_src = _bfd_vms_save_sized_string (vms_rec, PRIV(rec_length-2)); - break; - - case MHD_S_C_TTL: - /* - * - */ - PRIV(hdr_data).hdr_c_ttl = _bfd_vms_save_sized_string (vms_rec, PRIV(rec_length-2)); - break; - - case MHD_S_C_CPR: - /* - * - */ + case MHD_S_C_MHD: + /* Module header. */ + PRIV (hdr_data).hdr_b_strlvl = vms_rec[2]; + PRIV (hdr_data).hdr_l_recsiz = bfd_getl16 (vms_rec + 3); + PRIV (hdr_data).hdr_t_name = _bfd_vms_save_counted_string (vms_rec + 5); + ptr = vms_rec + 5 + vms_rec[5] + 1; + PRIV (hdr_data).hdr_t_version = _bfd_vms_save_counted_string (ptr); + ptr += *ptr + 1; + PRIV (hdr_data).hdr_t_date = _bfd_vms_save_sized_string (ptr, 17); break; - case MHD_S_C_MTC: - /* - * - */ + case MHD_S_C_LNM: + PRIV (hdr_data).hdr_c_lnm = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 2)); break; - case MHD_S_C_GTX: - /* - * - */ + case MHD_S_C_SRC: + PRIV (hdr_data).hdr_c_src = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 2)); break; - case EMH_S_C_MHD + EVAX_OFFSET: - /* - * module header - */ - PRIV(hdr_data).hdr_b_strlvl = vms_rec[6]; - PRIV(hdr_data).hdr_l_arch1 = bfd_getl32 (vms_rec + 8); - PRIV(hdr_data).hdr_l_arch2 = bfd_getl32 (vms_rec + 12); - PRIV(hdr_data).hdr_l_recsiz = bfd_getl32 (vms_rec + 16); - PRIV(hdr_data).hdr_t_name = - _bfd_vms_save_counted_string (vms_rec + 20); - ptr = vms_rec + 20 + vms_rec[20] + 1; - PRIV(hdr_data).hdr_t_version = - _bfd_vms_save_counted_string (ptr); - ptr += *ptr + 1; - PRIV(hdr_data).hdr_t_date = - _bfd_vms_save_sized_string (ptr, 17); - - break; - - case EMH_S_C_LNM + EVAX_OFFSET: - /* - * - */ - PRIV(hdr_data).hdr_c_lnm = - _bfd_vms_save_sized_string (vms_rec, PRIV(rec_length-6)); + case MHD_S_C_TTL: + PRIV (hdr_data).hdr_c_ttl = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 2)); break; - case EMH_S_C_SRC + EVAX_OFFSET: - /* - * - */ - PRIV(hdr_data).hdr_c_src = - _bfd_vms_save_sized_string (vms_rec, PRIV(rec_length-6)); + case EMH_S_C_MHD + EVAX_OFFSET: + /* Module header. */ + PRIV (hdr_data).hdr_b_strlvl = vms_rec[6]; + PRIV (hdr_data).hdr_l_arch1 = bfd_getl32 (vms_rec + 8); + PRIV (hdr_data).hdr_l_arch2 = bfd_getl32 (vms_rec + 12); + PRIV (hdr_data).hdr_l_recsiz = bfd_getl32 (vms_rec + 16); + PRIV (hdr_data).hdr_t_name = _bfd_vms_save_counted_string (vms_rec + 20); + ptr = vms_rec + 20 + vms_rec[20] + 1; + PRIV (hdr_data).hdr_t_version =_bfd_vms_save_counted_string (ptr); + ptr += *ptr + 1; + PRIV (hdr_data).hdr_t_date = _bfd_vms_save_sized_string (ptr, 17); break; - case EMH_S_C_TTL + EVAX_OFFSET: - /* - * - */ - PRIV(hdr_data).hdr_c_ttl = - _bfd_vms_save_sized_string (vms_rec, PRIV(rec_length-6)); + case EMH_S_C_LNM + EVAX_OFFSET: + PRIV (hdr_data).hdr_c_lnm = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 6)); break; - case EMH_S_C_CPR + EVAX_OFFSET: - /* - * - */ + case EMH_S_C_SRC + EVAX_OFFSET: + PRIV (hdr_data).hdr_c_src = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 6)); break; - case EMH_S_C_MTC + EVAX_OFFSET: - /* - * - */ + case EMH_S_C_TTL + EVAX_OFFSET: + PRIV (hdr_data).hdr_c_ttl = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 6)); break; - case EMH_S_C_GTX + EVAX_OFFSET: - /* - * - */ + case MHD_S_C_CPR: + case MHD_S_C_MTC: + case MHD_S_C_GTX: + case EMH_S_C_CPR + EVAX_OFFSET: + case EMH_S_C_MTC + EVAX_OFFSET: + case EMH_S_C_GTX + EVAX_OFFSET: break; - default: - bfd_set_error (bfd_error_wrong_format); + default: + bfd_set_error (bfd_error_wrong_format); return -1; - - } /* switch */ + } return 0; } - -/*-----------------------------------------------------------------------------*/ /* Output routines. */ - -/* Manufacure a VMS like time on a unix based system. - stolen from obj-vms.c */ +/* Manufacture a VMS like time on a unix based system. + stolen from obj-vms.c. */ static unsigned char * -get_vms_time_string () +get_vms_time_string (void) { static unsigned char tbuf[18]; #ifndef VMS @@ -213,14 +150,16 @@ get_vms_time_string () char *pnt; time_t timeb; - time (&timeb); + + time (& timeb); pnt = ctime (&timeb); pnt[3] = 0; pnt[7] = 0; pnt[10] = 0; pnt[16] = 0; pnt[24] = 0; - sprintf (tbuf, "%2s-%3s-%s %s", pnt + 8, pnt + 4, pnt + 20, pnt + 11); + sprintf ((char *) tbuf, "%2s-%3s-%s %s", + pnt + 8, pnt + 4, pnt + 20, pnt + 11); #else #include struct @@ -240,32 +179,24 @@ get_vms_time_string () return tbuf; } - -/* write object header for bfd abfd */ +/* Write object header for bfd abfd. */ int -_bfd_vms_write_hdr (abfd, objtype) - bfd *abfd; - int objtype; +_bfd_vms_write_hdr (bfd *abfd, int objtype) { asymbol *symbol; unsigned int symnum; int had_case = 0; int had_file = 0; - #if VMS_DEBUG vms_debug (2, "vms_write_hdr (%p)\n", abfd); #endif _bfd_vms_output_alignment (abfd, 2); - /* MHD */ - - if (objtype == OBJ_S_C_HDR) - { - } - else + /* MHD. */ + if (objtype != OBJ_S_C_HDR) { _bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_MHD); _bfd_vms_output_short (abfd, EOBJ_S_C_STRLVL); @@ -276,12 +207,11 @@ _bfd_vms_write_hdr (abfd, objtype) if (bfd_get_filename (abfd) != 0) { - /* strip path and suffix information */ - + /* Strip path and suffix information. */ char *fname, *fout, *fptr; fptr = bfd_get_filename (abfd); - fname = (char *) alloca (strlen (fptr) + 1); + fname = alloca (strlen (fptr) + 1); strcpy (fname, fptr); fout = strrchr (fname, ']'); if (fout == 0) @@ -291,8 +221,7 @@ _bfd_vms_write_hdr (abfd, objtype) else fout = fname; - /* strip .obj suffix */ - + /* Strip .obj suffix. */ fptr = strrchr (fname, '.'); if ((fptr != 0) && (strcasecmp (fptr, ".OBJ") == 0)) @@ -301,8 +230,7 @@ _bfd_vms_write_hdr (abfd, objtype) fptr = fout; while (*fptr != 0) { - if (islower (*fptr)) - *fptr = toupper (*fptr); + *fptr = TOUPPER (*fptr); fptr++; if ((*fptr == ';') || ((fptr - fout) > 31)) @@ -313,19 +241,17 @@ _bfd_vms_write_hdr (abfd, objtype) else _bfd_vms_output_counted (abfd, "NONAME"); - _bfd_vms_output_counted (abfd, BFD_VERSION); + _bfd_vms_output_counted (abfd, BFD_VERSION_STRING); _bfd_vms_output_dump (abfd, get_vms_time_string (), 17); _bfd_vms_output_fill (abfd, 0, 17); _bfd_vms_output_flush (abfd); - /* LMN */ - + /* LMN. */ _bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_LNM); _bfd_vms_output_dump (abfd, (unsigned char *)"GAS proGIS", 10); _bfd_vms_output_flush (abfd); - /* SRC */ - + /* SRC. */ _bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_SRC); for (symnum = 0; symnum < abfd->symcount; symnum++) @@ -336,8 +262,8 @@ _bfd_vms_write_hdr (abfd, objtype) { if (strncmp ((char *)symbol->name, "name[6] - '0'; - PRIV(flag_show_after_trunc) = symbol->name[7] - '0'; + PRIV (flag_hash_long_names) = symbol->name[6] - '0'; + PRIV (flag_show_after_trunc) = symbol->name[7] - '0'; if (had_file) break; @@ -345,7 +271,8 @@ _bfd_vms_write_hdr (abfd, objtype) continue; } - _bfd_vms_output_dump (abfd, (unsigned char *)symbol->name, strlen (symbol->name)); + _bfd_vms_output_dump (abfd, (unsigned char *) symbol->name, + (int) strlen (symbol->name)); if (had_case) break; had_file = 1; @@ -357,14 +284,12 @@ _bfd_vms_write_hdr (abfd, objtype) _bfd_vms_output_flush (abfd); - /* TTL */ - + /* TTL. */ _bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_TTL); _bfd_vms_output_dump (abfd, (unsigned char *)"TTL", 3); _bfd_vms_output_flush (abfd); - /* CPR */ - + /* CPR. */ _bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_CPR); _bfd_vms_output_dump (abfd, (unsigned char *)"GNU BFD ported by Klaus Kämpf 1994-1996", @@ -374,15 +299,11 @@ _bfd_vms_write_hdr (abfd, objtype) return 0; } -/*-----------------------------------------------------------------------------*/ - /* Process EOM/EEOM record - return 0 on success, -1 on error */ + return 0 on success, -1 on error. */ int -_bfd_vms_slurp_eom (abfd, objtype) - bfd *abfd; - int objtype; +_bfd_vms_slurp_eom (bfd *abfd, int objtype) { unsigned char *vms_rec; @@ -390,52 +311,50 @@ _bfd_vms_slurp_eom (abfd, objtype) vms_debug(2, "EOM/EEOM\n"); #endif - vms_rec = PRIV(vms_rec); + vms_rec = PRIV (vms_rec); - if ((objtype == OBJ_S_C_EOM) + if ((objtype == OBJ_S_C_EOM) || (objtype == OBJ_S_C_EOMW)) { } else { - PRIV(eom_data).eom_l_total_lps = bfd_getl32 (vms_rec + 4); - PRIV(eom_data).eom_b_comcod = *(vms_rec + 8); - if (PRIV(eom_data).eom_b_comcod > 1) + PRIV (eom_data).eom_l_total_lps = bfd_getl32 (vms_rec + 4); + PRIV (eom_data).eom_b_comcod = *(vms_rec + 8); + + if (PRIV (eom_data).eom_b_comcod > 1) { (*_bfd_error_handler) (_("Object module NOT error-free !\n")); bfd_set_error (bfd_error_bad_value); return -1; } - PRIV(eom_data).eom_has_transfer = false; - if (PRIV(rec_size) > 10) + PRIV (eom_data).eom_has_transfer = FALSE; + if (PRIV (rec_size) > 10) { - PRIV(eom_data).eom_has_transfer = true; - PRIV(eom_data).eom_b_tfrflg = *(vms_rec + 9); - PRIV(eom_data).eom_l_psindx = bfd_getl32 (vms_rec + 12); - PRIV(eom_data).eom_l_tfradr = bfd_getl32 (vms_rec + 16); + PRIV (eom_data).eom_has_transfer = TRUE; + PRIV (eom_data).eom_b_tfrflg = *(vms_rec + 9); + PRIV (eom_data).eom_l_psindx = bfd_getl32 (vms_rec + 12); + PRIV (eom_data).eom_l_tfradr = bfd_getl32 (vms_rec + 16); - abfd->start_address = PRIV(eom_data).eom_l_tfradr; + abfd->start_address = PRIV (eom_data).eom_l_tfradr; } } return 0; } - -/* Write eom record for bfd abfd */ +/* Write eom record for bfd abfd. */ int -_bfd_vms_write_eom (abfd, objtype) - bfd *abfd; - int objtype; +_bfd_vms_write_eom (bfd *abfd, int objtype) { #if VMS_DEBUG vms_debug (2, "vms_write_eom (%p, %d)\n", abfd, objtype); #endif _bfd_vms_output_begin (abfd, objtype, -1); - _bfd_vms_output_long (abfd, (unsigned long)(PRIV(vms_linkage_index) >> 1)); - _bfd_vms_output_byte (abfd, 0); /* completion code */ - _bfd_vms_output_byte (abfd, 0); /* fill byte */ + _bfd_vms_output_long (abfd, (unsigned long) (PRIV (vms_linkage_index) >> 1)); + _bfd_vms_output_byte (abfd, 0); /* Completion code. */ + _bfd_vms_output_byte (abfd, 0); /* Fill byte. */ if (bfd_get_start_address (abfd) != (bfd_vma)-1) { @@ -448,7 +367,7 @@ _bfd_vms_write_eom (abfd, objtype) return -1; } _bfd_vms_output_short (abfd, 0); - _bfd_vms_output_long (abfd, (unsigned long)(section->index)); + _bfd_vms_output_long (abfd, (unsigned long) (section->index)); _bfd_vms_output_long (abfd, (unsigned long) bfd_get_start_address (abfd)); _bfd_vms_output_long (abfd, 0);