summaryrefslogtreecommitdiffstats
path: root/include/coff
diff options
context:
space:
mode:
authorTom Rix <trix@redhat.com>2001-12-31 04:06:14 +0000
committerTom Rix <trix@redhat.com>2001-12-31 04:06:14 +0000
commit2fff1126bd8bee15125dd064e3dee8dfe8d84b22 (patch)
tree9efda286f9cf71c71bcc53b06b29ef6347d39b6c /include/coff
parent8dd9c393f8071daa89d0fa04e185500468e7a4f4 (diff)
downloadppe42-binutils-2fff1126bd8bee15125dd064e3dee8dfe8d84b22.tar.gz
ppe42-binutils-2fff1126bd8bee15125dd064e3dee8dfe8d84b22.zip
Fix for xcoff <bigaf> big archive support.
Diffstat (limited to 'include/coff')
-rw-r--r--include/coff/ChangeLog8
-rw-r--r--include/coff/xcoff.h65
2 files changed, 47 insertions, 26 deletions
diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog
index 6e14207e18..b8882bc39f 100644
--- a/include/coff/ChangeLog
+++ b/include/coff/ChangeLog
@@ -1,3 +1,11 @@
+2001-12-24 Tom Rix <trix@redhat.com>
+
+ * xcoff.h (xcoff_big_format_p): Make <bigaf> the default archive
+ format.
+ (XCOFFARMAG_ELEMENT_SIZE, XCOFFARMAGBIG_ELEMENT_SIZE): Define for
+ archive header ascii elements.
+
+
2001-12-17 Tom Rix <trix@redhat.com>
* xcoff.h : Add .except and .typchk section string and styp flags.
diff --git a/include/coff/xcoff.h b/include/coff/xcoff.h
index e9dbaf212a..98aa047b3c 100644
--- a/include/coff/xcoff.h
+++ b/include/coff/xcoff.h
@@ -459,6 +459,10 @@ struct __rtinit_descriptor
#define XCOFFARMAGBIG "<bigaf>\012"
#define SXCOFFARMAG 8
+/* The size of the ascii archive elements */
+#define XCOFFARMAG_ELEMENT_SIZE 12
+#define XCOFFARMAGBIG_ELEMENT_SIZE 20
+
/* This terminates an XCOFF archive member name. */
#define XCOFFARFMAG "`\012"
@@ -472,23 +476,23 @@ struct xcoff_ar_file_hdr
char magic[SXCOFFARMAG];
/* Offset of the member table (decimal ASCII string). */
- char memoff[12];
+ char memoff[XCOFFARMAG_ELEMENT_SIZE];
/* Offset of the global symbol table (decimal ASCII string). */
- char symoff[12];
+ char symoff[XCOFFARMAG_ELEMENT_SIZE];
/* Offset of the first member in the archive (decimal ASCII string). */
- char firstmemoff[12];
+ char firstmemoff[XCOFFARMAG_ELEMENT_SIZE];
/* Offset of the last member in the archive (decimal ASCII string). */
- char lastmemoff[12];
+ char lastmemoff[XCOFFARMAG_ELEMENT_SIZE];
/* Offset of the first member on the free list (decimal ASCII
string). */
- char freeoff[12];
+ char freeoff[XCOFFARMAG_ELEMENT_SIZE];
};
-#define SIZEOF_AR_FILE_HDR (5 * 12 + SXCOFFARMAG)
+#define SIZEOF_AR_FILE_HDR (SXCOFFARMAG + 5 * XCOFFARMAG_ELEMENT_SIZE)
/* This is the equivalent data structure for the big archive format. */
@@ -498,42 +502,41 @@ struct xcoff_ar_file_hdr_big
char magic[SXCOFFARMAG];
/* Offset of the member table (decimal ASCII string). */
- char memoff[20];
+ char memoff[XCOFFARMAGBIG_ELEMENT_SIZE];
/* Offset of the global symbol table for 32-bit objects (decimal ASCII
string). */
- char symoff[20];
+ char symoff[XCOFFARMAGBIG_ELEMENT_SIZE];
/* Offset of the global symbol table for 64-bit objects (decimal ASCII
string). */
- char symoff64[20];
+ char symoff64[XCOFFARMAGBIG_ELEMENT_SIZE];
/* Offset of the first member in the archive (decimal ASCII string). */
- char firstmemoff[20];
+ char firstmemoff[XCOFFARMAGBIG_ELEMENT_SIZE];
/* Offset of the last member in the archive (decimal ASCII string). */
- char lastmemoff[20];
+ char lastmemoff[XCOFFARMAGBIG_ELEMENT_SIZE];
/* Offset of the first member on the free list (decimal ASCII
string). */
- char freeoff[20];
+ char freeoff[XCOFFARMAGBIG_ELEMENT_SIZE];
};
-#define SIZEOF_AR_FILE_HDR_BIG (6 * 20 + SXCOFFARMAG)
-
+#define SIZEOF_AR_FILE_HDR_BIG (SXCOFFARMAG + 6 * XCOFFARMAGBIG_ELEMENT_SIZE)
/* Each XCOFF archive member starts with this (printable) structure. */
struct xcoff_ar_hdr
{
/* File size not including the header (decimal ASCII string). */
- char size[12];
+ char size[XCOFFARMAG_ELEMENT_SIZE];
/* File offset of next archive member (decimal ASCII string). */
- char nextoff[12];
+ char nextoff[XCOFFARMAG_ELEMENT_SIZE];
/* File offset of previous archive member (decimal ASCII string). */
- char prevoff[12];
+ char prevoff[XCOFFARMAG_ELEMENT_SIZE];
/* File mtime (decimal ASCII string). */
char date[12];
@@ -558,20 +561,20 @@ struct xcoff_ar_hdr
bytes is given in the size field. */
};
-#define SIZEOF_AR_HDR (7 * 12 + 4)
+#define SIZEOF_AR_HDR (3 * XCOFFARMAG_ELEMENT_SIZE + 4 * 12 + 4)
/* The equivalent for the big archive format. */
struct xcoff_ar_hdr_big
{
/* File size not including the header (decimal ASCII string). */
- char size[20];
+ char size[XCOFFARMAGBIG_ELEMENT_SIZE];
/* File offset of next archive member (decimal ASCII string). */
- char nextoff[20];
+ char nextoff[XCOFFARMAGBIG_ELEMENT_SIZE];
/* File offset of previous archive member (decimal ASCII string). */
- char prevoff[20];
+ char prevoff[XCOFFARMAGBIG_ELEMENT_SIZE];
/* File mtime (decimal ASCII string). */
char date[12];
@@ -596,15 +599,25 @@ struct xcoff_ar_hdr_big
bytes is given in the size field. */
};
-#define SIZEOF_AR_HDR_BIG (3 * 20 + 4 * 12 + 4)
+#define SIZEOF_AR_HDR_BIG (3 * XCOFFARMAGBIG_ELEMENT_SIZE + 4 * 12 + 4)
/* We often have to distinguish between the old and big file format.
Make it a bit cleaner. We can use `xcoff_ardata' here because the
- `hdr' member has the same size and position in both formats. */
+ `hdr' member has the same size and position in both formats.
+ <bigaf> is the default format, return true even when xcoff_ardata is
+ NULL. */
+#define xcoff_big_format_p(abfd) \
+ ((NULL != bfd_ardata (abfd) && NULL == xcoff_ardata (abfd)) || \
+ ((NULL != bfd_ardata (abfd)) && \
+ (NULL != xcoff_ardata (abfd)) && \
+ (xcoff_ardata (abfd)->magic[1] == 'b')))
+
+/* For testing old format * /
+#undef xcoff_big_format_p
#define xcoff_big_format_p(abfd) \
- ((NULL != bfd_ardata(abfd)) && \
- (NULL != xcoff_ardata(abfd)) && \
- (xcoff_ardata (abfd)->magic[1] == 'b'))
+ (((NULL != bfd_ardata (abfd)) && \
+ (NULL != xcoff_ardata (abfd)) && \
+ (xcoff_ardata (abfd)->magic[1] == 'b'))) / **/
/* We store a copy of the xcoff_ar_file_hdr in the tdata field of the
artdata structure. Similar for the big archive. */
OpenPOWER on IntegriCloud