|  | /* ranlib.h -- archive library index member definition for GNU. | 
|  | Copyright (C) 1990-2022 Free Software Foundation, Inc. | 
|  |  | 
|  | 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 3 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. | 
|  |  | 
|  | 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.  */ | 
|  |  | 
|  | /* The Symdef member of an archive contains two things: | 
|  | a table that maps symbol-string offsets to file offsets, | 
|  | and a symbol-string table.  All the symbol names are | 
|  | run together (each with trailing null) in the symbol-string | 
|  | table.  There is a single longword bytecount on the front | 
|  | of each of these tables.  Thus if we have two symbols, | 
|  | "foo" and "_bar", that are in archive members at offsets | 
|  | 200 and 900, it would look like this: | 
|  | 16		; byte count of index table | 
|  | 0		; offset of "foo" in string table | 
|  | 200		; offset of foo-module in file | 
|  | 4		; offset of "bar" in string table | 
|  | 900		; offset of bar-module in file | 
|  | 9		; byte count of string table | 
|  | "foo\0_bar\0"	; string table  */ | 
|  |  | 
|  | #define	RANLIBMAG	"__.SYMDEF"	/* Archive file name containing index */ | 
|  | #define	RANLIBSKEW	3		/* Creation time offset */ | 
|  |  | 
|  | /* Format of __.SYMDEF: | 
|  | First, a longword containing the size of the 'symdef' data that follows. | 
|  | Second, zero or more 'symdef' structures. | 
|  | Third, a longword containing the length of symbol name strings. | 
|  | Fourth, zero or more symbol name strings (each followed by a null).  */ | 
|  |  | 
|  | struct symdef | 
|  | { | 
|  | union | 
|  | { | 
|  | unsigned long string_offset;	/* In the file */ | 
|  | char *name;			/* In memory, sometimes */ | 
|  | } s; | 
|  | /* this points to the front of the file header (AKA member header -- | 
|  | a struct ar_hdr), not to the front of the file or into the file). | 
|  | in other words it only tells you which file to read */ | 
|  | unsigned long file_offset; | 
|  | }; | 
|  |  | 
|  | /* Compatability with BSD code */ | 
|  |  | 
|  | #define	ranlib	symdef | 
|  | #define	ran_un	s | 
|  | #define	ran_strx string_offset | 
|  | #define	ran_name name | 
|  | #define	ran_off	file_offset |