From ddfb684a2fcc454513224bbcfacdc6e708f1b0b2 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Fri, 16 Apr 2010 14:23:41 +0000 Subject: [PATCH] 2010-04-16 Tristan Gingold * vms-alpha.c (_bfd_vms_slurp_eihd): Fix typo. (_bfd_vms_get_object_record): Always assume there is a pad byte for alignment. * vms-lib.c: Add a few comments. --- bfd/ChangeLog | 7 +++++++ bfd/vms-alpha.c | 17 ++++------------- bfd/vms-lib.c | 4 ++++ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 56f977b8294..195590db764 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2010-04-16 Tristan Gingold + + * vms-alpha.c (_bfd_vms_slurp_eihd): Fix typo. + (_bfd_vms_get_object_record): Always assume there is a pad byte + for alignment. + * vms-lib.c: Add a few comments. + 2010-04-15 Matthew Gretton-Dann * elf32-arm.c (elf32_arm_merge_eabi_attributes): Support additions to diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c index e213f4ee844..65dafa19dad 100644 --- a/bfd/vms-alpha.c +++ b/bfd/vms-alpha.c @@ -492,7 +492,7 @@ _bfd_vms_slurp_eihd (bfd *abfd, unsigned int *eisd_offset, size, imgtype, (unsigned long)symvva, *eisd_offset, *eihs_offset)); - return FALSE; + return TRUE; } /* Read & process EISD record. @@ -753,15 +753,12 @@ maybe_adjust_record_pointer_for_object (bfd *abfd) static int _bfd_vms_get_object_record (bfd *abfd) { - unsigned int test_len; + unsigned int test_len = 6; int type; - int off = 0; vms_debug2 ((8, "_bfd_vms_get_obj_record\n")); - test_len = 6; - - /* Skip odd alignment byte. */ + /* Skip alignment byte if the current position is odd. */ if (bfd_tell (abfd) & 1) { if (bfd_bread (PRIV (recrd.buf), 1, abfd) != 1) @@ -769,16 +766,10 @@ _bfd_vms_get_object_record (bfd *abfd) bfd_set_error (bfd_error_file_truncated); return -1; } - /* Alignment byte may be present or not. This is not easy to - detect but all object record types are not 0 (on Alpha VMS). - We also hope that pad byte is 0. */ - if (PRIV (recrd.buf)[0]) - off = 1; } /* Read the record header */ - if (bfd_bread (PRIV (recrd.buf) + off, test_len - off, abfd) - != test_len - off) + if (bfd_bread (PRIV (recrd.buf), test_len, abfd) != test_len) { bfd_set_error (bfd_error_file_truncated); return -1; diff --git a/bfd/vms-lib.c b/bfd/vms-lib.c index 4f7da81d792..d05fab70818 100644 --- a/bfd/vms-lib.c +++ b/bfd/vms-lib.c @@ -557,6 +557,7 @@ vms_lib_bread_raw (struct bfd *abfd, void *buf, file_ptr nbytes) if (!vms_lib_read_block (abfd)) return -1; + /* Do not read past the data block, do not read more than requested. */ l = DATA__LENGTH - vec->blk_off; if (l > nbytes) l = nbytes; @@ -564,11 +565,13 @@ vms_lib_bread_raw (struct bfd *abfd, void *buf, file_ptr nbytes) return 0; if (buf != NULL) { + /* Really read into BUF. */ if (bfd_bread (buf, l, abfd->my_archive) != l) return -1; } else { + /* Make as if we are reading. */ if (bfd_seek (abfd->my_archive, l, SEEK_CUR) != 0) return -1; } @@ -818,6 +821,7 @@ vms_lib_bread (struct bfd *abfd, void *buf, file_ptr nbytes) if (vec->rec_rem == 0) { + /* End of record reached. */ if (bfd_libdata (abfd->my_archive)->kind == vms_lib_txt) { if ((vec->rec_len & 1) == 1 -- 2.30.2