ztest.c: #include <errno.h>.
[gcc.git] / libbacktrace / elf.c
1 /* elf.c -- Get debug data from an ELF file for backtraces.
2 Copyright (C) 2012-2017 Free Software Foundation, Inc.
3 Written by Ian Lance Taylor, Google.
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are
7 met:
8
9 (1) Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer.
11
12 (2) Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in
14 the documentation and/or other materials provided with the
15 distribution.
16
17 (3) The name of the author may not be used to
18 endorse or promote products derived from this software without
19 specific prior written permission.
20
21 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
25 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 POSSIBILITY OF SUCH DAMAGE. */
32
33 #include "config.h"
34
35 #include <errno.h>
36 #include <stdlib.h>
37 #include <string.h>
38 #include <sys/types.h>
39 #include <sys/stat.h>
40 #include <unistd.h>
41
42 #ifdef HAVE_DL_ITERATE_PHDR
43 #include <link.h>
44 #endif
45
46 #include "backtrace.h"
47 #include "internal.h"
48
49 #ifndef S_ISLNK
50 #ifndef S_IFLNK
51 #define S_IFLNK 0120000
52 #endif
53 #ifndef S_IFMT
54 #define S_IFMT 0170000
55 #endif
56 #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
57 #endif
58
59 #ifndef __GNUC__
60 #define __builtin_prefetch(p, r, l)
61 #define unlikely(x) (x)
62 #else
63 #define unlikely(x) __builtin_expect(!!(x), 0)
64 #endif
65
66 #if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN
67
68 /* If strnlen is not declared, provide our own version. */
69
70 static size_t
71 xstrnlen (const char *s, size_t maxlen)
72 {
73 size_t i;
74
75 for (i = 0; i < maxlen; ++i)
76 if (s[i] == '\0')
77 break;
78 return i;
79 }
80
81 #define strnlen xstrnlen
82
83 #endif
84
85 #ifndef HAVE_LSTAT
86
87 /* Dummy version of lstat for systems that don't have it. */
88
89 static int
90 xlstat (const char *path ATTRIBUTE_UNUSED, struct stat *st ATTRIBUTE_UNUSED)
91 {
92 return -1;
93 }
94
95 #define lstat xlstat
96
97 #endif
98
99 #ifndef HAVE_READLINK
100
101 /* Dummy version of readlink for systems that don't have it. */
102
103 static ssize_t
104 xreadlink (const char *path ATTRIBUTE_UNUSED, char *buf ATTRIBUTE_UNUSED,
105 size_t bufsz ATTRIBUTE_UNUSED)
106 {
107 return -1;
108 }
109
110 #define readlink xreadlink
111
112 #endif
113
114 #ifndef HAVE_DL_ITERATE_PHDR
115
116 /* Dummy version of dl_iterate_phdr for systems that don't have it. */
117
118 #define dl_phdr_info x_dl_phdr_info
119 #define dl_iterate_phdr x_dl_iterate_phdr
120
121 struct dl_phdr_info
122 {
123 uintptr_t dlpi_addr;
124 const char *dlpi_name;
125 };
126
127 static int
128 dl_iterate_phdr (int (*callback) (struct dl_phdr_info *,
129 size_t, void *) ATTRIBUTE_UNUSED,
130 void *data ATTRIBUTE_UNUSED)
131 {
132 return 0;
133 }
134
135 #endif /* ! defined (HAVE_DL_ITERATE_PHDR) */
136
137 /* The configure script must tell us whether we are 32-bit or 64-bit
138 ELF. We could make this code test and support either possibility,
139 but there is no point. This code only works for the currently
140 running executable, which means that we know the ELF mode at
141 configure time. */
142
143 #if BACKTRACE_ELF_SIZE != 32 && BACKTRACE_ELF_SIZE != 64
144 #error "Unknown BACKTRACE_ELF_SIZE"
145 #endif
146
147 /* <link.h> might #include <elf.h> which might define our constants
148 with slightly different values. Undefine them to be safe. */
149
150 #undef EI_NIDENT
151 #undef EI_MAG0
152 #undef EI_MAG1
153 #undef EI_MAG2
154 #undef EI_MAG3
155 #undef EI_CLASS
156 #undef EI_DATA
157 #undef EI_VERSION
158 #undef ELF_MAG0
159 #undef ELF_MAG1
160 #undef ELF_MAG2
161 #undef ELF_MAG3
162 #undef ELFCLASS32
163 #undef ELFCLASS64
164 #undef ELFDATA2LSB
165 #undef ELFDATA2MSB
166 #undef EV_CURRENT
167 #undef ET_DYN
168 #undef SHN_LORESERVE
169 #undef SHN_XINDEX
170 #undef SHN_UNDEF
171 #undef SHT_SYMTAB
172 #undef SHT_STRTAB
173 #undef SHT_DYNSYM
174 #undef SHF_COMPRESSED
175 #undef STT_OBJECT
176 #undef STT_FUNC
177 #undef NT_GNU_BUILD_ID
178 #undef ELFCOMPRESS_ZLIB
179
180 /* Basic types. */
181
182 typedef uint16_t b_elf_half; /* Elf_Half. */
183 typedef uint32_t b_elf_word; /* Elf_Word. */
184 typedef int32_t b_elf_sword; /* Elf_Sword. */
185
186 #if BACKTRACE_ELF_SIZE == 32
187
188 typedef uint32_t b_elf_addr; /* Elf_Addr. */
189 typedef uint32_t b_elf_off; /* Elf_Off. */
190
191 typedef uint32_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */
192
193 #else
194
195 typedef uint64_t b_elf_addr; /* Elf_Addr. */
196 typedef uint64_t b_elf_off; /* Elf_Off. */
197 typedef uint64_t b_elf_xword; /* Elf_Xword. */
198 typedef int64_t b_elf_sxword; /* Elf_Sxword. */
199
200 typedef uint64_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */
201
202 #endif
203
204 /* Data structures and associated constants. */
205
206 #define EI_NIDENT 16
207
208 typedef struct {
209 unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */
210 b_elf_half e_type; /* Identifies object file type */
211 b_elf_half e_machine; /* Specifies required architecture */
212 b_elf_word e_version; /* Identifies object file version */
213 b_elf_addr e_entry; /* Entry point virtual address */
214 b_elf_off e_phoff; /* Program header table file offset */
215 b_elf_off e_shoff; /* Section header table file offset */
216 b_elf_word e_flags; /* Processor-specific flags */
217 b_elf_half e_ehsize; /* ELF header size in bytes */
218 b_elf_half e_phentsize; /* Program header table entry size */
219 b_elf_half e_phnum; /* Program header table entry count */
220 b_elf_half e_shentsize; /* Section header table entry size */
221 b_elf_half e_shnum; /* Section header table entry count */
222 b_elf_half e_shstrndx; /* Section header string table index */
223 } b_elf_ehdr; /* Elf_Ehdr. */
224
225 #define EI_MAG0 0
226 #define EI_MAG1 1
227 #define EI_MAG2 2
228 #define EI_MAG3 3
229 #define EI_CLASS 4
230 #define EI_DATA 5
231 #define EI_VERSION 6
232
233 #define ELFMAG0 0x7f
234 #define ELFMAG1 'E'
235 #define ELFMAG2 'L'
236 #define ELFMAG3 'F'
237
238 #define ELFCLASS32 1
239 #define ELFCLASS64 2
240
241 #define ELFDATA2LSB 1
242 #define ELFDATA2MSB 2
243
244 #define EV_CURRENT 1
245
246 #define ET_DYN 3
247
248 typedef struct {
249 b_elf_word sh_name; /* Section name, index in string tbl */
250 b_elf_word sh_type; /* Type of section */
251 b_elf_wxword sh_flags; /* Miscellaneous section attributes */
252 b_elf_addr sh_addr; /* Section virtual addr at execution */
253 b_elf_off sh_offset; /* Section file offset */
254 b_elf_wxword sh_size; /* Size of section in bytes */
255 b_elf_word sh_link; /* Index of another section */
256 b_elf_word sh_info; /* Additional section information */
257 b_elf_wxword sh_addralign; /* Section alignment */
258 b_elf_wxword sh_entsize; /* Entry size if section holds table */
259 } b_elf_shdr; /* Elf_Shdr. */
260
261 #define SHN_UNDEF 0x0000 /* Undefined section */
262 #define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
263 #define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */
264
265 #define SHT_SYMTAB 2
266 #define SHT_STRTAB 3
267 #define SHT_DYNSYM 11
268
269 #define SHF_COMPRESSED 0x800
270
271 #if BACKTRACE_ELF_SIZE == 32
272
273 typedef struct
274 {
275 b_elf_word st_name; /* Symbol name, index in string tbl */
276 b_elf_addr st_value; /* Symbol value */
277 b_elf_word st_size; /* Symbol size */
278 unsigned char st_info; /* Symbol binding and type */
279 unsigned char st_other; /* Visibility and other data */
280 b_elf_half st_shndx; /* Symbol section index */
281 } b_elf_sym; /* Elf_Sym. */
282
283 #else /* BACKTRACE_ELF_SIZE != 32 */
284
285 typedef struct
286 {
287 b_elf_word st_name; /* Symbol name, index in string tbl */
288 unsigned char st_info; /* Symbol binding and type */
289 unsigned char st_other; /* Visibility and other data */
290 b_elf_half st_shndx; /* Symbol section index */
291 b_elf_addr st_value; /* Symbol value */
292 b_elf_xword st_size; /* Symbol size */
293 } b_elf_sym; /* Elf_Sym. */
294
295 #endif /* BACKTRACE_ELF_SIZE != 32 */
296
297 #define STT_OBJECT 1
298 #define STT_FUNC 2
299
300 typedef struct
301 {
302 uint32_t namesz;
303 uint32_t descsz;
304 uint32_t type;
305 char name[1];
306 } b_elf_note;
307
308 #define NT_GNU_BUILD_ID 3
309
310 #if BACKTRACE_ELF_SIZE == 32
311
312 typedef struct
313 {
314 b_elf_word ch_type; /* Compresstion algorithm */
315 b_elf_word ch_size; /* Uncompressed size */
316 b_elf_word ch_addralign; /* Alignment for uncompressed data */
317 } b_elf_chdr; /* Elf_Chdr */
318
319 #else /* BACKTRACE_ELF_SIZE != 32 */
320
321 typedef struct
322 {
323 b_elf_word ch_type; /* Compression algorithm */
324 b_elf_word ch_reserved; /* Reserved */
325 b_elf_xword ch_size; /* Uncompressed size */
326 b_elf_xword ch_addralign; /* Alignment for uncompressed data */
327 } b_elf_chdr; /* Elf_Chdr */
328
329 #endif /* BACKTRACE_ELF_SIZE != 32 */
330
331 #define ELFCOMPRESS_ZLIB 1
332
333 /* An index of ELF sections we care about. */
334
335 enum debug_section
336 {
337 DEBUG_INFO,
338 DEBUG_LINE,
339 DEBUG_ABBREV,
340 DEBUG_RANGES,
341 DEBUG_STR,
342
343 /* The old style compressed sections. This list must correspond to
344 the list of normal debug sections. */
345 ZDEBUG_INFO,
346 ZDEBUG_LINE,
347 ZDEBUG_ABBREV,
348 ZDEBUG_RANGES,
349 ZDEBUG_STR,
350
351 DEBUG_MAX
352 };
353
354 /* Names of sections, indexed by enum elf_section. */
355
356 static const char * const debug_section_names[DEBUG_MAX] =
357 {
358 ".debug_info",
359 ".debug_line",
360 ".debug_abbrev",
361 ".debug_ranges",
362 ".debug_str",
363 ".zdebug_info",
364 ".zdebug_line",
365 ".zdebug_abbrev",
366 ".zdebug_ranges",
367 ".zdebug_str"
368 };
369
370 /* Information we gather for the sections we care about. */
371
372 struct debug_section_info
373 {
374 /* Section file offset. */
375 off_t offset;
376 /* Section size. */
377 size_t size;
378 /* Section contents, after read from file. */
379 const unsigned char *data;
380 /* Whether the SHF_COMPRESSED flag is set for the section. */
381 int compressed;
382 };
383
384 /* Information we keep for an ELF symbol. */
385
386 struct elf_symbol
387 {
388 /* The name of the symbol. */
389 const char *name;
390 /* The address of the symbol. */
391 uintptr_t address;
392 /* The size of the symbol. */
393 size_t size;
394 };
395
396 /* Information to pass to elf_syminfo. */
397
398 struct elf_syminfo_data
399 {
400 /* Symbols for the next module. */
401 struct elf_syminfo_data *next;
402 /* The ELF symbols, sorted by address. */
403 struct elf_symbol *symbols;
404 /* The number of symbols. */
405 size_t count;
406 };
407
408 /* Compute the CRC-32 of BUF/LEN. This uses the CRC used for
409 .gnu_debuglink files. */
410
411 static uint32_t
412 elf_crc32 (uint32_t crc, const unsigned char *buf, size_t len)
413 {
414 static const uint32_t crc32_table[256] =
415 {
416 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
417 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
418 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
419 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
420 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
421 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
422 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
423 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
424 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
425 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
426 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
427 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
428 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
429 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
430 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
431 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
432 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
433 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
434 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
435 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
436 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
437 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
438 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
439 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
440 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
441 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
442 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
443 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
444 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
445 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
446 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
447 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
448 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
449 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
450 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
451 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
452 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
453 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
454 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
455 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
456 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
457 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
458 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
459 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
460 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
461 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
462 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
463 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
464 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
465 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
466 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
467 0x2d02ef8d
468 };
469 const unsigned char *end;
470
471 crc = ~crc;
472 for (end = buf + len; buf < end; ++ buf)
473 crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
474 return ~crc;
475 }
476
477 /* Return the CRC-32 of the entire file open at DESCRIPTOR. */
478
479 static uint32_t
480 elf_crc32_file (struct backtrace_state *state, int descriptor,
481 backtrace_error_callback error_callback, void *data)
482 {
483 struct stat st;
484 struct backtrace_view file_view;
485 uint32_t ret;
486
487 if (fstat (descriptor, &st) < 0)
488 {
489 error_callback (data, "fstat", errno);
490 return 0;
491 }
492
493 if (!backtrace_get_view (state, descriptor, 0, st.st_size, error_callback,
494 data, &file_view))
495 return 0;
496
497 ret = elf_crc32 (0, (const unsigned char *) file_view.data, st.st_size);
498
499 backtrace_release_view (state, &file_view, error_callback, data);
500
501 return ret;
502 }
503
504 /* A dummy callback function used when we can't find any debug info. */
505
506 static int
507 elf_nodebug (struct backtrace_state *state ATTRIBUTE_UNUSED,
508 uintptr_t pc ATTRIBUTE_UNUSED,
509 backtrace_full_callback callback ATTRIBUTE_UNUSED,
510 backtrace_error_callback error_callback, void *data)
511 {
512 error_callback (data, "no debug info in ELF executable", -1);
513 return 0;
514 }
515
516 /* A dummy callback function used when we can't find a symbol
517 table. */
518
519 static void
520 elf_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED,
521 uintptr_t addr ATTRIBUTE_UNUSED,
522 backtrace_syminfo_callback callback ATTRIBUTE_UNUSED,
523 backtrace_error_callback error_callback, void *data)
524 {
525 error_callback (data, "no symbol table in ELF executable", -1);
526 }
527
528 /* Compare struct elf_symbol for qsort. */
529
530 static int
531 elf_symbol_compare (const void *v1, const void *v2)
532 {
533 const struct elf_symbol *e1 = (const struct elf_symbol *) v1;
534 const struct elf_symbol *e2 = (const struct elf_symbol *) v2;
535
536 if (e1->address < e2->address)
537 return -1;
538 else if (e1->address > e2->address)
539 return 1;
540 else
541 return 0;
542 }
543
544 /* Compare an ADDR against an elf_symbol for bsearch. We allocate one
545 extra entry in the array so that this can look safely at the next
546 entry. */
547
548 static int
549 elf_symbol_search (const void *vkey, const void *ventry)
550 {
551 const uintptr_t *key = (const uintptr_t *) vkey;
552 const struct elf_symbol *entry = (const struct elf_symbol *) ventry;
553 uintptr_t addr;
554
555 addr = *key;
556 if (addr < entry->address)
557 return -1;
558 else if (addr >= entry->address + entry->size)
559 return 1;
560 else
561 return 0;
562 }
563
564 /* Initialize the symbol table info for elf_syminfo. */
565
566 static int
567 elf_initialize_syminfo (struct backtrace_state *state,
568 uintptr_t base_address,
569 const unsigned char *symtab_data, size_t symtab_size,
570 const unsigned char *strtab, size_t strtab_size,
571 backtrace_error_callback error_callback,
572 void *data, struct elf_syminfo_data *sdata)
573 {
574 size_t sym_count;
575 const b_elf_sym *sym;
576 size_t elf_symbol_count;
577 size_t elf_symbol_size;
578 struct elf_symbol *elf_symbols;
579 size_t i;
580 unsigned int j;
581
582 sym_count = symtab_size / sizeof (b_elf_sym);
583
584 /* We only care about function symbols. Count them. */
585 sym = (const b_elf_sym *) symtab_data;
586 elf_symbol_count = 0;
587 for (i = 0; i < sym_count; ++i, ++sym)
588 {
589 int info;
590
591 info = sym->st_info & 0xf;
592 if ((info == STT_FUNC || info == STT_OBJECT)
593 && sym->st_shndx != SHN_UNDEF)
594 ++elf_symbol_count;
595 }
596
597 elf_symbol_size = elf_symbol_count * sizeof (struct elf_symbol);
598 elf_symbols = ((struct elf_symbol *)
599 backtrace_alloc (state, elf_symbol_size, error_callback,
600 data));
601 if (elf_symbols == NULL)
602 return 0;
603
604 sym = (const b_elf_sym *) symtab_data;
605 j = 0;
606 for (i = 0; i < sym_count; ++i, ++sym)
607 {
608 int info;
609
610 info = sym->st_info & 0xf;
611 if (info != STT_FUNC && info != STT_OBJECT)
612 continue;
613 if (sym->st_shndx == SHN_UNDEF)
614 continue;
615 if (sym->st_name >= strtab_size)
616 {
617 error_callback (data, "symbol string index out of range", 0);
618 backtrace_free (state, elf_symbols, elf_symbol_size, error_callback,
619 data);
620 return 0;
621 }
622 elf_symbols[j].name = (const char *) strtab + sym->st_name;
623 elf_symbols[j].address = sym->st_value + base_address;
624 elf_symbols[j].size = sym->st_size;
625 ++j;
626 }
627
628 backtrace_qsort (elf_symbols, elf_symbol_count, sizeof (struct elf_symbol),
629 elf_symbol_compare);
630
631 sdata->next = NULL;
632 sdata->symbols = elf_symbols;
633 sdata->count = elf_symbol_count;
634
635 return 1;
636 }
637
638 /* Add EDATA to the list in STATE. */
639
640 static void
641 elf_add_syminfo_data (struct backtrace_state *state,
642 struct elf_syminfo_data *edata)
643 {
644 if (!state->threaded)
645 {
646 struct elf_syminfo_data **pp;
647
648 for (pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
649 *pp != NULL;
650 pp = &(*pp)->next)
651 ;
652 *pp = edata;
653 }
654 else
655 {
656 while (1)
657 {
658 struct elf_syminfo_data **pp;
659
660 pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
661
662 while (1)
663 {
664 struct elf_syminfo_data *p;
665
666 p = backtrace_atomic_load_pointer (pp);
667
668 if (p == NULL)
669 break;
670
671 pp = &p->next;
672 }
673
674 if (__sync_bool_compare_and_swap (pp, NULL, edata))
675 break;
676 }
677 }
678 }
679
680 /* Return the symbol name and value for an ADDR. */
681
682 static void
683 elf_syminfo (struct backtrace_state *state, uintptr_t addr,
684 backtrace_syminfo_callback callback,
685 backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
686 void *data)
687 {
688 struct elf_syminfo_data *edata;
689 struct elf_symbol *sym = NULL;
690
691 if (!state->threaded)
692 {
693 for (edata = (struct elf_syminfo_data *) state->syminfo_data;
694 edata != NULL;
695 edata = edata->next)
696 {
697 sym = ((struct elf_symbol *)
698 bsearch (&addr, edata->symbols, edata->count,
699 sizeof (struct elf_symbol), elf_symbol_search));
700 if (sym != NULL)
701 break;
702 }
703 }
704 else
705 {
706 struct elf_syminfo_data **pp;
707
708 pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
709 while (1)
710 {
711 edata = backtrace_atomic_load_pointer (pp);
712 if (edata == NULL)
713 break;
714
715 sym = ((struct elf_symbol *)
716 bsearch (&addr, edata->symbols, edata->count,
717 sizeof (struct elf_symbol), elf_symbol_search));
718 if (sym != NULL)
719 break;
720
721 pp = &edata->next;
722 }
723 }
724
725 if (sym == NULL)
726 callback (data, addr, NULL, 0, 0);
727 else
728 callback (data, addr, sym->name, sym->address, sym->size);
729 }
730
731 /* Return whether FILENAME is a symlink. */
732
733 static int
734 elf_is_symlink (const char *filename)
735 {
736 struct stat st;
737
738 if (lstat (filename, &st) < 0)
739 return 0;
740 return S_ISLNK (st.st_mode);
741 }
742
743 /* Return the results of reading the symlink FILENAME in a buffer
744 allocated by backtrace_alloc. Return the length of the buffer in
745 *LEN. */
746
747 static char *
748 elf_readlink (struct backtrace_state *state, const char *filename,
749 backtrace_error_callback error_callback, void *data,
750 size_t *plen)
751 {
752 size_t len;
753 char *buf;
754
755 len = 128;
756 while (1)
757 {
758 ssize_t rl;
759
760 buf = backtrace_alloc (state, len, error_callback, data);
761 if (buf == NULL)
762 return NULL;
763 rl = readlink (filename, buf, len);
764 if (rl < 0)
765 {
766 backtrace_free (state, buf, len, error_callback, data);
767 return NULL;
768 }
769 if ((size_t) rl < len - 1)
770 {
771 buf[rl] = '\0';
772 *plen = len;
773 return buf;
774 }
775 backtrace_free (state, buf, len, error_callback, data);
776 len *= 2;
777 }
778 }
779
780 /* Open a separate debug info file, using the build ID to find it.
781 Returns an open file descriptor, or -1.
782
783 The GDB manual says that the only place gdb looks for a debug file
784 when the build ID is known is in /usr/lib/debug/.build-id. */
785
786 static int
787 elf_open_debugfile_by_buildid (struct backtrace_state *state,
788 const char *buildid_data, size_t buildid_size,
789 backtrace_error_callback error_callback,
790 void *data)
791 {
792 const char * const prefix = "/usr/lib/debug/.build-id/";
793 const size_t prefix_len = strlen (prefix);
794 const char * const suffix = ".debug";
795 const size_t suffix_len = strlen (suffix);
796 size_t len;
797 char *bd_filename;
798 char *t;
799 size_t i;
800 int ret;
801 int does_not_exist;
802
803 len = prefix_len + buildid_size * 2 + suffix_len + 2;
804 bd_filename = backtrace_alloc (state, len, error_callback, data);
805 if (bd_filename == NULL)
806 return -1;
807
808 t = bd_filename;
809 memcpy (t, prefix, prefix_len);
810 t += prefix_len;
811 for (i = 0; i < buildid_size; i++)
812 {
813 unsigned char b;
814 unsigned char nib;
815
816 b = (unsigned char) buildid_data[i];
817 nib = (b & 0xf0) >> 4;
818 *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10;
819 nib = b & 0x0f;
820 *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10;
821 if (i == 0)
822 *t++ = '/';
823 }
824 memcpy (t, suffix, suffix_len);
825 t[suffix_len] = '\0';
826
827 ret = backtrace_open (bd_filename, error_callback, data, &does_not_exist);
828
829 backtrace_free (state, bd_filename, len, error_callback, data);
830
831 /* gdb checks that the debuginfo file has the same build ID note.
832 That seems kind of pointless to me--why would it have the right
833 name but not the right build ID?--so skipping the check. */
834
835 return ret;
836 }
837
838 /* Try to open a file whose name is PREFIX (length PREFIX_LEN)
839 concatenated with PREFIX2 (length PREFIX2_LEN) concatenated with
840 DEBUGLINK_NAME. Returns an open file descriptor, or -1. */
841
842 static int
843 elf_try_debugfile (struct backtrace_state *state, const char *prefix,
844 size_t prefix_len, const char *prefix2, size_t prefix2_len,
845 const char *debuglink_name,
846 backtrace_error_callback error_callback, void *data)
847 {
848 size_t debuglink_len;
849 size_t try_len;
850 char *try;
851 int does_not_exist;
852 int ret;
853
854 debuglink_len = strlen (debuglink_name);
855 try_len = prefix_len + prefix2_len + debuglink_len + 1;
856 try = backtrace_alloc (state, try_len, error_callback, data);
857 if (try == NULL)
858 return -1;
859
860 memcpy (try, prefix, prefix_len);
861 memcpy (try + prefix_len, prefix2, prefix2_len);
862 memcpy (try + prefix_len + prefix2_len, debuglink_name, debuglink_len);
863 try[prefix_len + prefix2_len + debuglink_len] = '\0';
864
865 ret = backtrace_open (try, error_callback, data, &does_not_exist);
866
867 backtrace_free (state, try, try_len, error_callback, data);
868
869 return ret;
870 }
871
872 /* Find a separate debug info file, using the debuglink section data
873 to find it. Returns an open file descriptor, or -1. */
874
875 static int
876 elf_find_debugfile_by_debuglink (struct backtrace_state *state,
877 const char *filename,
878 const char *debuglink_name,
879 backtrace_error_callback error_callback,
880 void *data)
881 {
882 int ret;
883 char *alc;
884 size_t alc_len;
885 const char *slash;
886 int ddescriptor;
887 const char *prefix;
888 size_t prefix_len;
889
890 /* Resolve symlinks in FILENAME. Since FILENAME is fairly likely to
891 be /proc/self/exe, symlinks are common. We don't try to resolve
892 the whole path name, just the base name. */
893 ret = -1;
894 alc = NULL;
895 alc_len = 0;
896 while (elf_is_symlink (filename))
897 {
898 char *new_buf;
899 size_t new_len;
900
901 new_buf = elf_readlink (state, filename, error_callback, data, &new_len);
902 if (new_buf == NULL)
903 break;
904
905 if (new_buf[0] == '/')
906 filename = new_buf;
907 else
908 {
909 slash = strrchr (filename, '/');
910 if (slash == NULL)
911 filename = new_buf;
912 else
913 {
914 size_t clen;
915 char *c;
916
917 slash++;
918 clen = slash - filename + strlen (new_buf) + 1;
919 c = backtrace_alloc (state, clen, error_callback, data);
920 if (c == NULL)
921 goto done;
922
923 memcpy (c, filename, slash - filename);
924 memcpy (c + (slash - filename), new_buf, strlen (new_buf));
925 c[slash - filename + strlen (new_buf)] = '\0';
926 backtrace_free (state, new_buf, new_len, error_callback, data);
927 filename = c;
928 new_buf = c;
929 new_len = clen;
930 }
931 }
932
933 if (alc != NULL)
934 backtrace_free (state, alc, alc_len, error_callback, data);
935 alc = new_buf;
936 alc_len = new_len;
937 }
938
939 /* Look for DEBUGLINK_NAME in the same directory as FILENAME. */
940
941 slash = strrchr (filename, '/');
942 if (slash == NULL)
943 {
944 prefix = "";
945 prefix_len = 0;
946 }
947 else
948 {
949 slash++;
950 prefix = filename;
951 prefix_len = slash - filename;
952 }
953
954 ddescriptor = elf_try_debugfile (state, prefix, prefix_len, "", 0,
955 debuglink_name, error_callback, data);
956 if (ddescriptor >= 0)
957 {
958 ret = ddescriptor;
959 goto done;
960 }
961
962 /* Look for DEBUGLINK_NAME in a .debug subdirectory of FILENAME. */
963
964 ddescriptor = elf_try_debugfile (state, prefix, prefix_len, ".debug/",
965 strlen (".debug/"), debuglink_name,
966 error_callback, data);
967 if (ddescriptor >= 0)
968 {
969 ret = ddescriptor;
970 goto done;
971 }
972
973 /* Look for DEBUGLINK_NAME in /usr/lib/debug. */
974
975 ddescriptor = elf_try_debugfile (state, "/usr/lib/debug/",
976 strlen ("/usr/lib/debug/"), prefix,
977 prefix_len, debuglink_name,
978 error_callback, data);
979 if (ddescriptor >= 0)
980 ret = ddescriptor;
981
982 done:
983 if (alc != NULL && alc_len > 0)
984 backtrace_free (state, alc, alc_len, error_callback, data);
985 return ret;
986 }
987
988 /* Open a separate debug info file, using the debuglink section data
989 to find it. Returns an open file descriptor, or -1. */
990
991 static int
992 elf_open_debugfile_by_debuglink (struct backtrace_state *state,
993 const char *filename,
994 const char *debuglink_name,
995 uint32_t debuglink_crc,
996 backtrace_error_callback error_callback,
997 void *data)
998 {
999 int ddescriptor;
1000 uint32_t got_crc;
1001
1002 ddescriptor = elf_find_debugfile_by_debuglink (state, filename,
1003 debuglink_name,
1004 error_callback, data);
1005 if (ddescriptor < 0)
1006 return -1;
1007
1008 got_crc = elf_crc32_file (state, ddescriptor, error_callback, data);
1009 if (got_crc != debuglink_crc)
1010 {
1011 backtrace_close (ddescriptor, error_callback, data);
1012 return -1;
1013 }
1014
1015 return ddescriptor;
1016 }
1017
1018 /* A function useful for setting a breakpoint for an inflation failure
1019 when this code is compiled with -g. */
1020
1021 static void
1022 elf_zlib_failed(void)
1023 {
1024 }
1025
1026 /* *PVAL is the current value being read from the stream, and *PBITS
1027 is the number of valid bits. Ensure that *PVAL holds at least 15
1028 bits by reading additional bits from *PPIN, up to PINEND, as
1029 needed. Updates *PPIN, *PVAL and *PBITS. Returns 1 on success, 0
1030 on error. */
1031
1032 static int
1033 elf_zlib_fetch (const unsigned char **ppin, const unsigned char *pinend,
1034 uint32_t *pval, unsigned int *pbits)
1035 {
1036 unsigned int bits;
1037 const unsigned char *pin;
1038 uint32_t val;
1039
1040 bits = *pbits;
1041 if (bits >= 15)
1042 return 1;
1043 pin = *ppin;
1044 val = *pval;
1045
1046 if (unlikely (pinend - pin < 2))
1047 {
1048 elf_zlib_failed ();
1049 return 0;
1050 }
1051 val |= pin[0] << bits;
1052 val |= pin[1] << (bits + 8);
1053 bits += 16;
1054 pin += 2;
1055
1056 /* We will need the next two bytes soon. We ask for high temporal
1057 locality because we will need the whole cache line soon. */
1058 __builtin_prefetch (pin, 0, 3);
1059 __builtin_prefetch (pin + 1, 0, 3);
1060
1061 *ppin = pin;
1062 *pval = val;
1063 *pbits = bits;
1064 return 1;
1065 }
1066
1067 /* Huffman code tables, like the rest of the zlib format, are defined
1068 by RFC 1951. We store a Huffman code table as a series of tables
1069 stored sequentially in memory. Each entry in a table is 16 bits.
1070 The first, main, table has 256 entries. It is followed by a set of
1071 secondary tables of length 2 to 128 entries. The maximum length of
1072 a code sequence in the deflate format is 15 bits, so that is all we
1073 need. Each secondary table has an index, which is the offset of
1074 the table in the overall memory storage.
1075
1076 The deflate format says that all codes of a given bit length are
1077 lexicographically consecutive. Perhaps we could have 130 values
1078 that require a 15-bit code, perhaps requiring three secondary
1079 tables of size 128. I don't know if this is actually possible, but
1080 it suggests that the maximum size required for secondary tables is
1081 3 * 128 + 3 * 64 ... == 768. The zlib enough program reports 660
1082 as the maximum. We permit 768, since in addition to the 256 for
1083 the primary table, with two bytes per entry, and with the two
1084 tables we need, that gives us a page.
1085
1086 A single table entry needs to store a value or (for the main table
1087 only) the index and size of a secondary table. Values range from 0
1088 to 285, inclusive. Secondary table indexes, per above, range from
1089 0 to 510. For a value we need to store the number of bits we need
1090 to determine that value (one value may appear multiple times in the
1091 table), which is 1 to 8. For a secondary table we need to store
1092 the number of bits used to index into the table, which is 1 to 7.
1093 And of course we need 1 bit to decide whether we have a value or a
1094 secondary table index. So each entry needs 9 bits for value/table
1095 index, 3 bits for size, 1 bit what it is. For simplicity we use 16
1096 bits per entry. */
1097
1098 /* Number of entries we allocate to for one code table. We get a page
1099 for the two code tables we need. */
1100
1101 #define HUFFMAN_TABLE_SIZE (1024)
1102
1103 /* Bit masks and shifts for the values in the table. */
1104
1105 #define HUFFMAN_VALUE_MASK 0x01ff
1106 #define HUFFMAN_BITS_SHIFT 9
1107 #define HUFFMAN_BITS_MASK 0x7
1108 #define HUFFMAN_SECONDARY_SHIFT 12
1109
1110 /* For working memory while inflating we need two code tables, we need
1111 an array of code lengths (max value 15, so we use unsigned char),
1112 and an array of unsigned shorts used while building a table. The
1113 latter two arrays must be large enough to hold the maximum number
1114 of code lengths, which RFC 1951 defines as 286 + 30. */
1115
1116 #define ZDEBUG_TABLE_SIZE \
1117 (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \
1118 + (286 + 30) * sizeof (uint16_t) \
1119 + (286 + 30) * sizeof (unsigned char))
1120
1121 #define ZDEBUG_TABLE_CODELEN_OFFSET \
1122 (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \
1123 + (286 + 30) * sizeof (uint16_t))
1124
1125 #define ZDEBUG_TABLE_WORK_OFFSET \
1126 (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t))
1127
1128 #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
1129
1130 /* Used by the main function that generates the fixed table to learn
1131 the table size. */
1132 static size_t final_next_secondary;
1133
1134 #endif
1135
1136 /* Build a Huffman code table from an array of lengths in CODES of
1137 length CODES_LEN. The table is stored into *TABLE. ZDEBUG_TABLE
1138 is the same as for elf_zlib_inflate, used to find some work space.
1139 Returns 1 on success, 0 on error. */
1140
1141 static int
1142 elf_zlib_inflate_table (unsigned char *codes, size_t codes_len,
1143 uint16_t *zdebug_table, uint16_t *table)
1144 {
1145 uint16_t count[16];
1146 uint16_t start[16];
1147 uint16_t prev[16];
1148 uint16_t firstcode[7];
1149 uint16_t *next;
1150 size_t i;
1151 size_t j;
1152 unsigned int code;
1153 size_t next_secondary;
1154
1155 /* Count the number of code of each length. Set NEXT[val] to be the
1156 next value after VAL with the same bit length. */
1157
1158 next = (uint16_t *) (((unsigned char *) zdebug_table)
1159 + ZDEBUG_TABLE_WORK_OFFSET);
1160
1161 memset (&count[0], 0, 16 * sizeof (uint16_t));
1162 for (i = 0; i < codes_len; ++i)
1163 {
1164 if (unlikely (codes[i] >= 16))
1165 {
1166 elf_zlib_failed ();
1167 return 0;
1168 }
1169
1170 if (count[codes[i]] == 0)
1171 {
1172 start[codes[i]] = i;
1173 prev[codes[i]] = i;
1174 }
1175 else
1176 {
1177 next[prev[codes[i]]] = i;
1178 prev[codes[i]] = i;
1179 }
1180
1181 ++count[codes[i]];
1182 }
1183
1184 /* For each length, fill in the table for the codes of that
1185 length. */
1186
1187 memset (table, 0, HUFFMAN_TABLE_SIZE * sizeof (uint16_t));
1188
1189 /* Handle the values that do not require a secondary table. */
1190
1191 code = 0;
1192 for (j = 1; j <= 8; ++j)
1193 {
1194 unsigned int jcnt;
1195 unsigned int val;
1196
1197 jcnt = count[j];
1198 if (jcnt == 0)
1199 continue;
1200
1201 if (unlikely (jcnt > (1U << j)))
1202 {
1203 elf_zlib_failed ();
1204 return 0;
1205 }
1206
1207 /* There are JCNT values that have this length, the values
1208 starting from START[j] continuing through NEXT[VAL]. Those
1209 values are assigned consecutive values starting at CODE. */
1210
1211 val = start[j];
1212 for (i = 0; i < jcnt; ++i)
1213 {
1214 uint16_t tval;
1215 size_t ind;
1216 unsigned int incr;
1217
1218 /* In the compressed bit stream, the value VAL is encoded as
1219 J bits with the value C. */
1220
1221 if (unlikely ((val & ~HUFFMAN_VALUE_MASK) != 0))
1222 {
1223 elf_zlib_failed ();
1224 return 0;
1225 }
1226
1227 tval = val | ((j - 1) << HUFFMAN_BITS_SHIFT);
1228
1229 /* The table lookup uses 8 bits. If J is less than 8, we
1230 don't know what the other bits will be. We need to fill
1231 in all possibilities in the table. Since the Huffman
1232 code is unambiguous, those entries can't be used for any
1233 other code. */
1234
1235 for (ind = code; ind < 0x100; ind += 1 << j)
1236 {
1237 if (unlikely (table[ind] != 0))
1238 {
1239 elf_zlib_failed ();
1240 return 0;
1241 }
1242 table[ind] = tval;
1243 }
1244
1245 /* Advance to the next value with this length. */
1246 if (i + 1 < jcnt)
1247 val = next[val];
1248
1249 /* The Huffman codes are stored in the bitstream with the
1250 most significant bit first, as is required to make them
1251 unambiguous. The effect is that when we read them from
1252 the bitstream we see the bit sequence in reverse order:
1253 the most significant bit of the Huffman code is the least
1254 significant bit of the value we read from the bitstream.
1255 That means that to make our table lookups work, we need
1256 to reverse the bits of CODE. Since reversing bits is
1257 tedious and in general requires using a table, we instead
1258 increment CODE in reverse order. That is, if the number
1259 of bits we are currently using, here named J, is 3, we
1260 count as 000, 100, 010, 110, 001, 101, 011, 111, which is
1261 to say the numbers from 0 to 7 but with the bits
1262 reversed. Going to more bits, aka incrementing J,
1263 effectively just adds more zero bits as the beginning,
1264 and as such does not change the numeric value of CODE.
1265
1266 To increment CODE of length J in reverse order, find the
1267 most significant zero bit and set it to one while
1268 clearing all higher bits. In other words, add 1 modulo
1269 2^J, only reversed. */
1270
1271 incr = 1U << (j - 1);
1272 while ((code & incr) != 0)
1273 incr >>= 1;
1274 if (incr == 0)
1275 code = 0;
1276 else
1277 {
1278 code &= incr - 1;
1279 code += incr;
1280 }
1281 }
1282 }
1283
1284 /* Handle the values that require a secondary table. */
1285
1286 /* Set FIRSTCODE, the number at which the codes start, for each
1287 length. */
1288
1289 for (j = 9; j < 16; j++)
1290 {
1291 unsigned int jcnt;
1292 unsigned int k;
1293
1294 jcnt = count[j];
1295 if (jcnt == 0)
1296 continue;
1297
1298 /* There are JCNT values that have this length, the values
1299 starting from START[j]. Those values are assigned
1300 consecutive values starting at CODE. */
1301
1302 firstcode[j - 9] = code;
1303
1304 /* Reverse add JCNT to CODE modulo 2^J. */
1305 for (k = 0; k < j; ++k)
1306 {
1307 if ((jcnt & (1U << k)) != 0)
1308 {
1309 unsigned int m;
1310 unsigned int bit;
1311
1312 bit = 1U << (j - k - 1);
1313 for (m = 0; m < j - k; ++m, bit >>= 1)
1314 {
1315 if ((code & bit) == 0)
1316 {
1317 code += bit;
1318 break;
1319 }
1320 code &= ~bit;
1321 }
1322 jcnt &= ~(1U << k);
1323 }
1324 }
1325 if (unlikely (jcnt != 0))
1326 {
1327 elf_zlib_failed ();
1328 return 0;
1329 }
1330 }
1331
1332 /* For J from 9 to 15, inclusive, we store COUNT[J] consecutive
1333 values starting at START[J] with consecutive codes starting at
1334 FIRSTCODE[J - 9]. In the primary table we need to point to the
1335 secondary table, and the secondary table will be indexed by J - 9
1336 bits. We count down from 15 so that we install the larger
1337 secondary tables first, as the smaller ones may be embedded in
1338 the larger ones. */
1339
1340 next_secondary = 0; /* Index of next secondary table (after primary). */
1341 for (j = 15; j >= 9; j--)
1342 {
1343 unsigned int jcnt;
1344 unsigned int val;
1345 size_t primary; /* Current primary index. */
1346 size_t secondary; /* Offset to current secondary table. */
1347 size_t secondary_bits; /* Bit size of current secondary table. */
1348
1349 jcnt = count[j];
1350 if (jcnt == 0)
1351 continue;
1352
1353 val = start[j];
1354 code = firstcode[j - 9];
1355 primary = 0x100;
1356 secondary = 0;
1357 secondary_bits = 0;
1358 for (i = 0; i < jcnt; ++i)
1359 {
1360 uint16_t tval;
1361 size_t ind;
1362 unsigned int incr;
1363
1364 if ((code & 0xff) != primary)
1365 {
1366 uint16_t tprimary;
1367
1368 /* Fill in a new primary table entry. */
1369
1370 primary = code & 0xff;
1371
1372 tprimary = table[primary];
1373 if (tprimary == 0)
1374 {
1375 /* Start a new secondary table. */
1376
1377 if (unlikely ((next_secondary & HUFFMAN_VALUE_MASK)
1378 != next_secondary))
1379 {
1380 elf_zlib_failed ();
1381 return 0;
1382 }
1383
1384 secondary = next_secondary;
1385 secondary_bits = j - 8;
1386 next_secondary += 1 << secondary_bits;
1387 table[primary] = (secondary
1388 + ((j - 8) << HUFFMAN_BITS_SHIFT)
1389 + (1U << HUFFMAN_SECONDARY_SHIFT));
1390 }
1391 else
1392 {
1393 /* There is an existing entry. It had better be a
1394 secondary table with enough bits. */
1395 if (unlikely ((tprimary & (1U << HUFFMAN_SECONDARY_SHIFT))
1396 == 0))
1397 {
1398 elf_zlib_failed ();
1399 return 0;
1400 }
1401 secondary = tprimary & HUFFMAN_VALUE_MASK;
1402 secondary_bits = ((tprimary >> HUFFMAN_BITS_SHIFT)
1403 & HUFFMAN_BITS_MASK);
1404 if (unlikely (secondary_bits < j - 8))
1405 {
1406 elf_zlib_failed ();
1407 return 0;
1408 }
1409 }
1410 }
1411
1412 /* Fill in secondary table entries. */
1413
1414 tval = val | ((j - 8) << HUFFMAN_BITS_SHIFT);
1415
1416 for (ind = code >> 8;
1417 ind < (1U << secondary_bits);
1418 ind += 1U << (j - 8))
1419 {
1420 if (unlikely (table[secondary + 0x100 + ind] != 0))
1421 {
1422 elf_zlib_failed ();
1423 return 0;
1424 }
1425 table[secondary + 0x100 + ind] = tval;
1426 }
1427
1428 if (i + 1 < jcnt)
1429 val = next[val];
1430
1431 incr = 1U << (j - 1);
1432 while ((code & incr) != 0)
1433 incr >>= 1;
1434 if (incr == 0)
1435 code = 0;
1436 else
1437 {
1438 code &= incr - 1;
1439 code += incr;
1440 }
1441 }
1442 }
1443
1444 #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
1445 final_next_secondary = next_secondary;
1446 #endif
1447
1448 return 1;
1449 }
1450
1451 #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
1452
1453 /* Used to generate the fixed Huffman table for block type 1. */
1454
1455 #include <stdio.h>
1456
1457 static uint16_t table[ZDEBUG_TABLE_SIZE];
1458 static unsigned char codes[287];
1459
1460 int
1461 main ()
1462 {
1463 size_t i;
1464
1465 for (i = 0; i <= 143; ++i)
1466 codes[i] = 8;
1467 for (i = 144; i <= 255; ++i)
1468 codes[i] = 9;
1469 for (i = 256; i <= 279; ++i)
1470 codes[i] = 7;
1471 for (i = 280; i <= 287; ++i)
1472 codes[i] = 8;
1473 if (!elf_zlib_inflate_table (&codes[0], 287, &table[0], &table[0]))
1474 {
1475 fprintf (stderr, "elf_zlib_inflate_table failed\n");
1476 exit (EXIT_FAILURE);
1477 }
1478
1479 printf ("static const uint16_t elf_zlib_default_table[%#zx] =\n",
1480 final_next_secondary + 0x100);
1481 printf ("{\n");
1482 for (i = 0; i < final_next_secondary + 0x100; i += 8)
1483 {
1484 size_t j;
1485
1486 printf (" ");
1487 for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j)
1488 printf (" %#x,", table[j]);
1489 printf ("\n");
1490 }
1491 printf ("};\n");
1492 return 0;
1493 }
1494
1495 #endif
1496
1497 /* The fixed table generated by the #ifdef'ed out main function
1498 above. */
1499
1500 static const uint16_t elf_zlib_default_table[0x170] =
1501 {
1502 0xd00, 0xe50, 0xe10, 0xf18, 0xd10, 0xe70, 0xe30, 0x1232,
1503 0xd08, 0xe60, 0xe20, 0x1212, 0xe00, 0xe80, 0xe40, 0x1252,
1504 0xd04, 0xe58, 0xe18, 0x1202, 0xd14, 0xe78, 0xe38, 0x1242,
1505 0xd0c, 0xe68, 0xe28, 0x1222, 0xe08, 0xe88, 0xe48, 0x1262,
1506 0xd02, 0xe54, 0xe14, 0xf1c, 0xd12, 0xe74, 0xe34, 0x123a,
1507 0xd0a, 0xe64, 0xe24, 0x121a, 0xe04, 0xe84, 0xe44, 0x125a,
1508 0xd06, 0xe5c, 0xe1c, 0x120a, 0xd16, 0xe7c, 0xe3c, 0x124a,
1509 0xd0e, 0xe6c, 0xe2c, 0x122a, 0xe0c, 0xe8c, 0xe4c, 0x126a,
1510 0xd01, 0xe52, 0xe12, 0xf1a, 0xd11, 0xe72, 0xe32, 0x1236,
1511 0xd09, 0xe62, 0xe22, 0x1216, 0xe02, 0xe82, 0xe42, 0x1256,
1512 0xd05, 0xe5a, 0xe1a, 0x1206, 0xd15, 0xe7a, 0xe3a, 0x1246,
1513 0xd0d, 0xe6a, 0xe2a, 0x1226, 0xe0a, 0xe8a, 0xe4a, 0x1266,
1514 0xd03, 0xe56, 0xe16, 0xf1e, 0xd13, 0xe76, 0xe36, 0x123e,
1515 0xd0b, 0xe66, 0xe26, 0x121e, 0xe06, 0xe86, 0xe46, 0x125e,
1516 0xd07, 0xe5e, 0xe1e, 0x120e, 0xd17, 0xe7e, 0xe3e, 0x124e,
1517 0xd0f, 0xe6e, 0xe2e, 0x122e, 0xe0e, 0xe8e, 0xe4e, 0x126e,
1518 0xd00, 0xe51, 0xe11, 0xf19, 0xd10, 0xe71, 0xe31, 0x1234,
1519 0xd08, 0xe61, 0xe21, 0x1214, 0xe01, 0xe81, 0xe41, 0x1254,
1520 0xd04, 0xe59, 0xe19, 0x1204, 0xd14, 0xe79, 0xe39, 0x1244,
1521 0xd0c, 0xe69, 0xe29, 0x1224, 0xe09, 0xe89, 0xe49, 0x1264,
1522 0xd02, 0xe55, 0xe15, 0xf1d, 0xd12, 0xe75, 0xe35, 0x123c,
1523 0xd0a, 0xe65, 0xe25, 0x121c, 0xe05, 0xe85, 0xe45, 0x125c,
1524 0xd06, 0xe5d, 0xe1d, 0x120c, 0xd16, 0xe7d, 0xe3d, 0x124c,
1525 0xd0e, 0xe6d, 0xe2d, 0x122c, 0xe0d, 0xe8d, 0xe4d, 0x126c,
1526 0xd01, 0xe53, 0xe13, 0xf1b, 0xd11, 0xe73, 0xe33, 0x1238,
1527 0xd09, 0xe63, 0xe23, 0x1218, 0xe03, 0xe83, 0xe43, 0x1258,
1528 0xd05, 0xe5b, 0xe1b, 0x1208, 0xd15, 0xe7b, 0xe3b, 0x1248,
1529 0xd0d, 0xe6b, 0xe2b, 0x1228, 0xe0b, 0xe8b, 0xe4b, 0x1268,
1530 0xd03, 0xe57, 0xe17, 0x1200, 0xd13, 0xe77, 0xe37, 0x1240,
1531 0xd0b, 0xe67, 0xe27, 0x1220, 0xe07, 0xe87, 0xe47, 0x1260,
1532 0xd07, 0xe5f, 0xe1f, 0x1210, 0xd17, 0xe7f, 0xe3f, 0x1250,
1533 0xd0f, 0xe6f, 0xe2f, 0x1230, 0xe0f, 0xe8f, 0xe4f, 0,
1534 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297,
1535 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f,
1536 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7,
1537 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af,
1538 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7,
1539 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf,
1540 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7,
1541 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf,
1542 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7,
1543 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df,
1544 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7,
1545 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef,
1546 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7,
1547 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff,
1548 };
1549
1550 /* Inflate a zlib stream from PIN/SIN to POUT/SOUT. Return 1 on
1551 success, 0 on some error parsing the stream. */
1552
1553 static int
1554 elf_zlib_inflate (const unsigned char *pin, size_t sin, uint16_t *zdebug_table,
1555 unsigned char *pout, size_t sout)
1556 {
1557 unsigned char *porigout;
1558 const unsigned char *pinend;
1559 unsigned char *poutend;
1560
1561 /* We can apparently see multiple zlib streams concatenated
1562 together, so keep going as long as there is something to read.
1563 The last 4 bytes are the checksum. */
1564 porigout = pout;
1565 pinend = pin + sin;
1566 poutend = pout + sout;
1567 while ((pinend - pin) > 4)
1568 {
1569 uint32_t val;
1570 unsigned int bits;
1571 int last;
1572
1573 /* Read the two byte zlib header. */
1574
1575 if (unlikely ((pin[0] & 0xf) != 8)) /* 8 is zlib encoding. */
1576 {
1577 /* Unknown compression method. */
1578 elf_zlib_failed ();
1579 return 0;
1580 }
1581 if (unlikely ((pin[0] >> 4) > 7))
1582 {
1583 /* Window size too large. Other than this check, we don't
1584 care about the window size. */
1585 elf_zlib_failed ();
1586 return 0;
1587 }
1588 if (unlikely ((pin[1] & 0x20) != 0))
1589 {
1590 /* Stream expects a predefined dictionary, but we have no
1591 dictionary. */
1592 elf_zlib_failed ();
1593 return 0;
1594 }
1595 val = (pin[0] << 8) | pin[1];
1596 if (unlikely (val % 31 != 0))
1597 {
1598 /* Header check failure. */
1599 elf_zlib_failed ();
1600 return 0;
1601 }
1602 pin += 2;
1603
1604 /* Read blocks until one is marked last. */
1605
1606 val = 0;
1607 bits = 0;
1608 last = 0;
1609
1610 while (!last)
1611 {
1612 unsigned int type;
1613 const uint16_t *tlit;
1614 const uint16_t *tdist;
1615
1616 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1617 return 0;
1618
1619 last = val & 1;
1620 type = (val >> 1) & 3;
1621 val >>= 3;
1622 bits -= 3;
1623
1624 if (unlikely (type == 3))
1625 {
1626 /* Invalid block type. */
1627 elf_zlib_failed ();
1628 return 0;
1629 }
1630
1631 if (type == 0)
1632 {
1633 uint16_t len;
1634 uint16_t lenc;
1635
1636 /* An uncompressed block. */
1637
1638 /* If we've read ahead more than a byte, back up. */
1639 while (bits > 8)
1640 {
1641 --pin;
1642 bits -= 8;
1643 }
1644
1645 val = 0;
1646 bits = 0;
1647 if (unlikely ((pinend - pin) < 4))
1648 {
1649 /* Missing length. */
1650 elf_zlib_failed ();
1651 return 0;
1652 }
1653 len = pin[0] | (pin[1] << 8);
1654 lenc = pin[2] | (pin[3] << 8);
1655 pin += 4;
1656 lenc = ~lenc;
1657 if (unlikely (len != lenc))
1658 {
1659 /* Corrupt data. */
1660 elf_zlib_failed ();
1661 return 0;
1662 }
1663 if (unlikely (len > (unsigned int) (pinend - pin)
1664 || len > (unsigned int) (poutend - pout)))
1665 {
1666 /* Not enough space in buffers. */
1667 elf_zlib_failed ();
1668 return 0;
1669 }
1670 memcpy (pout, pin, len);
1671 pout += len;
1672 pin += len;
1673
1674 /* Go around to read the next block. */
1675 continue;
1676 }
1677
1678 if (type == 1)
1679 {
1680 tlit = elf_zlib_default_table;
1681 tdist = elf_zlib_default_table;
1682 }
1683 else
1684 {
1685 unsigned int nlit;
1686 unsigned int ndist;
1687 unsigned int nclen;
1688 unsigned char codebits[19];
1689 unsigned char *plenbase;
1690 unsigned char *plen;
1691 unsigned char *plenend;
1692
1693 /* Read a Huffman encoding table. The various magic
1694 numbers here are from RFC 1951. */
1695
1696 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1697 return 0;
1698
1699 nlit = (val & 0x1f) + 257;
1700 val >>= 5;
1701 ndist = (val & 0x1f) + 1;
1702 val >>= 5;
1703 nclen = (val & 0xf) + 4;
1704 val >>= 4;
1705 bits -= 14;
1706 if (unlikely (nlit > 286 || ndist > 30))
1707 {
1708 /* Values out of range. */
1709 elf_zlib_failed ();
1710 return 0;
1711 }
1712
1713 /* Read and build the table used to compress the
1714 literal, length, and distance codes. */
1715
1716 memset(&codebits[0], 0, 19);
1717
1718 /* There are always at least 4 elements in the
1719 table. */
1720
1721 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1722 return 0;
1723
1724 codebits[16] = val & 7;
1725 codebits[17] = (val >> 3) & 7;
1726 codebits[18] = (val >> 6) & 7;
1727 codebits[0] = (val >> 9) & 7;
1728 val >>= 12;
1729 bits -= 12;
1730
1731 if (nclen == 4)
1732 goto codebitsdone;
1733
1734 codebits[8] = val & 7;
1735 val >>= 3;
1736 bits -= 3;
1737
1738 if (nclen == 5)
1739 goto codebitsdone;
1740
1741 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1742 return 0;
1743
1744 codebits[7] = val & 7;
1745 val >>= 3;
1746 bits -= 3;
1747
1748 if (nclen == 6)
1749 goto codebitsdone;
1750
1751 codebits[9] = val & 7;
1752 val >>= 3;
1753 bits -= 3;
1754
1755 if (nclen == 7)
1756 goto codebitsdone;
1757
1758 codebits[6] = val & 7;
1759 val >>= 3;
1760 bits -= 3;
1761
1762 if (nclen == 8)
1763 goto codebitsdone;
1764
1765 codebits[10] = val & 7;
1766 val >>= 3;
1767 bits -= 3;
1768
1769 if (nclen == 9)
1770 goto codebitsdone;
1771
1772 codebits[5] = val & 7;
1773 val >>= 3;
1774 bits -= 3;
1775
1776 if (nclen == 10)
1777 goto codebitsdone;
1778
1779 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1780 return 0;
1781
1782 codebits[11] = val & 7;
1783 val >>= 3;
1784 bits -= 3;
1785
1786 if (nclen == 11)
1787 goto codebitsdone;
1788
1789 codebits[4] = val & 7;
1790 val >>= 3;
1791 bits -= 3;
1792
1793 if (nclen == 12)
1794 goto codebitsdone;
1795
1796 codebits[12] = val & 7;
1797 val >>= 3;
1798 bits -= 3;
1799
1800 if (nclen == 13)
1801 goto codebitsdone;
1802
1803 codebits[3] = val & 7;
1804 val >>= 3;
1805 bits -= 3;
1806
1807 if (nclen == 14)
1808 goto codebitsdone;
1809
1810 codebits[13] = val & 7;
1811 val >>= 3;
1812 bits -= 3;
1813
1814 if (nclen == 15)
1815 goto codebitsdone;
1816
1817 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1818 return 0;
1819
1820 codebits[2] = val & 7;
1821 val >>= 3;
1822 bits -= 3;
1823
1824 if (nclen == 16)
1825 goto codebitsdone;
1826
1827 codebits[14] = val & 7;
1828 val >>= 3;
1829 bits -= 3;
1830
1831 if (nclen == 17)
1832 goto codebitsdone;
1833
1834 codebits[1] = val & 7;
1835 val >>= 3;
1836 bits -= 3;
1837
1838 if (nclen == 18)
1839 goto codebitsdone;
1840
1841 codebits[15] = val & 7;
1842 val >>= 3;
1843 bits -= 3;
1844
1845 codebitsdone:
1846
1847 if (!elf_zlib_inflate_table (codebits, 19, zdebug_table,
1848 zdebug_table))
1849 return 0;
1850
1851 /* Read the compressed bit lengths of the literal,
1852 length, and distance codes. We have allocated space
1853 at the end of zdebug_table to hold them. */
1854
1855 plenbase = (((unsigned char *) zdebug_table)
1856 + ZDEBUG_TABLE_CODELEN_OFFSET);
1857 plen = plenbase;
1858 plenend = plen + nlit + ndist;
1859 while (plen < plenend)
1860 {
1861 uint16_t t;
1862 unsigned int b;
1863 uint16_t v;
1864
1865 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1866 return 0;
1867
1868 t = zdebug_table[val & 0xff];
1869
1870 /* The compression here uses bit lengths up to 7, so
1871 a secondary table is never necessary. */
1872 if (unlikely ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) != 0))
1873 {
1874 elf_zlib_failed ();
1875 return 0;
1876 }
1877
1878 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
1879 val >>= b + 1;
1880 bits -= b + 1;
1881
1882 v = t & HUFFMAN_VALUE_MASK;
1883 if (v < 16)
1884 *plen++ = v;
1885 else if (v == 16)
1886 {
1887 unsigned int c;
1888 unsigned int prev;
1889
1890 /* Copy previous entry 3 to 6 times. */
1891
1892 if (unlikely (plen == plenbase))
1893 {
1894 elf_zlib_failed ();
1895 return 0;
1896 }
1897
1898 /* We used up to 7 bits since the last
1899 elf_zlib_fetch, so we have at least 8 bits
1900 available here. */
1901
1902 c = 3 + (val & 0x3);
1903 val >>= 2;
1904 bits -= 2;
1905 if (unlikely ((unsigned int) (plenend - plen) < c))
1906 {
1907 elf_zlib_failed ();
1908 return 0;
1909 }
1910
1911 prev = plen[-1];
1912 switch (c)
1913 {
1914 case 6:
1915 *plen++ = prev;
1916 /* fallthrough */
1917 case 5:
1918 *plen++ = prev;
1919 /* fallthrough */
1920 case 4:
1921 *plen++ = prev;
1922 }
1923 *plen++ = prev;
1924 *plen++ = prev;
1925 *plen++ = prev;
1926 }
1927 else if (v == 17)
1928 {
1929 unsigned int c;
1930
1931 /* Store zero 3 to 10 times. */
1932
1933 /* We used up to 7 bits since the last
1934 elf_zlib_fetch, so we have at least 8 bits
1935 available here. */
1936
1937 c = 3 + (val & 0x7);
1938 val >>= 3;
1939 bits -= 3;
1940 if (unlikely ((unsigned int) (plenend - plen) < c))
1941 {
1942 elf_zlib_failed ();
1943 return 0;
1944 }
1945
1946 switch (c)
1947 {
1948 case 10:
1949 *plen++ = 0;
1950 /* fallthrough */
1951 case 9:
1952 *plen++ = 0;
1953 /* fallthrough */
1954 case 8:
1955 *plen++ = 0;
1956 /* fallthrough */
1957 case 7:
1958 *plen++ = 0;
1959 /* fallthrough */
1960 case 6:
1961 *plen++ = 0;
1962 /* fallthrough */
1963 case 5:
1964 *plen++ = 0;
1965 /* fallthrough */
1966 case 4:
1967 *plen++ = 0;
1968 }
1969 *plen++ = 0;
1970 *plen++ = 0;
1971 *plen++ = 0;
1972 }
1973 else if (v == 18)
1974 {
1975 unsigned int c;
1976
1977 /* Store zero 11 to 138 times. */
1978
1979 /* We used up to 7 bits since the last
1980 elf_zlib_fetch, so we have at least 8 bits
1981 available here. */
1982
1983 c = 11 + (val & 0x7f);
1984 val >>= 7;
1985 bits -= 7;
1986 if (unlikely ((unsigned int) (plenend - plen) < c))
1987 {
1988 elf_zlib_failed ();
1989 return 0;
1990 }
1991
1992 memset (plen, 0, c);
1993 plen += c;
1994 }
1995 else
1996 {
1997 elf_zlib_failed ();
1998 return 0;
1999 }
2000 }
2001
2002 /* Make sure that the stop code can appear. */
2003
2004 plen = plenbase;
2005 if (unlikely (plen[256] == 0))
2006 {
2007 elf_zlib_failed ();
2008 return 0;
2009 }
2010
2011 /* Build the decompression tables. */
2012
2013 if (!elf_zlib_inflate_table (plen, nlit, zdebug_table,
2014 zdebug_table))
2015 return 0;
2016 if (!elf_zlib_inflate_table (plen + nlit, ndist, zdebug_table,
2017 zdebug_table + HUFFMAN_TABLE_SIZE))
2018 return 0;
2019 tlit = zdebug_table;
2020 tdist = zdebug_table + HUFFMAN_TABLE_SIZE;
2021 }
2022
2023 /* Inflate values until the end of the block. This is the
2024 main loop of the inflation code. */
2025
2026 while (1)
2027 {
2028 uint16_t t;
2029 unsigned int b;
2030 uint16_t v;
2031 unsigned int lit;
2032
2033 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2034 return 0;
2035
2036 t = tlit[val & 0xff];
2037 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2038 v = t & HUFFMAN_VALUE_MASK;
2039
2040 if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0)
2041 {
2042 lit = v;
2043 val >>= b + 1;
2044 bits -= b + 1;
2045 }
2046 else
2047 {
2048 t = tlit[v + 0x100 + ((val >> 8) & ((1U << b) - 1))];
2049 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2050 lit = t & HUFFMAN_VALUE_MASK;
2051 val >>= b + 8;
2052 bits -= b + 8;
2053 }
2054
2055 if (lit < 256)
2056 {
2057 if (unlikely (pout == poutend))
2058 {
2059 elf_zlib_failed ();
2060 return 0;
2061 }
2062
2063 *pout++ = lit;
2064
2065 /* We will need to write the next byte soon. We ask
2066 for high temporal locality because we will write
2067 to the whole cache line soon. */
2068 __builtin_prefetch (pout, 1, 3);
2069 }
2070 else if (lit == 256)
2071 {
2072 /* The end of the block. */
2073 break;
2074 }
2075 else
2076 {
2077 unsigned int dist;
2078 unsigned int len;
2079
2080 /* Convert lit into a length. */
2081
2082 if (lit < 265)
2083 len = lit - 257 + 3;
2084 else if (lit == 285)
2085 len = 258;
2086 else if (unlikely (lit > 285))
2087 {
2088 elf_zlib_failed ();
2089 return 0;
2090 }
2091 else
2092 {
2093 unsigned int extra;
2094
2095 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2096 return 0;
2097
2098 /* This is an expression for the table of length
2099 codes in RFC 1951 3.2.5. */
2100 lit -= 265;
2101 extra = (lit >> 2) + 1;
2102 len = (lit & 3) << extra;
2103 len += 11;
2104 len += ((1U << (extra - 1)) - 1) << 3;
2105 len += val & ((1U << extra) - 1);
2106 val >>= extra;
2107 bits -= extra;
2108 }
2109
2110 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2111 return 0;
2112
2113 t = tdist[val & 0xff];
2114 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2115 v = t & HUFFMAN_VALUE_MASK;
2116
2117 if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0)
2118 {
2119 dist = v;
2120 val >>= b + 1;
2121 bits -= b + 1;
2122 }
2123 else
2124 {
2125 t = tdist[v + 0x100 + ((val >> 8) & ((1U << b) - 1))];
2126 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2127 dist = t & HUFFMAN_VALUE_MASK;
2128 val >>= b + 8;
2129 bits -= b + 8;
2130 }
2131
2132 /* Convert dist to a distance. */
2133
2134 if (dist == 0)
2135 {
2136 /* A distance of 1. A common case, meaning
2137 repeat the last character LEN times. */
2138
2139 if (unlikely (pout == porigout))
2140 {
2141 elf_zlib_failed ();
2142 return 0;
2143 }
2144
2145 if (unlikely ((unsigned int) (poutend - pout) < len))
2146 {
2147 elf_zlib_failed ();
2148 return 0;
2149 }
2150
2151 memset (pout, pout[-1], len);
2152 pout += len;
2153 }
2154 else if (unlikely (dist > 29))
2155 {
2156 elf_zlib_failed ();
2157 return 0;
2158 }
2159 else
2160 {
2161 if (dist < 4)
2162 dist = dist + 1;
2163 else
2164 {
2165 unsigned int extra;
2166
2167 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2168 return 0;
2169
2170 /* This is an expression for the table of
2171 distance codes in RFC 1951 3.2.5. */
2172 dist -= 4;
2173 extra = (dist >> 1) + 1;
2174 dist = (dist & 1) << extra;
2175 dist += 5;
2176 dist += ((1U << (extra - 1)) - 1) << 2;
2177 dist += val & ((1U << extra) - 1);
2178 val >>= extra;
2179 bits -= extra;
2180 }
2181
2182 /* Go back dist bytes, and copy len bytes from
2183 there. */
2184
2185 if (unlikely ((unsigned int) (pout - porigout) < dist))
2186 {
2187 elf_zlib_failed ();
2188 return 0;
2189 }
2190
2191 if (unlikely ((unsigned int) (poutend - pout) < len))
2192 {
2193 elf_zlib_failed ();
2194 return 0;
2195 }
2196
2197 if (dist >= len)
2198 {
2199 memcpy (pout, pout - dist, len);
2200 pout += len;
2201 }
2202 else
2203 {
2204 while (len > 0)
2205 {
2206 unsigned int copy;
2207
2208 copy = len < dist ? len : dist;
2209 memcpy (pout, pout - dist, copy);
2210 len -= copy;
2211 pout += copy;
2212 }
2213 }
2214 }
2215 }
2216 }
2217 }
2218 }
2219
2220 /* We should have filled the output buffer. */
2221 if (unlikely (pout != poutend))
2222 {
2223 elf_zlib_failed ();
2224 return 0;
2225 }
2226
2227 return 1;
2228 }
2229
2230 /* Verify the zlib checksum. The checksum is in the 4 bytes at
2231 CHECKBYTES, and the uncompressed data is at UNCOMPRESSED /
2232 UNCOMPRESSED_SIZE. Returns 1 on success, 0 on failure. */
2233
2234 static int
2235 elf_zlib_verify_checksum (const unsigned char *checkbytes,
2236 const unsigned char *uncompressed,
2237 size_t uncompressed_size)
2238 {
2239 unsigned int i;
2240 unsigned int cksum;
2241 const unsigned char *p;
2242 uint32_t s1;
2243 uint32_t s2;
2244 size_t hsz;
2245
2246 cksum = 0;
2247 for (i = 0; i < 4; i++)
2248 cksum = (cksum << 8) | checkbytes[i];
2249
2250 s1 = 1;
2251 s2 = 0;
2252
2253 /* Minimize modulo operations. */
2254
2255 p = uncompressed;
2256 hsz = uncompressed_size;
2257 while (hsz >= 5552)
2258 {
2259 for (i = 0; i < 5552; i += 16)
2260 {
2261 /* Manually unroll loop 16 times. */
2262 s1 = s1 + *p++;
2263 s2 = s2 + s1;
2264 s1 = s1 + *p++;
2265 s2 = s2 + s1;
2266 s1 = s1 + *p++;
2267 s2 = s2 + s1;
2268 s1 = s1 + *p++;
2269 s2 = s2 + s1;
2270 s1 = s1 + *p++;
2271 s2 = s2 + s1;
2272 s1 = s1 + *p++;
2273 s2 = s2 + s1;
2274 s1 = s1 + *p++;
2275 s2 = s2 + s1;
2276 s1 = s1 + *p++;
2277 s2 = s2 + s1;
2278 s1 = s1 + *p++;
2279 s2 = s2 + s1;
2280 s1 = s1 + *p++;
2281 s2 = s2 + s1;
2282 s1 = s1 + *p++;
2283 s2 = s2 + s1;
2284 s1 = s1 + *p++;
2285 s2 = s2 + s1;
2286 s1 = s1 + *p++;
2287 s2 = s2 + s1;
2288 s1 = s1 + *p++;
2289 s2 = s2 + s1;
2290 s1 = s1 + *p++;
2291 s2 = s2 + s1;
2292 s1 = s1 + *p++;
2293 s2 = s2 + s1;
2294 }
2295 hsz -= 5552;
2296 s1 %= 65521;
2297 s2 %= 65521;
2298 }
2299
2300 while (hsz >= 16)
2301 {
2302 /* Manually unroll loop 16 times. */
2303 s1 = s1 + *p++;
2304 s2 = s2 + s1;
2305 s1 = s1 + *p++;
2306 s2 = s2 + s1;
2307 s1 = s1 + *p++;
2308 s2 = s2 + s1;
2309 s1 = s1 + *p++;
2310 s2 = s2 + s1;
2311 s1 = s1 + *p++;
2312 s2 = s2 + s1;
2313 s1 = s1 + *p++;
2314 s2 = s2 + s1;
2315 s1 = s1 + *p++;
2316 s2 = s2 + s1;
2317 s1 = s1 + *p++;
2318 s2 = s2 + s1;
2319 s1 = s1 + *p++;
2320 s2 = s2 + s1;
2321 s1 = s1 + *p++;
2322 s2 = s2 + s1;
2323 s1 = s1 + *p++;
2324 s2 = s2 + s1;
2325 s1 = s1 + *p++;
2326 s2 = s2 + s1;
2327 s1 = s1 + *p++;
2328 s2 = s2 + s1;
2329 s1 = s1 + *p++;
2330 s2 = s2 + s1;
2331 s1 = s1 + *p++;
2332 s2 = s2 + s1;
2333 s1 = s1 + *p++;
2334 s2 = s2 + s1;
2335
2336 hsz -= 16;
2337 }
2338
2339 for (i = 0; i < hsz; ++i)
2340 {
2341 s1 = s1 + *p++;
2342 s2 = s2 + s1;
2343 }
2344
2345 s1 %= 65521;
2346 s2 %= 65521;
2347
2348 if (unlikely ((s2 << 16) + s1 != cksum))
2349 {
2350 elf_zlib_failed ();
2351 return 0;
2352 }
2353
2354 return 1;
2355 }
2356
2357 /* Inflate a zlib stream from PIN/SIN to POUT/SOUT, and verify the
2358 checksum. Return 1 on success, 0 on error. */
2359
2360 static int
2361 elf_zlib_inflate_and_verify (const unsigned char *pin, size_t sin,
2362 uint16_t *zdebug_table, unsigned char *pout,
2363 size_t sout)
2364 {
2365 if (!elf_zlib_inflate (pin, sin, zdebug_table, pout, sout))
2366 return 0;
2367 if (!elf_zlib_verify_checksum (pin + sin - 4, pout, sout))
2368 return 0;
2369 return 1;
2370 }
2371
2372 /* Uncompress the old compressed debug format, the one emitted by
2373 --compress-debug-sections=zlib-gnu. The compressed data is in
2374 COMPRESSED / COMPRESSED_SIZE, and the function writes to
2375 *UNCOMPRESSED / *UNCOMPRESSED_SIZE. ZDEBUG_TABLE is work space to
2376 hold Huffman tables. Returns 0 on error, 1 on successful
2377 decompression or if something goes wrong. In general we try to
2378 carry on, by returning 1, even if we can't decompress. */
2379
2380 static int
2381 elf_uncompress_zdebug (struct backtrace_state *state,
2382 const unsigned char *compressed, size_t compressed_size,
2383 uint16_t *zdebug_table,
2384 backtrace_error_callback error_callback, void *data,
2385 unsigned char **uncompressed, size_t *uncompressed_size)
2386 {
2387 size_t sz;
2388 size_t i;
2389 unsigned char *po;
2390
2391 *uncompressed = NULL;
2392 *uncompressed_size = 0;
2393
2394 /* The format starts with the four bytes ZLIB, followed by the 8
2395 byte length of the uncompressed data in big-endian order,
2396 followed by a zlib stream. */
2397
2398 if (compressed_size < 12 || memcmp (compressed, "ZLIB", 4) != 0)
2399 return 1;
2400
2401 sz = 0;
2402 for (i = 0; i < 8; i++)
2403 sz = (sz << 8) | compressed[i + 4];
2404
2405 if (*uncompressed != NULL && *uncompressed_size >= sz)
2406 po = *uncompressed;
2407 else
2408 {
2409 po = (unsigned char *) backtrace_alloc (state, sz, error_callback, data);
2410 if (po == NULL)
2411 return 0;
2412 }
2413
2414 if (!elf_zlib_inflate_and_verify (compressed + 12, compressed_size - 12,
2415 zdebug_table, po, sz))
2416 return 1;
2417
2418 *uncompressed = po;
2419 *uncompressed_size = sz;
2420
2421 return 1;
2422 }
2423
2424 /* Uncompress the new compressed debug format, the official standard
2425 ELF approach emitted by --compress-debug-sections=zlib-gabi. The
2426 compressed data is in COMPRESSED / COMPRESSED_SIZE, and the
2427 function writes to *UNCOMPRESSED / *UNCOMPRESSED_SIZE.
2428 ZDEBUG_TABLE is work space as for elf_uncompress_zdebug. Returns 0
2429 on error, 1 on successful decompression or if something goes wrong.
2430 In general we try to carry on, by returning 1, even if we can't
2431 decompress. */
2432
2433 static int
2434 elf_uncompress_chdr (struct backtrace_state *state,
2435 const unsigned char *compressed, size_t compressed_size,
2436 uint16_t *zdebug_table,
2437 backtrace_error_callback error_callback, void *data,
2438 unsigned char **uncompressed, size_t *uncompressed_size)
2439 {
2440 const b_elf_chdr *chdr;
2441 unsigned char *po;
2442
2443 *uncompressed = NULL;
2444 *uncompressed_size = 0;
2445
2446 /* The format starts with an ELF compression header. */
2447 if (compressed_size < sizeof (b_elf_chdr))
2448 return 1;
2449
2450 chdr = (const b_elf_chdr *) compressed;
2451
2452 if (chdr->ch_type != ELFCOMPRESS_ZLIB)
2453 {
2454 /* Unsupported compression algorithm. */
2455 return 1;
2456 }
2457
2458 if (*uncompressed != NULL && *uncompressed_size >= chdr->ch_size)
2459 po = *uncompressed;
2460 else
2461 {
2462 po = (unsigned char *) backtrace_alloc (state, chdr->ch_size,
2463 error_callback, data);
2464 if (po == NULL)
2465 return 0;
2466 }
2467
2468 if (!elf_zlib_inflate_and_verify (compressed + sizeof (b_elf_chdr),
2469 compressed_size - sizeof (b_elf_chdr),
2470 zdebug_table, po, chdr->ch_size))
2471 return 1;
2472
2473 *uncompressed = po;
2474 *uncompressed_size = chdr->ch_size;
2475
2476 return 1;
2477 }
2478
2479 /* This function is a hook for testing the zlib support. It is only
2480 used by tests. */
2481
2482 int
2483 backtrace_uncompress_zdebug (struct backtrace_state *state,
2484 const unsigned char *compressed,
2485 size_t compressed_size,
2486 backtrace_error_callback error_callback,
2487 void *data, unsigned char **uncompressed,
2488 size_t *uncompressed_size)
2489 {
2490 uint16_t *zdebug_table;
2491 int ret;
2492
2493 zdebug_table = ((uint16_t *) backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
2494 error_callback, data));
2495 if (zdebug_table == NULL)
2496 return 0;
2497 ret = elf_uncompress_zdebug (state, compressed, compressed_size,
2498 zdebug_table, error_callback, data,
2499 uncompressed, uncompressed_size);
2500 backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE,
2501 error_callback, data);
2502 return ret;
2503 }
2504
2505 /* Add the backtrace data for one ELF file. Returns 1 on success,
2506 0 on failure (in both cases descriptor is closed) or -1 if exe
2507 is non-zero and the ELF file is ET_DYN, which tells the caller that
2508 elf_add will need to be called on the descriptor again after
2509 base_address is determined. */
2510
2511 static int
2512 elf_add (struct backtrace_state *state, const char *filename, int descriptor,
2513 uintptr_t base_address, backtrace_error_callback error_callback,
2514 void *data, fileline *fileline_fn, int *found_sym, int *found_dwarf,
2515 int exe, int debuginfo)
2516 {
2517 struct backtrace_view ehdr_view;
2518 b_elf_ehdr ehdr;
2519 off_t shoff;
2520 unsigned int shnum;
2521 unsigned int shstrndx;
2522 struct backtrace_view shdrs_view;
2523 int shdrs_view_valid;
2524 const b_elf_shdr *shdrs;
2525 const b_elf_shdr *shstrhdr;
2526 size_t shstr_size;
2527 off_t shstr_off;
2528 struct backtrace_view names_view;
2529 int names_view_valid;
2530 const char *names;
2531 unsigned int symtab_shndx;
2532 unsigned int dynsym_shndx;
2533 unsigned int i;
2534 struct debug_section_info sections[DEBUG_MAX];
2535 struct backtrace_view symtab_view;
2536 int symtab_view_valid;
2537 struct backtrace_view strtab_view;
2538 int strtab_view_valid;
2539 struct backtrace_view buildid_view;
2540 int buildid_view_valid;
2541 const char *buildid_data;
2542 uint32_t buildid_size;
2543 struct backtrace_view debuglink_view;
2544 int debuglink_view_valid;
2545 const char *debuglink_name;
2546 uint32_t debuglink_crc;
2547 off_t min_offset;
2548 off_t max_offset;
2549 struct backtrace_view debug_view;
2550 int debug_view_valid;
2551 unsigned int using_debug_view;
2552 uint16_t *zdebug_table;
2553
2554 *found_sym = 0;
2555 *found_dwarf = 0;
2556
2557 shdrs_view_valid = 0;
2558 names_view_valid = 0;
2559 symtab_view_valid = 0;
2560 strtab_view_valid = 0;
2561 buildid_view_valid = 0;
2562 buildid_data = NULL;
2563 buildid_size = 0;
2564 debuglink_view_valid = 0;
2565 debuglink_name = NULL;
2566 debuglink_crc = 0;
2567 debug_view_valid = 0;
2568
2569 if (!backtrace_get_view (state, descriptor, 0, sizeof ehdr, error_callback,
2570 data, &ehdr_view))
2571 goto fail;
2572
2573 memcpy (&ehdr, ehdr_view.data, sizeof ehdr);
2574
2575 backtrace_release_view (state, &ehdr_view, error_callback, data);
2576
2577 if (ehdr.e_ident[EI_MAG0] != ELFMAG0
2578 || ehdr.e_ident[EI_MAG1] != ELFMAG1
2579 || ehdr.e_ident[EI_MAG2] != ELFMAG2
2580 || ehdr.e_ident[EI_MAG3] != ELFMAG3)
2581 {
2582 error_callback (data, "executable file is not ELF", 0);
2583 goto fail;
2584 }
2585 if (ehdr.e_ident[EI_VERSION] != EV_CURRENT)
2586 {
2587 error_callback (data, "executable file is unrecognized ELF version", 0);
2588 goto fail;
2589 }
2590
2591 #if BACKTRACE_ELF_SIZE == 32
2592 #define BACKTRACE_ELFCLASS ELFCLASS32
2593 #else
2594 #define BACKTRACE_ELFCLASS ELFCLASS64
2595 #endif
2596
2597 if (ehdr.e_ident[EI_CLASS] != BACKTRACE_ELFCLASS)
2598 {
2599 error_callback (data, "executable file is unexpected ELF class", 0);
2600 goto fail;
2601 }
2602
2603 if (ehdr.e_ident[EI_DATA] != ELFDATA2LSB
2604 && ehdr.e_ident[EI_DATA] != ELFDATA2MSB)
2605 {
2606 error_callback (data, "executable file has unknown endianness", 0);
2607 goto fail;
2608 }
2609
2610 /* If the executable is ET_DYN, it is either a PIE, or we are running
2611 directly a shared library with .interp. We need to wait for
2612 dl_iterate_phdr in that case to determine the actual base_address. */
2613 if (exe && ehdr.e_type == ET_DYN)
2614 return -1;
2615
2616 shoff = ehdr.e_shoff;
2617 shnum = ehdr.e_shnum;
2618 shstrndx = ehdr.e_shstrndx;
2619
2620 if ((shnum == 0 || shstrndx == SHN_XINDEX)
2621 && shoff != 0)
2622 {
2623 struct backtrace_view shdr_view;
2624 const b_elf_shdr *shdr;
2625
2626 if (!backtrace_get_view (state, descriptor, shoff, sizeof shdr,
2627 error_callback, data, &shdr_view))
2628 goto fail;
2629
2630 shdr = (const b_elf_shdr *) shdr_view.data;
2631
2632 if (shnum == 0)
2633 shnum = shdr->sh_size;
2634
2635 if (shstrndx == SHN_XINDEX)
2636 {
2637 shstrndx = shdr->sh_link;
2638
2639 /* Versions of the GNU binutils between 2.12 and 2.18 did
2640 not handle objects with more than SHN_LORESERVE sections
2641 correctly. All large section indexes were offset by
2642 0x100. There is more information at
2643 http://sourceware.org/bugzilla/show_bug.cgi?id-5900 .
2644 Fortunately these object files are easy to detect, as the
2645 GNU binutils always put the section header string table
2646 near the end of the list of sections. Thus if the
2647 section header string table index is larger than the
2648 number of sections, then we know we have to subtract
2649 0x100 to get the real section index. */
2650 if (shstrndx >= shnum && shstrndx >= SHN_LORESERVE + 0x100)
2651 shstrndx -= 0x100;
2652 }
2653
2654 backtrace_release_view (state, &shdr_view, error_callback, data);
2655 }
2656
2657 /* To translate PC to file/line when using DWARF, we need to find
2658 the .debug_info and .debug_line sections. */
2659
2660 /* Read the section headers, skipping the first one. */
2661
2662 if (!backtrace_get_view (state, descriptor, shoff + sizeof (b_elf_shdr),
2663 (shnum - 1) * sizeof (b_elf_shdr),
2664 error_callback, data, &shdrs_view))
2665 goto fail;
2666 shdrs_view_valid = 1;
2667 shdrs = (const b_elf_shdr *) shdrs_view.data;
2668
2669 /* Read the section names. */
2670
2671 shstrhdr = &shdrs[shstrndx - 1];
2672 shstr_size = shstrhdr->sh_size;
2673 shstr_off = shstrhdr->sh_offset;
2674
2675 if (!backtrace_get_view (state, descriptor, shstr_off, shstr_size,
2676 error_callback, data, &names_view))
2677 goto fail;
2678 names_view_valid = 1;
2679 names = (const char *) names_view.data;
2680
2681 symtab_shndx = 0;
2682 dynsym_shndx = 0;
2683
2684 memset (sections, 0, sizeof sections);
2685
2686 /* Look for the symbol table. */
2687 for (i = 1; i < shnum; ++i)
2688 {
2689 const b_elf_shdr *shdr;
2690 unsigned int sh_name;
2691 const char *name;
2692 int j;
2693
2694 shdr = &shdrs[i - 1];
2695
2696 if (shdr->sh_type == SHT_SYMTAB)
2697 symtab_shndx = i;
2698 else if (shdr->sh_type == SHT_DYNSYM)
2699 dynsym_shndx = i;
2700
2701 sh_name = shdr->sh_name;
2702 if (sh_name >= shstr_size)
2703 {
2704 error_callback (data, "ELF section name out of range", 0);
2705 goto fail;
2706 }
2707
2708 name = names + sh_name;
2709
2710 for (j = 0; j < (int) DEBUG_MAX; ++j)
2711 {
2712 if (strcmp (name, debug_section_names[j]) == 0)
2713 {
2714 sections[j].offset = shdr->sh_offset;
2715 sections[j].size = shdr->sh_size;
2716 sections[j].compressed = (shdr->sh_flags & SHF_COMPRESSED) != 0;
2717 break;
2718 }
2719 }
2720
2721 /* Read the build ID if present. This could check for any
2722 SHT_NOTE section with the right note name and type, but gdb
2723 looks for a specific section name. */
2724 if (!debuginfo
2725 && !buildid_view_valid
2726 && strcmp (name, ".note.gnu.build-id") == 0)
2727 {
2728 const b_elf_note *note;
2729
2730 if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
2731 shdr->sh_size, error_callback, data,
2732 &buildid_view))
2733 goto fail;
2734
2735 buildid_view_valid = 1;
2736 note = (const b_elf_note *) buildid_view.data;
2737 if (note->type == NT_GNU_BUILD_ID
2738 && note->namesz == 4
2739 && strncmp (note->name, "GNU", 4) == 0
2740 && shdr->sh_size < 12 + ((note->namesz + 3) & ~ 3) + note->descsz)
2741 {
2742 buildid_data = &note->name[0] + ((note->namesz + 3) & ~ 3);
2743 buildid_size = note->descsz;
2744 }
2745 }
2746
2747 /* Read the debuglink file if present. */
2748 if (!debuginfo
2749 && !debuglink_view_valid
2750 && strcmp (name, ".gnu_debuglink") == 0)
2751 {
2752 const char *debuglink_data;
2753 size_t crc_offset;
2754
2755 if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
2756 shdr->sh_size, error_callback, data,
2757 &debuglink_view))
2758 goto fail;
2759
2760 debuglink_view_valid = 1;
2761 debuglink_data = (const char *) debuglink_view.data;
2762 crc_offset = strnlen (debuglink_data, shdr->sh_size);
2763 crc_offset = (crc_offset + 3) & ~3;
2764 if (crc_offset + 4 <= shdr->sh_size)
2765 {
2766 debuglink_name = debuglink_data;
2767 debuglink_crc = *(const uint32_t*)(debuglink_data + crc_offset);
2768 }
2769 }
2770 }
2771
2772 if (symtab_shndx == 0)
2773 symtab_shndx = dynsym_shndx;
2774 if (symtab_shndx != 0 && !debuginfo)
2775 {
2776 const b_elf_shdr *symtab_shdr;
2777 unsigned int strtab_shndx;
2778 const b_elf_shdr *strtab_shdr;
2779 struct elf_syminfo_data *sdata;
2780
2781 symtab_shdr = &shdrs[symtab_shndx - 1];
2782 strtab_shndx = symtab_shdr->sh_link;
2783 if (strtab_shndx >= shnum)
2784 {
2785 error_callback (data,
2786 "ELF symbol table strtab link out of range", 0);
2787 goto fail;
2788 }
2789 strtab_shdr = &shdrs[strtab_shndx - 1];
2790
2791 if (!backtrace_get_view (state, descriptor, symtab_shdr->sh_offset,
2792 symtab_shdr->sh_size, error_callback, data,
2793 &symtab_view))
2794 goto fail;
2795 symtab_view_valid = 1;
2796
2797 if (!backtrace_get_view (state, descriptor, strtab_shdr->sh_offset,
2798 strtab_shdr->sh_size, error_callback, data,
2799 &strtab_view))
2800 goto fail;
2801 strtab_view_valid = 1;
2802
2803 sdata = ((struct elf_syminfo_data *)
2804 backtrace_alloc (state, sizeof *sdata, error_callback, data));
2805 if (sdata == NULL)
2806 goto fail;
2807
2808 if (!elf_initialize_syminfo (state, base_address,
2809 symtab_view.data, symtab_shdr->sh_size,
2810 strtab_view.data, strtab_shdr->sh_size,
2811 error_callback, data, sdata))
2812 {
2813 backtrace_free (state, sdata, sizeof *sdata, error_callback, data);
2814 goto fail;
2815 }
2816
2817 /* We no longer need the symbol table, but we hold on to the
2818 string table permanently. */
2819 backtrace_release_view (state, &symtab_view, error_callback, data);
2820 symtab_view_valid = 0;
2821
2822 *found_sym = 1;
2823
2824 elf_add_syminfo_data (state, sdata);
2825 }
2826
2827 backtrace_release_view (state, &shdrs_view, error_callback, data);
2828 shdrs_view_valid = 0;
2829 backtrace_release_view (state, &names_view, error_callback, data);
2830 names_view_valid = 0;
2831
2832 /* If the debug info is in a separate file, read that one instead. */
2833
2834 if (buildid_data != NULL)
2835 {
2836 int d;
2837
2838 d = elf_open_debugfile_by_buildid (state, buildid_data, buildid_size,
2839 error_callback, data);
2840 if (d >= 0)
2841 {
2842 backtrace_release_view (state, &buildid_view, error_callback, data);
2843 if (debuglink_view_valid)
2844 backtrace_release_view (state, &debuglink_view, error_callback,
2845 data);
2846 return elf_add (state, NULL, d, base_address, error_callback, data,
2847 fileline_fn, found_sym, found_dwarf, 0, 1);
2848 }
2849 }
2850
2851 if (buildid_view_valid)
2852 {
2853 backtrace_release_view (state, &buildid_view, error_callback, data);
2854 buildid_view_valid = 0;
2855 }
2856
2857 if (debuglink_name != NULL)
2858 {
2859 int d;
2860
2861 d = elf_open_debugfile_by_debuglink (state, filename, debuglink_name,
2862 debuglink_crc, error_callback,
2863 data);
2864 if (d >= 0)
2865 {
2866 backtrace_release_view (state, &debuglink_view, error_callback,
2867 data);
2868 return elf_add (state, NULL, d, base_address, error_callback, data,
2869 fileline_fn, found_sym, found_dwarf, 0, 1);
2870 }
2871 }
2872
2873 if (debuglink_view_valid)
2874 {
2875 backtrace_release_view (state, &debuglink_view, error_callback, data);
2876 debuglink_view_valid = 0;
2877 }
2878
2879 /* Read all the debug sections in a single view, since they are
2880 probably adjacent in the file. We never release this view. */
2881
2882 min_offset = 0;
2883 max_offset = 0;
2884 for (i = 0; i < (int) DEBUG_MAX; ++i)
2885 {
2886 off_t end;
2887
2888 if (sections[i].size == 0)
2889 continue;
2890 if (min_offset == 0 || sections[i].offset < min_offset)
2891 min_offset = sections[i].offset;
2892 end = sections[i].offset + sections[i].size;
2893 if (end > max_offset)
2894 max_offset = end;
2895 }
2896 if (min_offset == 0 || max_offset == 0)
2897 {
2898 if (!backtrace_close (descriptor, error_callback, data))
2899 goto fail;
2900 return 1;
2901 }
2902
2903 if (!backtrace_get_view (state, descriptor, min_offset,
2904 max_offset - min_offset,
2905 error_callback, data, &debug_view))
2906 goto fail;
2907 debug_view_valid = 1;
2908
2909 /* We've read all we need from the executable. */
2910 if (!backtrace_close (descriptor, error_callback, data))
2911 goto fail;
2912 descriptor = -1;
2913
2914 using_debug_view = 0;
2915 for (i = 0; i < (int) DEBUG_MAX; ++i)
2916 {
2917 if (sections[i].size == 0)
2918 sections[i].data = NULL;
2919 else
2920 {
2921 sections[i].data = ((const unsigned char *) debug_view.data
2922 + (sections[i].offset - min_offset));
2923 if (i < ZDEBUG_INFO)
2924 ++using_debug_view;
2925 }
2926 }
2927
2928 /* Uncompress the old format (--compress-debug-sections=zlib-gnu). */
2929
2930 zdebug_table = NULL;
2931 for (i = 0; i < ZDEBUG_INFO; ++i)
2932 {
2933 struct debug_section_info *pz;
2934
2935 pz = &sections[i + ZDEBUG_INFO - DEBUG_INFO];
2936 if (sections[i].size == 0 && pz->size > 0)
2937 {
2938 unsigned char *uncompressed_data;
2939 size_t uncompressed_size;
2940
2941 if (zdebug_table == NULL)
2942 {
2943 zdebug_table = ((uint16_t *)
2944 backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
2945 error_callback, data));
2946 if (zdebug_table == NULL)
2947 goto fail;
2948 }
2949
2950 uncompressed_data = NULL;
2951 uncompressed_size = 0;
2952 if (!elf_uncompress_zdebug (state, pz->data, pz->size, zdebug_table,
2953 error_callback, data,
2954 &uncompressed_data, &uncompressed_size))
2955 goto fail;
2956 sections[i].data = uncompressed_data;
2957 sections[i].size = uncompressed_size;
2958 sections[i].compressed = 0;
2959 }
2960 }
2961
2962 /* Uncompress the official ELF format
2963 (--compress-debug-sections=zlib-gabi). */
2964 for (i = 0; i < ZDEBUG_INFO; ++i)
2965 {
2966 unsigned char *uncompressed_data;
2967 size_t uncompressed_size;
2968
2969 if (sections[i].size == 0 || !sections[i].compressed)
2970 continue;
2971
2972 if (zdebug_table == NULL)
2973 {
2974 zdebug_table = ((uint16_t *)
2975 backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
2976 error_callback, data));
2977 if (zdebug_table == NULL)
2978 goto fail;
2979 }
2980
2981 uncompressed_data = NULL;
2982 uncompressed_size = 0;
2983 if (!elf_uncompress_chdr (state, sections[i].data, sections[i].size,
2984 zdebug_table, error_callback, data,
2985 &uncompressed_data, &uncompressed_size))
2986 goto fail;
2987 sections[i].data = uncompressed_data;
2988 sections[i].size = uncompressed_size;
2989 sections[i].compressed = 0;
2990
2991 --using_debug_view;
2992 }
2993
2994 if (zdebug_table != NULL)
2995 backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE,
2996 error_callback, data);
2997
2998 if (debug_view_valid && using_debug_view == 0)
2999 {
3000 backtrace_release_view (state, &debug_view, error_callback, data);
3001 debug_view_valid = 0;
3002 }
3003
3004 if (!backtrace_dwarf_add (state, base_address,
3005 sections[DEBUG_INFO].data,
3006 sections[DEBUG_INFO].size,
3007 sections[DEBUG_LINE].data,
3008 sections[DEBUG_LINE].size,
3009 sections[DEBUG_ABBREV].data,
3010 sections[DEBUG_ABBREV].size,
3011 sections[DEBUG_RANGES].data,
3012 sections[DEBUG_RANGES].size,
3013 sections[DEBUG_STR].data,
3014 sections[DEBUG_STR].size,
3015 ehdr.e_ident[EI_DATA] == ELFDATA2MSB,
3016 error_callback, data, fileline_fn))
3017 goto fail;
3018
3019 *found_dwarf = 1;
3020
3021 return 1;
3022
3023 fail:
3024 if (shdrs_view_valid)
3025 backtrace_release_view (state, &shdrs_view, error_callback, data);
3026 if (names_view_valid)
3027 backtrace_release_view (state, &names_view, error_callback, data);
3028 if (symtab_view_valid)
3029 backtrace_release_view (state, &symtab_view, error_callback, data);
3030 if (strtab_view_valid)
3031 backtrace_release_view (state, &strtab_view, error_callback, data);
3032 if (debuglink_view_valid)
3033 backtrace_release_view (state, &debuglink_view, error_callback, data);
3034 if (buildid_view_valid)
3035 backtrace_release_view (state, &buildid_view, error_callback, data);
3036 if (debug_view_valid)
3037 backtrace_release_view (state, &debug_view, error_callback, data);
3038 if (descriptor != -1)
3039 backtrace_close (descriptor, error_callback, data);
3040 return 0;
3041 }
3042
3043 /* Data passed to phdr_callback. */
3044
3045 struct phdr_data
3046 {
3047 struct backtrace_state *state;
3048 backtrace_error_callback error_callback;
3049 void *data;
3050 fileline *fileline_fn;
3051 int *found_sym;
3052 int *found_dwarf;
3053 const char *exe_filename;
3054 int exe_descriptor;
3055 };
3056
3057 /* Callback passed to dl_iterate_phdr. Load debug info from shared
3058 libraries. */
3059
3060 static int
3061 #ifdef __i386__
3062 __attribute__ ((__force_align_arg_pointer__))
3063 #endif
3064 phdr_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED,
3065 void *pdata)
3066 {
3067 struct phdr_data *pd = (struct phdr_data *) pdata;
3068 const char *filename;
3069 int descriptor;
3070 int does_not_exist;
3071 fileline elf_fileline_fn;
3072 int found_dwarf;
3073
3074 /* There is not much we can do if we don't have the module name,
3075 unless executable is ET_DYN, where we expect the very first
3076 phdr_callback to be for the PIE. */
3077 if (info->dlpi_name == NULL || info->dlpi_name[0] == '\0')
3078 {
3079 if (pd->exe_descriptor == -1)
3080 return 0;
3081 filename = pd->exe_filename;
3082 descriptor = pd->exe_descriptor;
3083 pd->exe_descriptor = -1;
3084 }
3085 else
3086 {
3087 if (pd->exe_descriptor != -1)
3088 {
3089 backtrace_close (pd->exe_descriptor, pd->error_callback, pd->data);
3090 pd->exe_descriptor = -1;
3091 }
3092
3093 filename = info->dlpi_name;
3094 descriptor = backtrace_open (info->dlpi_name, pd->error_callback,
3095 pd->data, &does_not_exist);
3096 if (descriptor < 0)
3097 return 0;
3098 }
3099
3100 if (elf_add (pd->state, filename, descriptor, info->dlpi_addr,
3101 pd->error_callback, pd->data, &elf_fileline_fn, pd->found_sym,
3102 &found_dwarf, 0, 0))
3103 {
3104 if (found_dwarf)
3105 {
3106 *pd->found_dwarf = 1;
3107 *pd->fileline_fn = elf_fileline_fn;
3108 }
3109 }
3110
3111 return 0;
3112 }
3113
3114 /* Initialize the backtrace data we need from an ELF executable. At
3115 the ELF level, all we need to do is find the debug info
3116 sections. */
3117
3118 int
3119 backtrace_initialize (struct backtrace_state *state, const char *filename,
3120 int descriptor, backtrace_error_callback error_callback,
3121 void *data, fileline *fileline_fn)
3122 {
3123 int ret;
3124 int found_sym;
3125 int found_dwarf;
3126 fileline elf_fileline_fn = elf_nodebug;
3127 struct phdr_data pd;
3128
3129 ret = elf_add (state, filename, descriptor, 0, error_callback, data,
3130 &elf_fileline_fn, &found_sym, &found_dwarf, 1, 0);
3131 if (!ret)
3132 return 0;
3133
3134 pd.state = state;
3135 pd.error_callback = error_callback;
3136 pd.data = data;
3137 pd.fileline_fn = &elf_fileline_fn;
3138 pd.found_sym = &found_sym;
3139 pd.found_dwarf = &found_dwarf;
3140 pd.exe_filename = filename;
3141 pd.exe_descriptor = ret < 0 ? descriptor : -1;
3142
3143 dl_iterate_phdr (phdr_callback, (void *) &pd);
3144
3145 if (!state->threaded)
3146 {
3147 if (found_sym)
3148 state->syminfo_fn = elf_syminfo;
3149 else if (state->syminfo_fn == NULL)
3150 state->syminfo_fn = elf_nosyms;
3151 }
3152 else
3153 {
3154 if (found_sym)
3155 backtrace_atomic_store_pointer (&state->syminfo_fn, elf_syminfo);
3156 else
3157 (void) __sync_bool_compare_and_swap (&state->syminfo_fn, NULL,
3158 elf_nosyms);
3159 }
3160
3161 if (!state->threaded)
3162 *fileline_fn = state->fileline_fn;
3163 else
3164 *fileline_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
3165
3166 if (*fileline_fn == NULL || *fileline_fn == elf_nodebug)
3167 *fileline_fn = elf_fileline_fn;
3168
3169 return 1;
3170 }