1
/* elfcomm.c -- common code for ELF format file.
2
Copyright 2010-2013 Free Software Foundation, Inc.
4
Originally developed by Eric Youngdale <eric@andante.jic.com>
5
Modifications by Nick Clifton <nickc@redhat.com>
7
This file is part of GNU Binutils.
9
This program is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 3 of the License, or
12
(at your option) any later version.
14
This program is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
GNU General Public License for more details.
19
You should have received a copy of the GNU General Public License
20
along with this program; if not, write to the Free Software
21
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
25
#include "libiberty.h"
26
#include "filenames.h"
34
error (const char *message, ...)
38
/* Try to keep error messages in sync with the program's normal output. */
41
va_start (args, message);
42
fprintf (stderr, _("%s: Error: "), program_name);
43
vfprintf (stderr, message, args);
48
warn (const char *message, ...)
52
/* Try to keep warning messages in sync with the program's normal output. */
55
va_start (args, message);
56
fprintf (stderr, _("%s: Warning: "), program_name);
57
vfprintf (stderr, message, args);
61
void (*byte_put) (unsigned char *, elf_vma, int);
64
byte_put_little_endian (unsigned char * field, elf_vma value, int size)
69
field[7] = (((value >> 24) >> 24) >> 8) & 0xff;
70
field[6] = ((value >> 24) >> 24) & 0xff;
71
field[5] = ((value >> 24) >> 16) & 0xff;
72
field[4] = ((value >> 24) >> 8) & 0xff;
75
field[3] = (value >> 24) & 0xff;
78
field[2] = (value >> 16) & 0xff;
81
field[1] = (value >> 8) & 0xff;
84
field[0] = value & 0xff;
88
error (_("Unhandled data length: %d\n"), size);
94
byte_put_big_endian (unsigned char * field, elf_vma value, int size)
99
field[7] = value & 0xff;
100
field[6] = (value >> 8) & 0xff;
101
field[5] = (value >> 16) & 0xff;
102
field[4] = (value >> 24) & 0xff;
107
field[3] = value & 0xff;
111
field[2] = value & 0xff;
115
field[1] = value & 0xff;
119
field[0] = value & 0xff;
123
error (_("Unhandled data length: %d\n"), size);
128
elf_vma (*byte_get) (unsigned char *, int);
131
byte_get_little_endian (unsigned char *field, int size)
139
return ((unsigned int) (field[0]))
140
| (((unsigned int) (field[1])) << 8);
143
return ((unsigned long) (field[0]))
144
| (((unsigned long) (field[1])) << 8)
145
| (((unsigned long) (field[2])) << 16);
148
return ((unsigned long) (field[0]))
149
| (((unsigned long) (field[1])) << 8)
150
| (((unsigned long) (field[2])) << 16)
151
| (((unsigned long) (field[3])) << 24);
154
if (sizeof (elf_vma) == 8)
155
return ((elf_vma) (field[0]))
156
| (((elf_vma) (field[1])) << 8)
157
| (((elf_vma) (field[2])) << 16)
158
| (((elf_vma) (field[3])) << 24)
159
| (((elf_vma) (field[4])) << 32);
160
else if (sizeof (elf_vma) == 4)
161
/* We want to extract data from an 8 byte wide field and
162
place it into a 4 byte wide field. Since this is a little
163
endian source we can just use the 4 byte extraction code. */
164
return ((unsigned long) (field[0]))
165
| (((unsigned long) (field[1])) << 8)
166
| (((unsigned long) (field[2])) << 16)
167
| (((unsigned long) (field[3])) << 24);
170
if (sizeof (elf_vma) == 8)
171
return ((elf_vma) (field[0]))
172
| (((elf_vma) (field[1])) << 8)
173
| (((elf_vma) (field[2])) << 16)
174
| (((elf_vma) (field[3])) << 24)
175
| (((elf_vma) (field[4])) << 32)
176
| (((elf_vma) (field[5])) << 40);
177
else if (sizeof (elf_vma) == 4)
178
/* We want to extract data from an 8 byte wide field and
179
place it into a 4 byte wide field. Since this is a little
180
endian source we can just use the 4 byte extraction code. */
181
return ((unsigned long) (field[0]))
182
| (((unsigned long) (field[1])) << 8)
183
| (((unsigned long) (field[2])) << 16)
184
| (((unsigned long) (field[3])) << 24);
187
if (sizeof (elf_vma) == 8)
188
return ((elf_vma) (field[0]))
189
| (((elf_vma) (field[1])) << 8)
190
| (((elf_vma) (field[2])) << 16)
191
| (((elf_vma) (field[3])) << 24)
192
| (((elf_vma) (field[4])) << 32)
193
| (((elf_vma) (field[5])) << 40)
194
| (((elf_vma) (field[6])) << 48);
195
else if (sizeof (elf_vma) == 4)
196
/* We want to extract data from an 8 byte wide field and
197
place it into a 4 byte wide field. Since this is a little
198
endian source we can just use the 4 byte extraction code. */
199
return ((unsigned long) (field[0]))
200
| (((unsigned long) (field[1])) << 8)
201
| (((unsigned long) (field[2])) << 16)
202
| (((unsigned long) (field[3])) << 24);
205
if (sizeof (elf_vma) == 8)
206
return ((elf_vma) (field[0]))
207
| (((elf_vma) (field[1])) << 8)
208
| (((elf_vma) (field[2])) << 16)
209
| (((elf_vma) (field[3])) << 24)
210
| (((elf_vma) (field[4])) << 32)
211
| (((elf_vma) (field[5])) << 40)
212
| (((elf_vma) (field[6])) << 48)
213
| (((elf_vma) (field[7])) << 56);
214
else if (sizeof (elf_vma) == 4)
215
/* We want to extract data from an 8 byte wide field and
216
place it into a 4 byte wide field. Since this is a little
217
endian source we can just use the 4 byte extraction code. */
218
return ((unsigned long) (field[0]))
219
| (((unsigned long) (field[1])) << 8)
220
| (((unsigned long) (field[2])) << 16)
221
| (((unsigned long) (field[3])) << 24);
224
error (_("Unhandled data length: %d\n"), size);
230
byte_get_big_endian (unsigned char *field, int size)
238
return ((unsigned int) (field[1])) | (((int) (field[0])) << 8);
241
return ((unsigned long) (field[2]))
242
| (((unsigned long) (field[1])) << 8)
243
| (((unsigned long) (field[0])) << 16);
246
return ((unsigned long) (field[3]))
247
| (((unsigned long) (field[2])) << 8)
248
| (((unsigned long) (field[1])) << 16)
249
| (((unsigned long) (field[0])) << 24);
252
if (sizeof (elf_vma) == 8)
253
return ((elf_vma) (field[4]))
254
| (((elf_vma) (field[3])) << 8)
255
| (((elf_vma) (field[2])) << 16)
256
| (((elf_vma) (field[1])) << 24)
257
| (((elf_vma) (field[0])) << 32);
258
else if (sizeof (elf_vma) == 4)
260
/* Although we are extracting data from an 8 byte wide field,
261
we are returning only 4 bytes of data. */
263
return ((unsigned long) (field[3]))
264
| (((unsigned long) (field[2])) << 8)
265
| (((unsigned long) (field[1])) << 16)
266
| (((unsigned long) (field[0])) << 24);
270
if (sizeof (elf_vma) == 8)
271
return ((elf_vma) (field[5]))
272
| (((elf_vma) (field[4])) << 8)
273
| (((elf_vma) (field[3])) << 16)
274
| (((elf_vma) (field[2])) << 24)
275
| (((elf_vma) (field[1])) << 32)
276
| (((elf_vma) (field[0])) << 40);
277
else if (sizeof (elf_vma) == 4)
279
/* Although we are extracting data from an 8 byte wide field,
280
we are returning only 4 bytes of data. */
282
return ((unsigned long) (field[3]))
283
| (((unsigned long) (field[2])) << 8)
284
| (((unsigned long) (field[1])) << 16)
285
| (((unsigned long) (field[0])) << 24);
289
if (sizeof (elf_vma) == 8)
290
return ((elf_vma) (field[6]))
291
| (((elf_vma) (field[5])) << 8)
292
| (((elf_vma) (field[4])) << 16)
293
| (((elf_vma) (field[3])) << 24)
294
| (((elf_vma) (field[2])) << 32)
295
| (((elf_vma) (field[1])) << 40)
296
| (((elf_vma) (field[0])) << 48);
297
else if (sizeof (elf_vma) == 4)
299
/* Although we are extracting data from an 8 byte wide field,
300
we are returning only 4 bytes of data. */
302
return ((unsigned long) (field[3]))
303
| (((unsigned long) (field[2])) << 8)
304
| (((unsigned long) (field[1])) << 16)
305
| (((unsigned long) (field[0])) << 24);
309
if (sizeof (elf_vma) == 8)
310
return ((elf_vma) (field[7]))
311
| (((elf_vma) (field[6])) << 8)
312
| (((elf_vma) (field[5])) << 16)
313
| (((elf_vma) (field[4])) << 24)
314
| (((elf_vma) (field[3])) << 32)
315
| (((elf_vma) (field[2])) << 40)
316
| (((elf_vma) (field[1])) << 48)
317
| (((elf_vma) (field[0])) << 56);
318
else if (sizeof (elf_vma) == 4)
320
/* Although we are extracting data from an 8 byte wide field,
321
we are returning only 4 bytes of data. */
323
return ((unsigned long) (field[3]))
324
| (((unsigned long) (field[2])) << 8)
325
| (((unsigned long) (field[1])) << 16)
326
| (((unsigned long) (field[0])) << 24);
330
error (_("Unhandled data length: %d\n"), size);
336
byte_get_signed (unsigned char *field, int size)
338
elf_vma x = byte_get (field, size);
343
return (x ^ 0x80) - 0x80;
345
return (x ^ 0x8000) - 0x8000;
347
return (x ^ 0x800000) - 0x800000;
349
return (x ^ 0x80000000) - 0x80000000;
354
/* Reads of 5-, 6-, and 7-byte numbers are the result of
355
trying to read past the end of a buffer, and will therefore
356
not have meaningful values, so we don't try to deal with
357
the sign in these cases. */
364
/* Return the high-order 32-bits and the low-order 32-bits
365
of an 8-byte value separately. */
368
byte_get_64 (unsigned char *field, elf_vma *high, elf_vma *low)
370
if (byte_get == byte_get_big_endian)
372
*high = byte_get_big_endian (field, 4);
373
*low = byte_get_big_endian (field + 4, 4);
377
*high = byte_get_little_endian (field + 4, 4);
378
*low = byte_get_little_endian (field, 4);
383
/* Return the path name for a proxy entry in a thin archive, adjusted
384
relative to the path name of the thin archive itself if necessary.
385
Always returns a pointer to malloc'ed memory. */
388
adjust_relative_path (const char *file_name, const char *name,
391
char * member_file_name;
392
const char * base_name = lbasename (file_name);
394
/* This is a proxy entry for a thin archive member.
395
If the extended name table contains an absolute path
396
name, or if the archive is in the current directory,
397
use the path name as given. Otherwise, we need to
398
find the member relative to the directory where the
399
archive is located. */
400
if (IS_ABSOLUTE_PATH (name) || base_name == file_name)
402
member_file_name = (char *) malloc (name_len + 1);
403
if (member_file_name == NULL)
405
error (_("Out of memory\n"));
408
memcpy (member_file_name, name, name_len);
409
member_file_name[name_len] = '\0';
413
/* Concatenate the path components of the archive file name
414
to the relative path name from the extended name table. */
415
size_t prefix_len = base_name - file_name;
416
member_file_name = (char *) malloc (prefix_len + name_len + 1);
417
if (member_file_name == NULL)
419
error (_("Out of memory\n"));
422
memcpy (member_file_name, file_name, prefix_len);
423
memcpy (member_file_name + prefix_len, name, name_len);
424
member_file_name[prefix_len + name_len] = '\0';
426
return member_file_name;
429
/* Processes the archive index table and symbol table in ARCH.
430
Entries in the index table are SIZEOF_AR_INDEX bytes long.
431
Fills in ARCH->next_arhdr_offset and ARCH->arhdr.
432
If READ_SYMBOLS is true then fills in ARCH->index_num, ARCH->index_array,
433
ARCH->sym_size and ARCH->sym_table.
434
It is the caller's responsibility to free ARCH->index_array and
436
Returns TRUE upon success, FALSE otherwise.
437
If failure occurs an error message is printed. */
440
process_archive_index_and_symbols (struct archive_info * arch,
441
unsigned int sizeof_ar_index,
442
bfd_boolean read_symbols)
447
size = strtoul (arch->arhdr.ar_size, NULL, 10);
448
size = size + (size & 1);
450
arch->next_arhdr_offset += sizeof arch->arhdr + size;
454
if (fseek (arch->file, size, SEEK_CUR) != 0)
456
error (_("%s: failed to skip archive symbol table\n"),
464
/* A buffer used to hold numbers read in from an archive index.
465
These are always SIZEOF_AR_INDEX bytes long and stored in
466
big-endian format. */
467
unsigned char integer_buffer[sizeof arch->index_num];
468
unsigned char * index_buffer;
470
assert (sizeof_ar_index <= sizeof integer_buffer);
472
/* Check the size of the archive index. */
473
if (size < sizeof_ar_index)
475
error (_("%s: the archive index is empty\n"), arch->file_name);
479
/* Read the number of entries in the archive index. */
480
got = fread (integer_buffer, 1, sizeof_ar_index, arch->file);
481
if (got != sizeof_ar_index)
483
error (_("%s: failed to read archive index\n"), arch->file_name);
487
arch->index_num = byte_get_big_endian (integer_buffer, sizeof_ar_index);
488
size -= sizeof_ar_index;
490
if (size < arch->index_num * sizeof_ar_index)
492
error (_("%s: the archive index is supposed to have %ld entries of %d bytes, but the size is only %ld\n"),
493
arch->file_name, (long) arch->index_num, sizeof_ar_index, size);
497
/* Read in the archive index. */
498
index_buffer = (unsigned char *)
499
malloc (arch->index_num * sizeof_ar_index);
500
if (index_buffer == NULL)
502
error (_("Out of memory whilst trying to read archive symbol index\n"));
506
got = fread (index_buffer, sizeof_ar_index, arch->index_num, arch->file);
507
if (got != arch->index_num)
510
error (_("%s: failed to read archive index\n"), arch->file_name);
514
size -= arch->index_num * sizeof_ar_index;
516
/* Convert the index numbers into the host's numeric format. */
517
arch->index_array = (elf_vma *)
518
malloc (arch->index_num * sizeof (* arch->index_array));
519
if (arch->index_array == NULL)
522
error (_("Out of memory whilst trying to convert the archive symbol index\n"));
526
for (i = 0; i < arch->index_num; i++)
527
arch->index_array[i] =
528
byte_get_big_endian ((unsigned char *) (index_buffer + (i * sizeof_ar_index)),
532
/* The remaining space in the header is taken up by the symbol table. */
535
error (_("%s: the archive has an index but no symbols\n"),
540
arch->sym_table = (char *) malloc (size);
541
if (arch->sym_table == NULL)
543
error (_("Out of memory whilst trying to read archive index symbol table\n"));
547
arch->sym_size = size;
548
got = fread (arch->sym_table, 1, size, arch->file);
551
error (_("%s: failed to read archive index symbol table\n"),
557
/* Read the next archive header. */
558
got = fread (&arch->arhdr, 1, sizeof arch->arhdr, arch->file);
559
if (got != sizeof arch->arhdr && got != 0)
561
error (_("%s: failed to read archive header following archive index\n"),
569
/* Read the symbol table and long-name table from an archive. */
572
setup_archive (struct archive_info *arch, const char *file_name,
573
FILE *file, bfd_boolean is_thin_archive,
574
bfd_boolean read_symbols)
578
arch->file_name = strdup (file_name);
581
arch->index_array = NULL;
582
arch->sym_table = NULL;
584
arch->longnames = NULL;
585
arch->longnames_size = 0;
586
arch->nested_member_origin = 0;
587
arch->is_thin_archive = is_thin_archive;
588
arch->uses_64bit_indicies = FALSE;
589
arch->next_arhdr_offset = SARMAG;
591
/* Read the first archive member header. */
592
if (fseek (file, SARMAG, SEEK_SET) != 0)
594
error (_("%s: failed to seek to first archive header\n"), file_name);
597
got = fread (&arch->arhdr, 1, sizeof arch->arhdr, file);
598
if (got != sizeof arch->arhdr)
603
error (_("%s: failed to read archive header\n"), file_name);
607
/* See if this is the archive symbol table. */
608
if (const_strneq (arch->arhdr.ar_name, "/ "))
610
if (! process_archive_index_and_symbols (arch, 4, read_symbols))
613
else if (const_strneq (arch->arhdr.ar_name, "/SYM64/ "))
615
arch->uses_64bit_indicies = TRUE;
616
if (! process_archive_index_and_symbols (arch, 8, read_symbols))
619
else if (read_symbols)
620
printf (_("%s has no archive index\n"), file_name);
622
if (const_strneq (arch->arhdr.ar_name, "// "))
624
/* This is the archive string table holding long member names. */
625
arch->longnames_size = strtoul (arch->arhdr.ar_size, NULL, 10);
626
arch->next_arhdr_offset += sizeof arch->arhdr + arch->longnames_size;
628
arch->longnames = (char *) malloc (arch->longnames_size);
629
if (arch->longnames == NULL)
631
error (_("Out of memory reading long symbol names in archive\n"));
635
if (fread (arch->longnames, arch->longnames_size, 1, file) != 1)
637
free (arch->longnames);
638
arch->longnames = NULL;
639
error (_("%s: failed to read long symbol name string table\n"),
644
if ((arch->longnames_size & 1) != 0)
651
/* Open and setup a nested archive, if not already open. */
654
setup_nested_archive (struct archive_info *nested_arch,
655
const char *member_file_name)
659
/* Have we already setup this archive? */
660
if (nested_arch->file_name != NULL
661
&& streq (nested_arch->file_name, member_file_name))
664
/* Close previous file and discard cached information. */
665
if (nested_arch->file != NULL)
666
fclose (nested_arch->file);
667
release_archive (nested_arch);
669
member_file = fopen (member_file_name, "rb");
670
if (member_file == NULL)
672
return setup_archive (nested_arch, member_file_name, member_file,
676
/* Release the memory used for the archive information. */
679
release_archive (struct archive_info * arch)
681
if (arch->file_name != NULL)
682
free (arch->file_name);
683
if (arch->index_array != NULL)
684
free (arch->index_array);
685
if (arch->sym_table != NULL)
686
free (arch->sym_table);
687
if (arch->longnames != NULL)
688
free (arch->longnames);
691
/* Get the name of an archive member from the current archive header.
692
For simple names, this will modify the ar_name field of the current
693
archive header. For long names, it will return a pointer to the
694
longnames table. For nested archives, it will open the nested archive
695
and get the name recursively. NESTED_ARCH is a single-entry cache so
696
we don't keep rereading the same information from a nested archive. */
699
get_archive_member_name (struct archive_info *arch,
700
struct archive_info *nested_arch)
704
if (arch->arhdr.ar_name[0] == '/')
706
/* We have a long name. */
708
char *member_file_name;
711
if (arch->longnames == NULL || arch->longnames_size == 0)
713
error (_("Archive member uses long names, but no longname table found\n"));
717
arch->nested_member_origin = 0;
718
k = j = strtoul (arch->arhdr.ar_name + 1, &endp, 10);
719
if (arch->is_thin_archive && endp != NULL && * endp == ':')
720
arch->nested_member_origin = strtoul (endp + 1, NULL, 10);
722
while ((j < arch->longnames_size)
723
&& (arch->longnames[j] != '\n')
724
&& (arch->longnames[j] != '\0'))
726
if (arch->longnames[j-1] == '/')
728
arch->longnames[j] = '\0';
730
if (!arch->is_thin_archive || arch->nested_member_origin == 0)
731
return arch->longnames + k;
733
/* This is a proxy for a member of a nested archive.
734
Find the name of the member in that archive. */
735
member_file_name = adjust_relative_path (arch->file_name,
736
arch->longnames + k, j - k);
737
if (member_file_name != NULL
738
&& setup_nested_archive (nested_arch, member_file_name) == 0)
740
member_name = get_archive_member_name_at (nested_arch,
741
arch->nested_member_origin,
743
if (member_name != NULL)
745
free (member_file_name);
749
free (member_file_name);
751
/* Last resort: just return the name of the nested archive. */
752
return arch->longnames + k;
755
/* We have a normal (short) name. */
756
for (j = 0; j < sizeof (arch->arhdr.ar_name); j++)
757
if (arch->arhdr.ar_name[j] == '/')
759
arch->arhdr.ar_name[j] = '\0';
760
return arch->arhdr.ar_name;
763
/* The full ar_name field is used. Don't rely on ar_date starting
766
char *name = xmalloc (sizeof (arch->arhdr.ar_name) + 1);
767
memcpy (name, arch->arhdr.ar_name, sizeof (arch->arhdr.ar_name));
768
name[sizeof (arch->arhdr.ar_name)] = '\0';
773
/* Get the name of an archive member at a given OFFSET within an archive
777
get_archive_member_name_at (struct archive_info *arch,
778
unsigned long offset,
779
struct archive_info *nested_arch)
783
if (fseek (arch->file, offset, SEEK_SET) != 0)
785
error (_("%s: failed to seek to next file name\n"), arch->file_name);
788
got = fread (&arch->arhdr, 1, sizeof arch->arhdr, arch->file);
789
if (got != sizeof arch->arhdr)
791
error (_("%s: failed to read archive header\n"), arch->file_name);
794
if (memcmp (arch->arhdr.ar_fmag, ARFMAG, 2) != 0)
796
error (_("%s: did not find a valid archive header\n"),
801
return get_archive_member_name (arch, nested_arch);
804
/* Construct a string showing the name of the archive member, qualified
805
with the name of the containing archive file. For thin archives, we
806
use square brackets to denote the indirection. For nested archives,
807
we show the qualified name of the external member inside the square
808
brackets (e.g., "thin.a[normal.a(foo.o)]"). */
811
make_qualified_name (struct archive_info * arch,
812
struct archive_info * nested_arch,
813
const char *member_name)
815
const char * error_name = _("<corrupt>");
819
len = strlen (arch->file_name) + strlen (member_name) + 3;
820
if (arch->is_thin_archive
821
&& arch->nested_member_origin != 0)
823
/* PR 15140: Allow for corrupt thin archives. */
824
if (nested_arch->file_name)
825
len += strlen (nested_arch->file_name) + 2;
827
len += strlen (error_name) + 2;
830
name = (char *) malloc (len);
833
error (_("Out of memory\n"));
837
if (arch->is_thin_archive
838
&& arch->nested_member_origin != 0)
840
if (nested_arch->file_name)
841
snprintf (name, len, "%s[%s(%s)]", arch->file_name,
842
nested_arch->file_name, member_name);
844
snprintf (name, len, "%s[%s(%s)]", arch->file_name,
845
error_name, member_name);
847
else if (arch->is_thin_archive)
848
snprintf (name, len, "%s[%s]", arch->file_name, member_name);
850
snprintf (name, len, "%s(%s)", arch->file_name, member_name);