On Fri, Aug 28, 2015 at 12:00:41PM +0200, Mark Kettenis wrote:
> As Theo and I noticed yesterday:
> 
>   $ readelf -a /usr/lib/libc.a
>   readelf: Error: /usr/lib/libc.a: invalid archive string table offset 0
> 
> Turns out that on mips64 binutils creates IRIX-style "64-bit" archives
> which allegedly can be larger than 4GB.  The difference is apparently
> in the archive map where offsets are 64-bit instead of 32-bit.  Since
> readelf simply skips over the map and reads the archive members
> sequentially all we have to do is recognize "/SYM64/" as a valid
> header and skip over it.
> 
> ok?

ok visa@

> Index: readelf.c
> ===================================================================
> RCS file: /cvs/src/gnu/usr.bin/binutils-2.17/binutils/readelf.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 readelf.c
> --- readelf.c 25 May 2015 14:56:27 -0000      1.6
> +++ readelf.c 28 Aug 2015 09:55:35 -0000
> @@ -9121,7 +9121,8 @@ process_archive (char *file_name, FILE *
>        return 1;
>      }
>  
> -  if (memcmp (arhdr.ar_name, "/               ", 16) == 0)
> +  if (memcmp (arhdr.ar_name, "/               ", 16) == 0
> +      || memcmp (arhdr.ar_name, "/SYM64/         ", 16) == 0)
>      {
>        /* This is the archive symbol table.  Skip it.
>        FIXME: We should have an option to dump it.  */
> 

Reply via email to