Daily bump.
[official-gcc.git] / libbacktrace / elf.c
blob19da5a97b23ac7fb42c65020f5c9dd02b2fb0374
1 /* elf.c -- Get debug data from an ELF file for backtraces.
2 Copyright (C) 2012-2018 Free Software Foundation, Inc.
3 Written by Ian Lance Taylor, Google.
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are
7 met:
9 (1) Redistributions of source code must retain the above copyright
10 notice, this list of conditions and the following disclaimer.
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.
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.
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. */
33 #include "config.h"
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>
42 #ifdef HAVE_DL_ITERATE_PHDR
43 #include <link.h>
44 #endif
46 #include "backtrace.h"
47 #include "internal.h"
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
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
66 #if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN
68 /* If strnlen is not declared, provide our own version. */
70 static size_t
71 xstrnlen (const char *s, size_t maxlen)
73 size_t i;
75 for (i = 0; i < maxlen; ++i)
76 if (s[i] == '\0')
77 break;
78 return i;
81 #define strnlen xstrnlen
83 #endif
85 #ifndef HAVE_LSTAT
87 /* Dummy version of lstat for systems that don't have it. */
89 static int
90 xlstat (const char *path ATTRIBUTE_UNUSED, struct stat *st ATTRIBUTE_UNUSED)
92 return -1;
95 #define lstat xlstat
97 #endif
99 #ifndef HAVE_READLINK
101 /* Dummy version of readlink for systems that don't have it. */
103 static ssize_t
104 xreadlink (const char *path ATTRIBUTE_UNUSED, char *buf ATTRIBUTE_UNUSED,
105 size_t bufsz ATTRIBUTE_UNUSED)
107 return -1;
110 #define readlink xreadlink
112 #endif
114 #ifndef HAVE_DL_ITERATE_PHDR
116 /* Dummy version of dl_iterate_phdr for systems that don't have it. */
118 #define dl_phdr_info x_dl_phdr_info
119 #define dl_iterate_phdr x_dl_iterate_phdr
121 struct dl_phdr_info
123 uintptr_t dlpi_addr;
124 const char *dlpi_name;
127 static int
128 dl_iterate_phdr (int (*callback) (struct dl_phdr_info *,
129 size_t, void *) ATTRIBUTE_UNUSED,
130 void *data ATTRIBUTE_UNUSED)
132 return 0;
135 #endif /* ! defined (HAVE_DL_ITERATE_PHDR) */
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. */
143 #if BACKTRACE_ELF_SIZE != 32 && BACKTRACE_ELF_SIZE != 64
144 #error "Unknown BACKTRACE_ELF_SIZE"
145 #endif
147 /* <link.h> might #include <elf.h> which might define our constants
148 with slightly different values. Undefine them to be safe. */
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 EM_PPC64
169 #undef EF_PPC64_ABI
170 #undef SHN_LORESERVE
171 #undef SHN_XINDEX
172 #undef SHN_UNDEF
173 #undef SHT_PROGBITS
174 #undef SHT_SYMTAB
175 #undef SHT_STRTAB
176 #undef SHT_DYNSYM
177 #undef SHF_COMPRESSED
178 #undef STT_OBJECT
179 #undef STT_FUNC
180 #undef NT_GNU_BUILD_ID
181 #undef ELFCOMPRESS_ZLIB
183 /* Basic types. */
185 typedef uint16_t b_elf_half; /* Elf_Half. */
186 typedef uint32_t b_elf_word; /* Elf_Word. */
187 typedef int32_t b_elf_sword; /* Elf_Sword. */
189 #if BACKTRACE_ELF_SIZE == 32
191 typedef uint32_t b_elf_addr; /* Elf_Addr. */
192 typedef uint32_t b_elf_off; /* Elf_Off. */
194 typedef uint32_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */
196 #else
198 typedef uint64_t b_elf_addr; /* Elf_Addr. */
199 typedef uint64_t b_elf_off; /* Elf_Off. */
200 typedef uint64_t b_elf_xword; /* Elf_Xword. */
201 typedef int64_t b_elf_sxword; /* Elf_Sxword. */
203 typedef uint64_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */
205 #endif
207 /* Data structures and associated constants. */
209 #define EI_NIDENT 16
211 typedef struct {
212 unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */
213 b_elf_half e_type; /* Identifies object file type */
214 b_elf_half e_machine; /* Specifies required architecture */
215 b_elf_word e_version; /* Identifies object file version */
216 b_elf_addr e_entry; /* Entry point virtual address */
217 b_elf_off e_phoff; /* Program header table file offset */
218 b_elf_off e_shoff; /* Section header table file offset */
219 b_elf_word e_flags; /* Processor-specific flags */
220 b_elf_half e_ehsize; /* ELF header size in bytes */
221 b_elf_half e_phentsize; /* Program header table entry size */
222 b_elf_half e_phnum; /* Program header table entry count */
223 b_elf_half e_shentsize; /* Section header table entry size */
224 b_elf_half e_shnum; /* Section header table entry count */
225 b_elf_half e_shstrndx; /* Section header string table index */
226 } b_elf_ehdr; /* Elf_Ehdr. */
228 #define EI_MAG0 0
229 #define EI_MAG1 1
230 #define EI_MAG2 2
231 #define EI_MAG3 3
232 #define EI_CLASS 4
233 #define EI_DATA 5
234 #define EI_VERSION 6
236 #define ELFMAG0 0x7f
237 #define ELFMAG1 'E'
238 #define ELFMAG2 'L'
239 #define ELFMAG3 'F'
241 #define ELFCLASS32 1
242 #define ELFCLASS64 2
244 #define ELFDATA2LSB 1
245 #define ELFDATA2MSB 2
247 #define EV_CURRENT 1
249 #define ET_DYN 3
251 #define EM_PPC64 21
252 #define EF_PPC64_ABI 3
254 typedef struct {
255 b_elf_word sh_name; /* Section name, index in string tbl */
256 b_elf_word sh_type; /* Type of section */
257 b_elf_wxword sh_flags; /* Miscellaneous section attributes */
258 b_elf_addr sh_addr; /* Section virtual addr at execution */
259 b_elf_off sh_offset; /* Section file offset */
260 b_elf_wxword sh_size; /* Size of section in bytes */
261 b_elf_word sh_link; /* Index of another section */
262 b_elf_word sh_info; /* Additional section information */
263 b_elf_wxword sh_addralign; /* Section alignment */
264 b_elf_wxword sh_entsize; /* Entry size if section holds table */
265 } b_elf_shdr; /* Elf_Shdr. */
267 #define SHN_UNDEF 0x0000 /* Undefined section */
268 #define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
269 #define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */
271 #define SHT_PROGBITS 1
272 #define SHT_SYMTAB 2
273 #define SHT_STRTAB 3
274 #define SHT_DYNSYM 11
276 #define SHF_COMPRESSED 0x800
278 #if BACKTRACE_ELF_SIZE == 32
280 typedef struct
282 b_elf_word st_name; /* Symbol name, index in string tbl */
283 b_elf_addr st_value; /* Symbol value */
284 b_elf_word st_size; /* Symbol size */
285 unsigned char st_info; /* Symbol binding and type */
286 unsigned char st_other; /* Visibility and other data */
287 b_elf_half st_shndx; /* Symbol section index */
288 } b_elf_sym; /* Elf_Sym. */
290 #else /* BACKTRACE_ELF_SIZE != 32 */
292 typedef struct
294 b_elf_word st_name; /* Symbol name, index in string tbl */
295 unsigned char st_info; /* Symbol binding and type */
296 unsigned char st_other; /* Visibility and other data */
297 b_elf_half st_shndx; /* Symbol section index */
298 b_elf_addr st_value; /* Symbol value */
299 b_elf_xword st_size; /* Symbol size */
300 } b_elf_sym; /* Elf_Sym. */
302 #endif /* BACKTRACE_ELF_SIZE != 32 */
304 #define STT_OBJECT 1
305 #define STT_FUNC 2
307 typedef struct
309 uint32_t namesz;
310 uint32_t descsz;
311 uint32_t type;
312 char name[1];
313 } b_elf_note;
315 #define NT_GNU_BUILD_ID 3
317 #if BACKTRACE_ELF_SIZE == 32
319 typedef struct
321 b_elf_word ch_type; /* Compresstion algorithm */
322 b_elf_word ch_size; /* Uncompressed size */
323 b_elf_word ch_addralign; /* Alignment for uncompressed data */
324 } b_elf_chdr; /* Elf_Chdr */
326 #else /* BACKTRACE_ELF_SIZE != 32 */
328 typedef struct
330 b_elf_word ch_type; /* Compression algorithm */
331 b_elf_word ch_reserved; /* Reserved */
332 b_elf_xword ch_size; /* Uncompressed size */
333 b_elf_xword ch_addralign; /* Alignment for uncompressed data */
334 } b_elf_chdr; /* Elf_Chdr */
336 #endif /* BACKTRACE_ELF_SIZE != 32 */
338 #define ELFCOMPRESS_ZLIB 1
340 /* An index of ELF sections we care about. */
342 enum debug_section
344 DEBUG_INFO,
345 DEBUG_LINE,
346 DEBUG_ABBREV,
347 DEBUG_RANGES,
348 DEBUG_STR,
350 /* The old style compressed sections. This list must correspond to
351 the list of normal debug sections. */
352 ZDEBUG_INFO,
353 ZDEBUG_LINE,
354 ZDEBUG_ABBREV,
355 ZDEBUG_RANGES,
356 ZDEBUG_STR,
358 DEBUG_MAX
361 /* Names of sections, indexed by enum elf_section. */
363 static const char * const debug_section_names[DEBUG_MAX] =
365 ".debug_info",
366 ".debug_line",
367 ".debug_abbrev",
368 ".debug_ranges",
369 ".debug_str",
370 ".zdebug_info",
371 ".zdebug_line",
372 ".zdebug_abbrev",
373 ".zdebug_ranges",
374 ".zdebug_str"
377 /* Information we gather for the sections we care about. */
379 struct debug_section_info
381 /* Section file offset. */
382 off_t offset;
383 /* Section size. */
384 size_t size;
385 /* Section contents, after read from file. */
386 const unsigned char *data;
387 /* Whether the SHF_COMPRESSED flag is set for the section. */
388 int compressed;
391 /* Information we keep for an ELF symbol. */
393 struct elf_symbol
395 /* The name of the symbol. */
396 const char *name;
397 /* The address of the symbol. */
398 uintptr_t address;
399 /* The size of the symbol. */
400 size_t size;
403 /* Information to pass to elf_syminfo. */
405 struct elf_syminfo_data
407 /* Symbols for the next module. */
408 struct elf_syminfo_data *next;
409 /* The ELF symbols, sorted by address. */
410 struct elf_symbol *symbols;
411 /* The number of symbols. */
412 size_t count;
415 /* Information about PowerPC64 ELFv1 .opd section. */
417 struct elf_ppc64_opd_data
419 /* Address of the .opd section. */
420 b_elf_addr addr;
421 /* Section data. */
422 const char *data;
423 /* Size of the .opd section. */
424 size_t size;
425 /* Corresponding section view. */
426 struct backtrace_view view;
429 /* Compute the CRC-32 of BUF/LEN. This uses the CRC used for
430 .gnu_debuglink files. */
432 static uint32_t
433 elf_crc32 (uint32_t crc, const unsigned char *buf, size_t len)
435 static const uint32_t crc32_table[256] =
437 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
438 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
439 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
440 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
441 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
442 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
443 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
444 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
445 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
446 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
447 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
448 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
449 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
450 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
451 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
452 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
453 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
454 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
455 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
456 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
457 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
458 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
459 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
460 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
461 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
462 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
463 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
464 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
465 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
466 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
467 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
468 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
469 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
470 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
471 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
472 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
473 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
474 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
475 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
476 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
477 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
478 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
479 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
480 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
481 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
482 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
483 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
484 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
485 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
486 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
487 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
488 0x2d02ef8d
490 const unsigned char *end;
492 crc = ~crc;
493 for (end = buf + len; buf < end; ++ buf)
494 crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
495 return ~crc;
498 /* Return the CRC-32 of the entire file open at DESCRIPTOR. */
500 static uint32_t
501 elf_crc32_file (struct backtrace_state *state, int descriptor,
502 backtrace_error_callback error_callback, void *data)
504 struct stat st;
505 struct backtrace_view file_view;
506 uint32_t ret;
508 if (fstat (descriptor, &st) < 0)
510 error_callback (data, "fstat", errno);
511 return 0;
514 if (!backtrace_get_view (state, descriptor, 0, st.st_size, error_callback,
515 data, &file_view))
516 return 0;
518 ret = elf_crc32 (0, (const unsigned char *) file_view.data, st.st_size);
520 backtrace_release_view (state, &file_view, error_callback, data);
522 return ret;
525 /* A dummy callback function used when we can't find any debug info. */
527 static int
528 elf_nodebug (struct backtrace_state *state ATTRIBUTE_UNUSED,
529 uintptr_t pc ATTRIBUTE_UNUSED,
530 backtrace_full_callback callback ATTRIBUTE_UNUSED,
531 backtrace_error_callback error_callback, void *data)
533 error_callback (data, "no debug info in ELF executable", -1);
534 return 0;
537 /* A dummy callback function used when we can't find a symbol
538 table. */
540 static void
541 elf_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED,
542 uintptr_t addr ATTRIBUTE_UNUSED,
543 backtrace_syminfo_callback callback ATTRIBUTE_UNUSED,
544 backtrace_error_callback error_callback, void *data)
546 error_callback (data, "no symbol table in ELF executable", -1);
549 /* Compare struct elf_symbol for qsort. */
551 static int
552 elf_symbol_compare (const void *v1, const void *v2)
554 const struct elf_symbol *e1 = (const struct elf_symbol *) v1;
555 const struct elf_symbol *e2 = (const struct elf_symbol *) v2;
557 if (e1->address < e2->address)
558 return -1;
559 else if (e1->address > e2->address)
560 return 1;
561 else
562 return 0;
565 /* Compare an ADDR against an elf_symbol for bsearch. We allocate one
566 extra entry in the array so that this can look safely at the next
567 entry. */
569 static int
570 elf_symbol_search (const void *vkey, const void *ventry)
572 const uintptr_t *key = (const uintptr_t *) vkey;
573 const struct elf_symbol *entry = (const struct elf_symbol *) ventry;
574 uintptr_t addr;
576 addr = *key;
577 if (addr < entry->address)
578 return -1;
579 else if (addr >= entry->address + entry->size)
580 return 1;
581 else
582 return 0;
585 /* Initialize the symbol table info for elf_syminfo. */
587 static int
588 elf_initialize_syminfo (struct backtrace_state *state,
589 uintptr_t base_address,
590 const unsigned char *symtab_data, size_t symtab_size,
591 const unsigned char *strtab, size_t strtab_size,
592 backtrace_error_callback error_callback,
593 void *data, struct elf_syminfo_data *sdata,
594 struct elf_ppc64_opd_data *opd)
596 size_t sym_count;
597 const b_elf_sym *sym;
598 size_t elf_symbol_count;
599 size_t elf_symbol_size;
600 struct elf_symbol *elf_symbols;
601 size_t i;
602 unsigned int j;
604 sym_count = symtab_size / sizeof (b_elf_sym);
606 /* We only care about function symbols. Count them. */
607 sym = (const b_elf_sym *) symtab_data;
608 elf_symbol_count = 0;
609 for (i = 0; i < sym_count; ++i, ++sym)
611 int info;
613 info = sym->st_info & 0xf;
614 if ((info == STT_FUNC || info == STT_OBJECT)
615 && sym->st_shndx != SHN_UNDEF)
616 ++elf_symbol_count;
619 elf_symbol_size = elf_symbol_count * sizeof (struct elf_symbol);
620 elf_symbols = ((struct elf_symbol *)
621 backtrace_alloc (state, elf_symbol_size, error_callback,
622 data));
623 if (elf_symbols == NULL)
624 return 0;
626 sym = (const b_elf_sym *) symtab_data;
627 j = 0;
628 for (i = 0; i < sym_count; ++i, ++sym)
630 int info;
632 info = sym->st_info & 0xf;
633 if (info != STT_FUNC && info != STT_OBJECT)
634 continue;
635 if (sym->st_shndx == SHN_UNDEF)
636 continue;
637 if (sym->st_name >= strtab_size)
639 error_callback (data, "symbol string index out of range", 0);
640 backtrace_free (state, elf_symbols, elf_symbol_size, error_callback,
641 data);
642 return 0;
644 elf_symbols[j].name = (const char *) strtab + sym->st_name;
645 /* Special case PowerPC64 ELFv1 symbols in .opd section, if the symbol
646 is a function descriptor, read the actual code address from the
647 descriptor. */
648 if (opd
649 && sym->st_value >= opd->addr
650 && sym->st_value < opd->addr + opd->size)
651 elf_symbols[j].address
652 = *(const b_elf_addr *) (opd->data + (sym->st_value - opd->addr));
653 else
654 elf_symbols[j].address = sym->st_value;
655 elf_symbols[j].address += base_address;
656 elf_symbols[j].size = sym->st_size;
657 ++j;
660 backtrace_qsort (elf_symbols, elf_symbol_count, sizeof (struct elf_symbol),
661 elf_symbol_compare);
663 sdata->next = NULL;
664 sdata->symbols = elf_symbols;
665 sdata->count = elf_symbol_count;
667 return 1;
670 /* Add EDATA to the list in STATE. */
672 static void
673 elf_add_syminfo_data (struct backtrace_state *state,
674 struct elf_syminfo_data *edata)
676 if (!state->threaded)
678 struct elf_syminfo_data **pp;
680 for (pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
681 *pp != NULL;
682 pp = &(*pp)->next)
684 *pp = edata;
686 else
688 while (1)
690 struct elf_syminfo_data **pp;
692 pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
694 while (1)
696 struct elf_syminfo_data *p;
698 p = backtrace_atomic_load_pointer (pp);
700 if (p == NULL)
701 break;
703 pp = &p->next;
706 if (__sync_bool_compare_and_swap (pp, NULL, edata))
707 break;
712 /* Return the symbol name and value for an ADDR. */
714 static void
715 elf_syminfo (struct backtrace_state *state, uintptr_t addr,
716 backtrace_syminfo_callback callback,
717 backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
718 void *data)
720 struct elf_syminfo_data *edata;
721 struct elf_symbol *sym = NULL;
723 if (!state->threaded)
725 for (edata = (struct elf_syminfo_data *) state->syminfo_data;
726 edata != NULL;
727 edata = edata->next)
729 sym = ((struct elf_symbol *)
730 bsearch (&addr, edata->symbols, edata->count,
731 sizeof (struct elf_symbol), elf_symbol_search));
732 if (sym != NULL)
733 break;
736 else
738 struct elf_syminfo_data **pp;
740 pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
741 while (1)
743 edata = backtrace_atomic_load_pointer (pp);
744 if (edata == NULL)
745 break;
747 sym = ((struct elf_symbol *)
748 bsearch (&addr, edata->symbols, edata->count,
749 sizeof (struct elf_symbol), elf_symbol_search));
750 if (sym != NULL)
751 break;
753 pp = &edata->next;
757 if (sym == NULL)
758 callback (data, addr, NULL, 0, 0);
759 else
760 callback (data, addr, sym->name, sym->address, sym->size);
763 /* Return whether FILENAME is a symlink. */
765 static int
766 elf_is_symlink (const char *filename)
768 struct stat st;
770 if (lstat (filename, &st) < 0)
771 return 0;
772 return S_ISLNK (st.st_mode);
775 /* Return the results of reading the symlink FILENAME in a buffer
776 allocated by backtrace_alloc. Return the length of the buffer in
777 *LEN. */
779 static char *
780 elf_readlink (struct backtrace_state *state, const char *filename,
781 backtrace_error_callback error_callback, void *data,
782 size_t *plen)
784 size_t len;
785 char *buf;
787 len = 128;
788 while (1)
790 ssize_t rl;
792 buf = backtrace_alloc (state, len, error_callback, data);
793 if (buf == NULL)
794 return NULL;
795 rl = readlink (filename, buf, len);
796 if (rl < 0)
798 backtrace_free (state, buf, len, error_callback, data);
799 return NULL;
801 if ((size_t) rl < len - 1)
803 buf[rl] = '\0';
804 *plen = len;
805 return buf;
807 backtrace_free (state, buf, len, error_callback, data);
808 len *= 2;
812 /* Open a separate debug info file, using the build ID to find it.
813 Returns an open file descriptor, or -1.
815 The GDB manual says that the only place gdb looks for a debug file
816 when the build ID is known is in /usr/lib/debug/.build-id. */
818 static int
819 elf_open_debugfile_by_buildid (struct backtrace_state *state,
820 const char *buildid_data, size_t buildid_size,
821 backtrace_error_callback error_callback,
822 void *data)
824 const char * const prefix = "/usr/lib/debug/.build-id/";
825 const size_t prefix_len = strlen (prefix);
826 const char * const suffix = ".debug";
827 const size_t suffix_len = strlen (suffix);
828 size_t len;
829 char *bd_filename;
830 char *t;
831 size_t i;
832 int ret;
833 int does_not_exist;
835 len = prefix_len + buildid_size * 2 + suffix_len + 2;
836 bd_filename = backtrace_alloc (state, len, error_callback, data);
837 if (bd_filename == NULL)
838 return -1;
840 t = bd_filename;
841 memcpy (t, prefix, prefix_len);
842 t += prefix_len;
843 for (i = 0; i < buildid_size; i++)
845 unsigned char b;
846 unsigned char nib;
848 b = (unsigned char) buildid_data[i];
849 nib = (b & 0xf0) >> 4;
850 *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10;
851 nib = b & 0x0f;
852 *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10;
853 if (i == 0)
854 *t++ = '/';
856 memcpy (t, suffix, suffix_len);
857 t[suffix_len] = '\0';
859 ret = backtrace_open (bd_filename, error_callback, data, &does_not_exist);
861 backtrace_free (state, bd_filename, len, error_callback, data);
863 /* gdb checks that the debuginfo file has the same build ID note.
864 That seems kind of pointless to me--why would it have the right
865 name but not the right build ID?--so skipping the check. */
867 return ret;
870 /* Try to open a file whose name is PREFIX (length PREFIX_LEN)
871 concatenated with PREFIX2 (length PREFIX2_LEN) concatenated with
872 DEBUGLINK_NAME. Returns an open file descriptor, or -1. */
874 static int
875 elf_try_debugfile (struct backtrace_state *state, const char *prefix,
876 size_t prefix_len, const char *prefix2, size_t prefix2_len,
877 const char *debuglink_name,
878 backtrace_error_callback error_callback, void *data)
880 size_t debuglink_len;
881 size_t try_len;
882 char *try;
883 int does_not_exist;
884 int ret;
886 debuglink_len = strlen (debuglink_name);
887 try_len = prefix_len + prefix2_len + debuglink_len + 1;
888 try = backtrace_alloc (state, try_len, error_callback, data);
889 if (try == NULL)
890 return -1;
892 memcpy (try, prefix, prefix_len);
893 memcpy (try + prefix_len, prefix2, prefix2_len);
894 memcpy (try + prefix_len + prefix2_len, debuglink_name, debuglink_len);
895 try[prefix_len + prefix2_len + debuglink_len] = '\0';
897 ret = backtrace_open (try, error_callback, data, &does_not_exist);
899 backtrace_free (state, try, try_len, error_callback, data);
901 return ret;
904 /* Find a separate debug info file, using the debuglink section data
905 to find it. Returns an open file descriptor, or -1. */
907 static int
908 elf_find_debugfile_by_debuglink (struct backtrace_state *state,
909 const char *filename,
910 const char *debuglink_name,
911 backtrace_error_callback error_callback,
912 void *data)
914 int ret;
915 char *alc;
916 size_t alc_len;
917 const char *slash;
918 int ddescriptor;
919 const char *prefix;
920 size_t prefix_len;
922 /* Resolve symlinks in FILENAME. Since FILENAME is fairly likely to
923 be /proc/self/exe, symlinks are common. We don't try to resolve
924 the whole path name, just the base name. */
925 ret = -1;
926 alc = NULL;
927 alc_len = 0;
928 while (elf_is_symlink (filename))
930 char *new_buf;
931 size_t new_len;
933 new_buf = elf_readlink (state, filename, error_callback, data, &new_len);
934 if (new_buf == NULL)
935 break;
937 if (new_buf[0] == '/')
938 filename = new_buf;
939 else
941 slash = strrchr (filename, '/');
942 if (slash == NULL)
943 filename = new_buf;
944 else
946 size_t clen;
947 char *c;
949 slash++;
950 clen = slash - filename + strlen (new_buf) + 1;
951 c = backtrace_alloc (state, clen, error_callback, data);
952 if (c == NULL)
953 goto done;
955 memcpy (c, filename, slash - filename);
956 memcpy (c + (slash - filename), new_buf, strlen (new_buf));
957 c[slash - filename + strlen (new_buf)] = '\0';
958 backtrace_free (state, new_buf, new_len, error_callback, data);
959 filename = c;
960 new_buf = c;
961 new_len = clen;
965 if (alc != NULL)
966 backtrace_free (state, alc, alc_len, error_callback, data);
967 alc = new_buf;
968 alc_len = new_len;
971 /* Look for DEBUGLINK_NAME in the same directory as FILENAME. */
973 slash = strrchr (filename, '/');
974 if (slash == NULL)
976 prefix = "";
977 prefix_len = 0;
979 else
981 slash++;
982 prefix = filename;
983 prefix_len = slash - filename;
986 ddescriptor = elf_try_debugfile (state, prefix, prefix_len, "", 0,
987 debuglink_name, error_callback, data);
988 if (ddescriptor >= 0)
990 ret = ddescriptor;
991 goto done;
994 /* Look for DEBUGLINK_NAME in a .debug subdirectory of FILENAME. */
996 ddescriptor = elf_try_debugfile (state, prefix, prefix_len, ".debug/",
997 strlen (".debug/"), debuglink_name,
998 error_callback, data);
999 if (ddescriptor >= 0)
1001 ret = ddescriptor;
1002 goto done;
1005 /* Look for DEBUGLINK_NAME in /usr/lib/debug. */
1007 ddescriptor = elf_try_debugfile (state, "/usr/lib/debug/",
1008 strlen ("/usr/lib/debug/"), prefix,
1009 prefix_len, debuglink_name,
1010 error_callback, data);
1011 if (ddescriptor >= 0)
1012 ret = ddescriptor;
1014 done:
1015 if (alc != NULL && alc_len > 0)
1016 backtrace_free (state, alc, alc_len, error_callback, data);
1017 return ret;
1020 /* Open a separate debug info file, using the debuglink section data
1021 to find it. Returns an open file descriptor, or -1. */
1023 static int
1024 elf_open_debugfile_by_debuglink (struct backtrace_state *state,
1025 const char *filename,
1026 const char *debuglink_name,
1027 uint32_t debuglink_crc,
1028 backtrace_error_callback error_callback,
1029 void *data)
1031 int ddescriptor;
1033 ddescriptor = elf_find_debugfile_by_debuglink (state, filename,
1034 debuglink_name,
1035 error_callback, data);
1036 if (ddescriptor < 0)
1037 return -1;
1039 if (debuglink_crc != 0)
1041 uint32_t got_crc;
1043 got_crc = elf_crc32_file (state, ddescriptor, error_callback, data);
1044 if (got_crc != debuglink_crc)
1046 backtrace_close (ddescriptor, error_callback, data);
1047 return -1;
1051 return ddescriptor;
1054 /* A function useful for setting a breakpoint for an inflation failure
1055 when this code is compiled with -g. */
1057 static void
1058 elf_zlib_failed(void)
1062 /* *PVAL is the current value being read from the stream, and *PBITS
1063 is the number of valid bits. Ensure that *PVAL holds at least 15
1064 bits by reading additional bits from *PPIN, up to PINEND, as
1065 needed. Updates *PPIN, *PVAL and *PBITS. Returns 1 on success, 0
1066 on error. */
1068 static int
1069 elf_zlib_fetch (const unsigned char **ppin, const unsigned char *pinend,
1070 uint64_t *pval, unsigned int *pbits)
1072 unsigned int bits;
1073 const unsigned char *pin;
1074 uint64_t val;
1075 uint32_t next;
1077 bits = *pbits;
1078 if (bits >= 15)
1079 return 1;
1080 pin = *ppin;
1081 val = *pval;
1083 if (unlikely (pinend - pin < 4))
1085 elf_zlib_failed ();
1086 return 0;
1089 /* We've ensured that PIN is aligned. */
1090 next = *(const uint32_t *)pin;
1092 #if __BYTE_ORDER == __ORDER_BIG_ENDIAN
1093 next = __builtin_bswap32 (next);
1094 #endif
1096 val |= (uint64_t)next << bits;
1097 bits += 32;
1098 pin += 4;
1100 /* We will need the next four bytes soon. */
1101 __builtin_prefetch (pin, 0, 0);
1103 *ppin = pin;
1104 *pval = val;
1105 *pbits = bits;
1106 return 1;
1109 /* Huffman code tables, like the rest of the zlib format, are defined
1110 by RFC 1951. We store a Huffman code table as a series of tables
1111 stored sequentially in memory. Each entry in a table is 16 bits.
1112 The first, main, table has 256 entries. It is followed by a set of
1113 secondary tables of length 2 to 128 entries. The maximum length of
1114 a code sequence in the deflate format is 15 bits, so that is all we
1115 need. Each secondary table has an index, which is the offset of
1116 the table in the overall memory storage.
1118 The deflate format says that all codes of a given bit length are
1119 lexicographically consecutive. Perhaps we could have 130 values
1120 that require a 15-bit code, perhaps requiring three secondary
1121 tables of size 128. I don't know if this is actually possible, but
1122 it suggests that the maximum size required for secondary tables is
1123 3 * 128 + 3 * 64 ... == 768. The zlib enough program reports 660
1124 as the maximum. We permit 768, since in addition to the 256 for
1125 the primary table, with two bytes per entry, and with the two
1126 tables we need, that gives us a page.
1128 A single table entry needs to store a value or (for the main table
1129 only) the index and size of a secondary table. Values range from 0
1130 to 285, inclusive. Secondary table indexes, per above, range from
1131 0 to 510. For a value we need to store the number of bits we need
1132 to determine that value (one value may appear multiple times in the
1133 table), which is 1 to 8. For a secondary table we need to store
1134 the number of bits used to index into the table, which is 1 to 7.
1135 And of course we need 1 bit to decide whether we have a value or a
1136 secondary table index. So each entry needs 9 bits for value/table
1137 index, 3 bits for size, 1 bit what it is. For simplicity we use 16
1138 bits per entry. */
1140 /* Number of entries we allocate to for one code table. We get a page
1141 for the two code tables we need. */
1143 #define HUFFMAN_TABLE_SIZE (1024)
1145 /* Bit masks and shifts for the values in the table. */
1147 #define HUFFMAN_VALUE_MASK 0x01ff
1148 #define HUFFMAN_BITS_SHIFT 9
1149 #define HUFFMAN_BITS_MASK 0x7
1150 #define HUFFMAN_SECONDARY_SHIFT 12
1152 /* For working memory while inflating we need two code tables, we need
1153 an array of code lengths (max value 15, so we use unsigned char),
1154 and an array of unsigned shorts used while building a table. The
1155 latter two arrays must be large enough to hold the maximum number
1156 of code lengths, which RFC 1951 defines as 286 + 30. */
1158 #define ZDEBUG_TABLE_SIZE \
1159 (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \
1160 + (286 + 30) * sizeof (uint16_t) \
1161 + (286 + 30) * sizeof (unsigned char))
1163 #define ZDEBUG_TABLE_CODELEN_OFFSET \
1164 (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \
1165 + (286 + 30) * sizeof (uint16_t))
1167 #define ZDEBUG_TABLE_WORK_OFFSET \
1168 (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t))
1170 #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
1172 /* Used by the main function that generates the fixed table to learn
1173 the table size. */
1174 static size_t final_next_secondary;
1176 #endif
1178 /* Build a Huffman code table from an array of lengths in CODES of
1179 length CODES_LEN. The table is stored into *TABLE. ZDEBUG_TABLE
1180 is the same as for elf_zlib_inflate, used to find some work space.
1181 Returns 1 on success, 0 on error. */
1183 static int
1184 elf_zlib_inflate_table (unsigned char *codes, size_t codes_len,
1185 uint16_t *zdebug_table, uint16_t *table)
1187 uint16_t count[16];
1188 uint16_t start[16];
1189 uint16_t prev[16];
1190 uint16_t firstcode[7];
1191 uint16_t *next;
1192 size_t i;
1193 size_t j;
1194 unsigned int code;
1195 size_t next_secondary;
1197 /* Count the number of code of each length. Set NEXT[val] to be the
1198 next value after VAL with the same bit length. */
1200 next = (uint16_t *) (((unsigned char *) zdebug_table)
1201 + ZDEBUG_TABLE_WORK_OFFSET);
1203 memset (&count[0], 0, 16 * sizeof (uint16_t));
1204 for (i = 0; i < codes_len; ++i)
1206 if (unlikely (codes[i] >= 16))
1208 elf_zlib_failed ();
1209 return 0;
1212 if (count[codes[i]] == 0)
1214 start[codes[i]] = i;
1215 prev[codes[i]] = i;
1217 else
1219 next[prev[codes[i]]] = i;
1220 prev[codes[i]] = i;
1223 ++count[codes[i]];
1226 /* For each length, fill in the table for the codes of that
1227 length. */
1229 memset (table, 0, HUFFMAN_TABLE_SIZE * sizeof (uint16_t));
1231 /* Handle the values that do not require a secondary table. */
1233 code = 0;
1234 for (j = 1; j <= 8; ++j)
1236 unsigned int jcnt;
1237 unsigned int val;
1239 jcnt = count[j];
1240 if (jcnt == 0)
1241 continue;
1243 if (unlikely (jcnt > (1U << j)))
1245 elf_zlib_failed ();
1246 return 0;
1249 /* There are JCNT values that have this length, the values
1250 starting from START[j] continuing through NEXT[VAL]. Those
1251 values are assigned consecutive values starting at CODE. */
1253 val = start[j];
1254 for (i = 0; i < jcnt; ++i)
1256 uint16_t tval;
1257 size_t ind;
1258 unsigned int incr;
1260 /* In the compressed bit stream, the value VAL is encoded as
1261 J bits with the value C. */
1263 if (unlikely ((val & ~HUFFMAN_VALUE_MASK) != 0))
1265 elf_zlib_failed ();
1266 return 0;
1269 tval = val | ((j - 1) << HUFFMAN_BITS_SHIFT);
1271 /* The table lookup uses 8 bits. If J is less than 8, we
1272 don't know what the other bits will be. We need to fill
1273 in all possibilities in the table. Since the Huffman
1274 code is unambiguous, those entries can't be used for any
1275 other code. */
1277 for (ind = code; ind < 0x100; ind += 1 << j)
1279 if (unlikely (table[ind] != 0))
1281 elf_zlib_failed ();
1282 return 0;
1284 table[ind] = tval;
1287 /* Advance to the next value with this length. */
1288 if (i + 1 < jcnt)
1289 val = next[val];
1291 /* The Huffman codes are stored in the bitstream with the
1292 most significant bit first, as is required to make them
1293 unambiguous. The effect is that when we read them from
1294 the bitstream we see the bit sequence in reverse order:
1295 the most significant bit of the Huffman code is the least
1296 significant bit of the value we read from the bitstream.
1297 That means that to make our table lookups work, we need
1298 to reverse the bits of CODE. Since reversing bits is
1299 tedious and in general requires using a table, we instead
1300 increment CODE in reverse order. That is, if the number
1301 of bits we are currently using, here named J, is 3, we
1302 count as 000, 100, 010, 110, 001, 101, 011, 111, which is
1303 to say the numbers from 0 to 7 but with the bits
1304 reversed. Going to more bits, aka incrementing J,
1305 effectively just adds more zero bits as the beginning,
1306 and as such does not change the numeric value of CODE.
1308 To increment CODE of length J in reverse order, find the
1309 most significant zero bit and set it to one while
1310 clearing all higher bits. In other words, add 1 modulo
1311 2^J, only reversed. */
1313 incr = 1U << (j - 1);
1314 while ((code & incr) != 0)
1315 incr >>= 1;
1316 if (incr == 0)
1317 code = 0;
1318 else
1320 code &= incr - 1;
1321 code += incr;
1326 /* Handle the values that require a secondary table. */
1328 /* Set FIRSTCODE, the number at which the codes start, for each
1329 length. */
1331 for (j = 9; j < 16; j++)
1333 unsigned int jcnt;
1334 unsigned int k;
1336 jcnt = count[j];
1337 if (jcnt == 0)
1338 continue;
1340 /* There are JCNT values that have this length, the values
1341 starting from START[j]. Those values are assigned
1342 consecutive values starting at CODE. */
1344 firstcode[j - 9] = code;
1346 /* Reverse add JCNT to CODE modulo 2^J. */
1347 for (k = 0; k < j; ++k)
1349 if ((jcnt & (1U << k)) != 0)
1351 unsigned int m;
1352 unsigned int bit;
1354 bit = 1U << (j - k - 1);
1355 for (m = 0; m < j - k; ++m, bit >>= 1)
1357 if ((code & bit) == 0)
1359 code += bit;
1360 break;
1362 code &= ~bit;
1364 jcnt &= ~(1U << k);
1367 if (unlikely (jcnt != 0))
1369 elf_zlib_failed ();
1370 return 0;
1374 /* For J from 9 to 15, inclusive, we store COUNT[J] consecutive
1375 values starting at START[J] with consecutive codes starting at
1376 FIRSTCODE[J - 9]. In the primary table we need to point to the
1377 secondary table, and the secondary table will be indexed by J - 9
1378 bits. We count down from 15 so that we install the larger
1379 secondary tables first, as the smaller ones may be embedded in
1380 the larger ones. */
1382 next_secondary = 0; /* Index of next secondary table (after primary). */
1383 for (j = 15; j >= 9; j--)
1385 unsigned int jcnt;
1386 unsigned int val;
1387 size_t primary; /* Current primary index. */
1388 size_t secondary; /* Offset to current secondary table. */
1389 size_t secondary_bits; /* Bit size of current secondary table. */
1391 jcnt = count[j];
1392 if (jcnt == 0)
1393 continue;
1395 val = start[j];
1396 code = firstcode[j - 9];
1397 primary = 0x100;
1398 secondary = 0;
1399 secondary_bits = 0;
1400 for (i = 0; i < jcnt; ++i)
1402 uint16_t tval;
1403 size_t ind;
1404 unsigned int incr;
1406 if ((code & 0xff) != primary)
1408 uint16_t tprimary;
1410 /* Fill in a new primary table entry. */
1412 primary = code & 0xff;
1414 tprimary = table[primary];
1415 if (tprimary == 0)
1417 /* Start a new secondary table. */
1419 if (unlikely ((next_secondary & HUFFMAN_VALUE_MASK)
1420 != next_secondary))
1422 elf_zlib_failed ();
1423 return 0;
1426 secondary = next_secondary;
1427 secondary_bits = j - 8;
1428 next_secondary += 1 << secondary_bits;
1429 table[primary] = (secondary
1430 + ((j - 8) << HUFFMAN_BITS_SHIFT)
1431 + (1U << HUFFMAN_SECONDARY_SHIFT));
1433 else
1435 /* There is an existing entry. It had better be a
1436 secondary table with enough bits. */
1437 if (unlikely ((tprimary & (1U << HUFFMAN_SECONDARY_SHIFT))
1438 == 0))
1440 elf_zlib_failed ();
1441 return 0;
1443 secondary = tprimary & HUFFMAN_VALUE_MASK;
1444 secondary_bits = ((tprimary >> HUFFMAN_BITS_SHIFT)
1445 & HUFFMAN_BITS_MASK);
1446 if (unlikely (secondary_bits < j - 8))
1448 elf_zlib_failed ();
1449 return 0;
1454 /* Fill in secondary table entries. */
1456 tval = val | ((j - 8) << HUFFMAN_BITS_SHIFT);
1458 for (ind = code >> 8;
1459 ind < (1U << secondary_bits);
1460 ind += 1U << (j - 8))
1462 if (unlikely (table[secondary + 0x100 + ind] != 0))
1464 elf_zlib_failed ();
1465 return 0;
1467 table[secondary + 0x100 + ind] = tval;
1470 if (i + 1 < jcnt)
1471 val = next[val];
1473 incr = 1U << (j - 1);
1474 while ((code & incr) != 0)
1475 incr >>= 1;
1476 if (incr == 0)
1477 code = 0;
1478 else
1480 code &= incr - 1;
1481 code += incr;
1486 #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
1487 final_next_secondary = next_secondary;
1488 #endif
1490 return 1;
1493 #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
1495 /* Used to generate the fixed Huffman table for block type 1. */
1497 #include <stdio.h>
1499 static uint16_t table[ZDEBUG_TABLE_SIZE];
1500 static unsigned char codes[288];
1503 main ()
1505 size_t i;
1507 for (i = 0; i <= 143; ++i)
1508 codes[i] = 8;
1509 for (i = 144; i <= 255; ++i)
1510 codes[i] = 9;
1511 for (i = 256; i <= 279; ++i)
1512 codes[i] = 7;
1513 for (i = 280; i <= 287; ++i)
1514 codes[i] = 8;
1515 if (!elf_zlib_inflate_table (&codes[0], 288, &table[0], &table[0]))
1517 fprintf (stderr, "elf_zlib_inflate_table failed\n");
1518 exit (EXIT_FAILURE);
1521 printf ("static const uint16_t elf_zlib_default_table[%#zx] =\n",
1522 final_next_secondary + 0x100);
1523 printf ("{\n");
1524 for (i = 0; i < final_next_secondary + 0x100; i += 8)
1526 size_t j;
1528 printf (" ");
1529 for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j)
1530 printf (" %#x,", table[j]);
1531 printf ("\n");
1533 printf ("};\n");
1534 printf ("\n");
1536 for (i = 0; i < 32; ++i)
1537 codes[i] = 5;
1538 if (!elf_zlib_inflate_table (&codes[0], 32, &table[0], &table[0]))
1540 fprintf (stderr, "elf_zlib_inflate_table failed\n");
1541 exit (EXIT_FAILURE);
1544 printf ("static const uint16_t elf_zlib_default_dist_table[%#zx] =\n",
1545 final_next_secondary + 0x100);
1546 printf ("{\n");
1547 for (i = 0; i < final_next_secondary + 0x100; i += 8)
1549 size_t j;
1551 printf (" ");
1552 for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j)
1553 printf (" %#x,", table[j]);
1554 printf ("\n");
1556 printf ("};\n");
1558 return 0;
1561 #endif
1563 /* The fixed tables generated by the #ifdef'ed out main function
1564 above. */
1566 static const uint16_t elf_zlib_default_table[0x170] =
1568 0xd00, 0xe50, 0xe10, 0xf18, 0xd10, 0xe70, 0xe30, 0x1230,
1569 0xd08, 0xe60, 0xe20, 0x1210, 0xe00, 0xe80, 0xe40, 0x1250,
1570 0xd04, 0xe58, 0xe18, 0x1200, 0xd14, 0xe78, 0xe38, 0x1240,
1571 0xd0c, 0xe68, 0xe28, 0x1220, 0xe08, 0xe88, 0xe48, 0x1260,
1572 0xd02, 0xe54, 0xe14, 0xf1c, 0xd12, 0xe74, 0xe34, 0x1238,
1573 0xd0a, 0xe64, 0xe24, 0x1218, 0xe04, 0xe84, 0xe44, 0x1258,
1574 0xd06, 0xe5c, 0xe1c, 0x1208, 0xd16, 0xe7c, 0xe3c, 0x1248,
1575 0xd0e, 0xe6c, 0xe2c, 0x1228, 0xe0c, 0xe8c, 0xe4c, 0x1268,
1576 0xd01, 0xe52, 0xe12, 0xf1a, 0xd11, 0xe72, 0xe32, 0x1234,
1577 0xd09, 0xe62, 0xe22, 0x1214, 0xe02, 0xe82, 0xe42, 0x1254,
1578 0xd05, 0xe5a, 0xe1a, 0x1204, 0xd15, 0xe7a, 0xe3a, 0x1244,
1579 0xd0d, 0xe6a, 0xe2a, 0x1224, 0xe0a, 0xe8a, 0xe4a, 0x1264,
1580 0xd03, 0xe56, 0xe16, 0xf1e, 0xd13, 0xe76, 0xe36, 0x123c,
1581 0xd0b, 0xe66, 0xe26, 0x121c, 0xe06, 0xe86, 0xe46, 0x125c,
1582 0xd07, 0xe5e, 0xe1e, 0x120c, 0xd17, 0xe7e, 0xe3e, 0x124c,
1583 0xd0f, 0xe6e, 0xe2e, 0x122c, 0xe0e, 0xe8e, 0xe4e, 0x126c,
1584 0xd00, 0xe51, 0xe11, 0xf19, 0xd10, 0xe71, 0xe31, 0x1232,
1585 0xd08, 0xe61, 0xe21, 0x1212, 0xe01, 0xe81, 0xe41, 0x1252,
1586 0xd04, 0xe59, 0xe19, 0x1202, 0xd14, 0xe79, 0xe39, 0x1242,
1587 0xd0c, 0xe69, 0xe29, 0x1222, 0xe09, 0xe89, 0xe49, 0x1262,
1588 0xd02, 0xe55, 0xe15, 0xf1d, 0xd12, 0xe75, 0xe35, 0x123a,
1589 0xd0a, 0xe65, 0xe25, 0x121a, 0xe05, 0xe85, 0xe45, 0x125a,
1590 0xd06, 0xe5d, 0xe1d, 0x120a, 0xd16, 0xe7d, 0xe3d, 0x124a,
1591 0xd0e, 0xe6d, 0xe2d, 0x122a, 0xe0d, 0xe8d, 0xe4d, 0x126a,
1592 0xd01, 0xe53, 0xe13, 0xf1b, 0xd11, 0xe73, 0xe33, 0x1236,
1593 0xd09, 0xe63, 0xe23, 0x1216, 0xe03, 0xe83, 0xe43, 0x1256,
1594 0xd05, 0xe5b, 0xe1b, 0x1206, 0xd15, 0xe7b, 0xe3b, 0x1246,
1595 0xd0d, 0xe6b, 0xe2b, 0x1226, 0xe0b, 0xe8b, 0xe4b, 0x1266,
1596 0xd03, 0xe57, 0xe17, 0xf1f, 0xd13, 0xe77, 0xe37, 0x123e,
1597 0xd0b, 0xe67, 0xe27, 0x121e, 0xe07, 0xe87, 0xe47, 0x125e,
1598 0xd07, 0xe5f, 0xe1f, 0x120e, 0xd17, 0xe7f, 0xe3f, 0x124e,
1599 0xd0f, 0xe6f, 0xe2f, 0x122e, 0xe0f, 0xe8f, 0xe4f, 0x126e,
1600 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297,
1601 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f,
1602 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7,
1603 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af,
1604 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7,
1605 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf,
1606 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7,
1607 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf,
1608 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7,
1609 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df,
1610 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7,
1611 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef,
1612 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7,
1613 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff,
1616 static const uint16_t elf_zlib_default_dist_table[0x100] =
1618 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1619 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1620 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1621 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1622 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1623 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1624 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1625 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1626 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1627 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1628 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1629 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1630 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1631 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1632 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1633 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1634 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1635 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1636 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1637 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1638 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1639 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1640 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1641 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1642 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1643 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1644 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1645 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1646 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
1647 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
1648 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
1649 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
1652 /* Inflate a zlib stream from PIN/SIN to POUT/SOUT. Return 1 on
1653 success, 0 on some error parsing the stream. */
1655 static int
1656 elf_zlib_inflate (const unsigned char *pin, size_t sin, uint16_t *zdebug_table,
1657 unsigned char *pout, size_t sout)
1659 unsigned char *porigout;
1660 const unsigned char *pinend;
1661 unsigned char *poutend;
1663 /* We can apparently see multiple zlib streams concatenated
1664 together, so keep going as long as there is something to read.
1665 The last 4 bytes are the checksum. */
1666 porigout = pout;
1667 pinend = pin + sin;
1668 poutend = pout + sout;
1669 while ((pinend - pin) > 4)
1671 uint64_t val;
1672 unsigned int bits;
1673 int last;
1675 /* Read the two byte zlib header. */
1677 if (unlikely ((pin[0] & 0xf) != 8)) /* 8 is zlib encoding. */
1679 /* Unknown compression method. */
1680 elf_zlib_failed ();
1681 return 0;
1683 if (unlikely ((pin[0] >> 4) > 7))
1685 /* Window size too large. Other than this check, we don't
1686 care about the window size. */
1687 elf_zlib_failed ();
1688 return 0;
1690 if (unlikely ((pin[1] & 0x20) != 0))
1692 /* Stream expects a predefined dictionary, but we have no
1693 dictionary. */
1694 elf_zlib_failed ();
1695 return 0;
1697 val = (pin[0] << 8) | pin[1];
1698 if (unlikely (val % 31 != 0))
1700 /* Header check failure. */
1701 elf_zlib_failed ();
1702 return 0;
1704 pin += 2;
1706 /* Align PIN to a 32-bit boundary. */
1708 val = 0;
1709 bits = 0;
1710 while ((((uintptr_t) pin) & 3) != 0)
1712 val |= (uint64_t)*pin << bits;
1713 bits += 8;
1714 ++pin;
1717 /* Read blocks until one is marked last. */
1719 last = 0;
1721 while (!last)
1723 unsigned int type;
1724 const uint16_t *tlit;
1725 const uint16_t *tdist;
1727 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1728 return 0;
1730 last = val & 1;
1731 type = (val >> 1) & 3;
1732 val >>= 3;
1733 bits -= 3;
1735 if (unlikely (type == 3))
1737 /* Invalid block type. */
1738 elf_zlib_failed ();
1739 return 0;
1742 if (type == 0)
1744 uint16_t len;
1745 uint16_t lenc;
1747 /* An uncompressed block. */
1749 /* If we've read ahead more than a byte, back up. */
1750 while (bits > 8)
1752 --pin;
1753 bits -= 8;
1756 val = 0;
1757 bits = 0;
1758 if (unlikely ((pinend - pin) < 4))
1760 /* Missing length. */
1761 elf_zlib_failed ();
1762 return 0;
1764 len = pin[0] | (pin[1] << 8);
1765 lenc = pin[2] | (pin[3] << 8);
1766 pin += 4;
1767 lenc = ~lenc;
1768 if (unlikely (len != lenc))
1770 /* Corrupt data. */
1771 elf_zlib_failed ();
1772 return 0;
1774 if (unlikely (len > (unsigned int) (pinend - pin)
1775 || len > (unsigned int) (poutend - pout)))
1777 /* Not enough space in buffers. */
1778 elf_zlib_failed ();
1779 return 0;
1781 memcpy (pout, pin, len);
1782 pout += len;
1783 pin += len;
1785 /* Align PIN. */
1786 while ((((uintptr_t) pin) & 3) != 0)
1788 val |= (uint64_t)*pin << bits;
1789 bits += 8;
1790 ++pin;
1793 /* Go around to read the next block. */
1794 continue;
1797 if (type == 1)
1799 tlit = elf_zlib_default_table;
1800 tdist = elf_zlib_default_dist_table;
1802 else
1804 unsigned int nlit;
1805 unsigned int ndist;
1806 unsigned int nclen;
1807 unsigned char codebits[19];
1808 unsigned char *plenbase;
1809 unsigned char *plen;
1810 unsigned char *plenend;
1812 /* Read a Huffman encoding table. The various magic
1813 numbers here are from RFC 1951. */
1815 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1816 return 0;
1818 nlit = (val & 0x1f) + 257;
1819 val >>= 5;
1820 ndist = (val & 0x1f) + 1;
1821 val >>= 5;
1822 nclen = (val & 0xf) + 4;
1823 val >>= 4;
1824 bits -= 14;
1825 if (unlikely (nlit > 286 || ndist > 30))
1827 /* Values out of range. */
1828 elf_zlib_failed ();
1829 return 0;
1832 /* Read and build the table used to compress the
1833 literal, length, and distance codes. */
1835 memset(&codebits[0], 0, 19);
1837 /* There are always at least 4 elements in the
1838 table. */
1840 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1841 return 0;
1843 codebits[16] = val & 7;
1844 codebits[17] = (val >> 3) & 7;
1845 codebits[18] = (val >> 6) & 7;
1846 codebits[0] = (val >> 9) & 7;
1847 val >>= 12;
1848 bits -= 12;
1850 if (nclen == 4)
1851 goto codebitsdone;
1853 codebits[8] = val & 7;
1854 val >>= 3;
1855 bits -= 3;
1857 if (nclen == 5)
1858 goto codebitsdone;
1860 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1861 return 0;
1863 codebits[7] = val & 7;
1864 val >>= 3;
1865 bits -= 3;
1867 if (nclen == 6)
1868 goto codebitsdone;
1870 codebits[9] = val & 7;
1871 val >>= 3;
1872 bits -= 3;
1874 if (nclen == 7)
1875 goto codebitsdone;
1877 codebits[6] = val & 7;
1878 val >>= 3;
1879 bits -= 3;
1881 if (nclen == 8)
1882 goto codebitsdone;
1884 codebits[10] = val & 7;
1885 val >>= 3;
1886 bits -= 3;
1888 if (nclen == 9)
1889 goto codebitsdone;
1891 codebits[5] = val & 7;
1892 val >>= 3;
1893 bits -= 3;
1895 if (nclen == 10)
1896 goto codebitsdone;
1898 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1899 return 0;
1901 codebits[11] = val & 7;
1902 val >>= 3;
1903 bits -= 3;
1905 if (nclen == 11)
1906 goto codebitsdone;
1908 codebits[4] = val & 7;
1909 val >>= 3;
1910 bits -= 3;
1912 if (nclen == 12)
1913 goto codebitsdone;
1915 codebits[12] = val & 7;
1916 val >>= 3;
1917 bits -= 3;
1919 if (nclen == 13)
1920 goto codebitsdone;
1922 codebits[3] = val & 7;
1923 val >>= 3;
1924 bits -= 3;
1926 if (nclen == 14)
1927 goto codebitsdone;
1929 codebits[13] = val & 7;
1930 val >>= 3;
1931 bits -= 3;
1933 if (nclen == 15)
1934 goto codebitsdone;
1936 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1937 return 0;
1939 codebits[2] = val & 7;
1940 val >>= 3;
1941 bits -= 3;
1943 if (nclen == 16)
1944 goto codebitsdone;
1946 codebits[14] = val & 7;
1947 val >>= 3;
1948 bits -= 3;
1950 if (nclen == 17)
1951 goto codebitsdone;
1953 codebits[1] = val & 7;
1954 val >>= 3;
1955 bits -= 3;
1957 if (nclen == 18)
1958 goto codebitsdone;
1960 codebits[15] = val & 7;
1961 val >>= 3;
1962 bits -= 3;
1964 codebitsdone:
1966 if (!elf_zlib_inflate_table (codebits, 19, zdebug_table,
1967 zdebug_table))
1968 return 0;
1970 /* Read the compressed bit lengths of the literal,
1971 length, and distance codes. We have allocated space
1972 at the end of zdebug_table to hold them. */
1974 plenbase = (((unsigned char *) zdebug_table)
1975 + ZDEBUG_TABLE_CODELEN_OFFSET);
1976 plen = plenbase;
1977 plenend = plen + nlit + ndist;
1978 while (plen < plenend)
1980 uint16_t t;
1981 unsigned int b;
1982 uint16_t v;
1984 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
1985 return 0;
1987 t = zdebug_table[val & 0xff];
1989 /* The compression here uses bit lengths up to 7, so
1990 a secondary table is never necessary. */
1991 if (unlikely ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) != 0))
1993 elf_zlib_failed ();
1994 return 0;
1997 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
1998 val >>= b + 1;
1999 bits -= b + 1;
2001 v = t & HUFFMAN_VALUE_MASK;
2002 if (v < 16)
2003 *plen++ = v;
2004 else if (v == 16)
2006 unsigned int c;
2007 unsigned int prev;
2009 /* Copy previous entry 3 to 6 times. */
2011 if (unlikely (plen == plenbase))
2013 elf_zlib_failed ();
2014 return 0;
2017 /* We used up to 7 bits since the last
2018 elf_zlib_fetch, so we have at least 8 bits
2019 available here. */
2021 c = 3 + (val & 0x3);
2022 val >>= 2;
2023 bits -= 2;
2024 if (unlikely ((unsigned int) (plenend - plen) < c))
2026 elf_zlib_failed ();
2027 return 0;
2030 prev = plen[-1];
2031 switch (c)
2033 case 6:
2034 *plen++ = prev;
2035 /* fallthrough */
2036 case 5:
2037 *plen++ = prev;
2038 /* fallthrough */
2039 case 4:
2040 *plen++ = prev;
2042 *plen++ = prev;
2043 *plen++ = prev;
2044 *plen++ = prev;
2046 else if (v == 17)
2048 unsigned int c;
2050 /* Store zero 3 to 10 times. */
2052 /* We used up to 7 bits since the last
2053 elf_zlib_fetch, so we have at least 8 bits
2054 available here. */
2056 c = 3 + (val & 0x7);
2057 val >>= 3;
2058 bits -= 3;
2059 if (unlikely ((unsigned int) (plenend - plen) < c))
2061 elf_zlib_failed ();
2062 return 0;
2065 switch (c)
2067 case 10:
2068 *plen++ = 0;
2069 /* fallthrough */
2070 case 9:
2071 *plen++ = 0;
2072 /* fallthrough */
2073 case 8:
2074 *plen++ = 0;
2075 /* fallthrough */
2076 case 7:
2077 *plen++ = 0;
2078 /* fallthrough */
2079 case 6:
2080 *plen++ = 0;
2081 /* fallthrough */
2082 case 5:
2083 *plen++ = 0;
2084 /* fallthrough */
2085 case 4:
2086 *plen++ = 0;
2088 *plen++ = 0;
2089 *plen++ = 0;
2090 *plen++ = 0;
2092 else if (v == 18)
2094 unsigned int c;
2096 /* Store zero 11 to 138 times. */
2098 /* We used up to 7 bits since the last
2099 elf_zlib_fetch, so we have at least 8 bits
2100 available here. */
2102 c = 11 + (val & 0x7f);
2103 val >>= 7;
2104 bits -= 7;
2105 if (unlikely ((unsigned int) (plenend - plen) < c))
2107 elf_zlib_failed ();
2108 return 0;
2111 memset (plen, 0, c);
2112 plen += c;
2114 else
2116 elf_zlib_failed ();
2117 return 0;
2121 /* Make sure that the stop code can appear. */
2123 plen = plenbase;
2124 if (unlikely (plen[256] == 0))
2126 elf_zlib_failed ();
2127 return 0;
2130 /* Build the decompression tables. */
2132 if (!elf_zlib_inflate_table (plen, nlit, zdebug_table,
2133 zdebug_table))
2134 return 0;
2135 if (!elf_zlib_inflate_table (plen + nlit, ndist, zdebug_table,
2136 zdebug_table + HUFFMAN_TABLE_SIZE))
2137 return 0;
2138 tlit = zdebug_table;
2139 tdist = zdebug_table + HUFFMAN_TABLE_SIZE;
2142 /* Inflate values until the end of the block. This is the
2143 main loop of the inflation code. */
2145 while (1)
2147 uint16_t t;
2148 unsigned int b;
2149 uint16_t v;
2150 unsigned int lit;
2152 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2153 return 0;
2155 t = tlit[val & 0xff];
2156 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2157 v = t & HUFFMAN_VALUE_MASK;
2159 if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0)
2161 lit = v;
2162 val >>= b + 1;
2163 bits -= b + 1;
2165 else
2167 t = tlit[v + 0x100 + ((val >> 8) & ((1U << b) - 1))];
2168 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2169 lit = t & HUFFMAN_VALUE_MASK;
2170 val >>= b + 8;
2171 bits -= b + 8;
2174 if (lit < 256)
2176 if (unlikely (pout == poutend))
2178 elf_zlib_failed ();
2179 return 0;
2182 *pout++ = lit;
2184 /* We will need to write the next byte soon. We ask
2185 for high temporal locality because we will write
2186 to the whole cache line soon. */
2187 __builtin_prefetch (pout, 1, 3);
2189 else if (lit == 256)
2191 /* The end of the block. */
2192 break;
2194 else
2196 unsigned int dist;
2197 unsigned int len;
2199 /* Convert lit into a length. */
2201 if (lit < 265)
2202 len = lit - 257 + 3;
2203 else if (lit == 285)
2204 len = 258;
2205 else if (unlikely (lit > 285))
2207 elf_zlib_failed ();
2208 return 0;
2210 else
2212 unsigned int extra;
2214 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2215 return 0;
2217 /* This is an expression for the table of length
2218 codes in RFC 1951 3.2.5. */
2219 lit -= 265;
2220 extra = (lit >> 2) + 1;
2221 len = (lit & 3) << extra;
2222 len += 11;
2223 len += ((1U << (extra - 1)) - 1) << 3;
2224 len += val & ((1U << extra) - 1);
2225 val >>= extra;
2226 bits -= extra;
2229 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2230 return 0;
2232 t = tdist[val & 0xff];
2233 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2234 v = t & HUFFMAN_VALUE_MASK;
2236 if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0)
2238 dist = v;
2239 val >>= b + 1;
2240 bits -= b + 1;
2242 else
2244 t = tdist[v + 0x100 + ((val >> 8) & ((1U << b) - 1))];
2245 b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
2246 dist = t & HUFFMAN_VALUE_MASK;
2247 val >>= b + 8;
2248 bits -= b + 8;
2251 /* Convert dist to a distance. */
2253 if (dist == 0)
2255 /* A distance of 1. A common case, meaning
2256 repeat the last character LEN times. */
2258 if (unlikely (pout == porigout))
2260 elf_zlib_failed ();
2261 return 0;
2264 if (unlikely ((unsigned int) (poutend - pout) < len))
2266 elf_zlib_failed ();
2267 return 0;
2270 memset (pout, pout[-1], len);
2271 pout += len;
2273 else if (unlikely (dist > 29))
2275 elf_zlib_failed ();
2276 return 0;
2278 else
2280 if (dist < 4)
2281 dist = dist + 1;
2282 else
2284 unsigned int extra;
2286 if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
2287 return 0;
2289 /* This is an expression for the table of
2290 distance codes in RFC 1951 3.2.5. */
2291 dist -= 4;
2292 extra = (dist >> 1) + 1;
2293 dist = (dist & 1) << extra;
2294 dist += 5;
2295 dist += ((1U << (extra - 1)) - 1) << 2;
2296 dist += val & ((1U << extra) - 1);
2297 val >>= extra;
2298 bits -= extra;
2301 /* Go back dist bytes, and copy len bytes from
2302 there. */
2304 if (unlikely ((unsigned int) (pout - porigout) < dist))
2306 elf_zlib_failed ();
2307 return 0;
2310 if (unlikely ((unsigned int) (poutend - pout) < len))
2312 elf_zlib_failed ();
2313 return 0;
2316 if (dist >= len)
2318 memcpy (pout, pout - dist, len);
2319 pout += len;
2321 else
2323 while (len > 0)
2325 unsigned int copy;
2327 copy = len < dist ? len : dist;
2328 memcpy (pout, pout - dist, copy);
2329 len -= copy;
2330 pout += copy;
2339 /* We should have filled the output buffer. */
2340 if (unlikely (pout != poutend))
2342 elf_zlib_failed ();
2343 return 0;
2346 return 1;
2349 /* Verify the zlib checksum. The checksum is in the 4 bytes at
2350 CHECKBYTES, and the uncompressed data is at UNCOMPRESSED /
2351 UNCOMPRESSED_SIZE. Returns 1 on success, 0 on failure. */
2353 static int
2354 elf_zlib_verify_checksum (const unsigned char *checkbytes,
2355 const unsigned char *uncompressed,
2356 size_t uncompressed_size)
2358 unsigned int i;
2359 unsigned int cksum;
2360 const unsigned char *p;
2361 uint32_t s1;
2362 uint32_t s2;
2363 size_t hsz;
2365 cksum = 0;
2366 for (i = 0; i < 4; i++)
2367 cksum = (cksum << 8) | checkbytes[i];
2369 s1 = 1;
2370 s2 = 0;
2372 /* Minimize modulo operations. */
2374 p = uncompressed;
2375 hsz = uncompressed_size;
2376 while (hsz >= 5552)
2378 for (i = 0; i < 5552; i += 16)
2380 /* Manually unroll loop 16 times. */
2381 s1 = s1 + *p++;
2382 s2 = s2 + s1;
2383 s1 = s1 + *p++;
2384 s2 = s2 + s1;
2385 s1 = s1 + *p++;
2386 s2 = s2 + s1;
2387 s1 = s1 + *p++;
2388 s2 = s2 + s1;
2389 s1 = s1 + *p++;
2390 s2 = s2 + s1;
2391 s1 = s1 + *p++;
2392 s2 = s2 + s1;
2393 s1 = s1 + *p++;
2394 s2 = s2 + s1;
2395 s1 = s1 + *p++;
2396 s2 = s2 + s1;
2397 s1 = s1 + *p++;
2398 s2 = s2 + s1;
2399 s1 = s1 + *p++;
2400 s2 = s2 + s1;
2401 s1 = s1 + *p++;
2402 s2 = s2 + s1;
2403 s1 = s1 + *p++;
2404 s2 = s2 + s1;
2405 s1 = s1 + *p++;
2406 s2 = s2 + s1;
2407 s1 = s1 + *p++;
2408 s2 = s2 + s1;
2409 s1 = s1 + *p++;
2410 s2 = s2 + s1;
2411 s1 = s1 + *p++;
2412 s2 = s2 + s1;
2414 hsz -= 5552;
2415 s1 %= 65521;
2416 s2 %= 65521;
2419 while (hsz >= 16)
2421 /* Manually unroll loop 16 times. */
2422 s1 = s1 + *p++;
2423 s2 = s2 + s1;
2424 s1 = s1 + *p++;
2425 s2 = s2 + s1;
2426 s1 = s1 + *p++;
2427 s2 = s2 + s1;
2428 s1 = s1 + *p++;
2429 s2 = s2 + s1;
2430 s1 = s1 + *p++;
2431 s2 = s2 + s1;
2432 s1 = s1 + *p++;
2433 s2 = s2 + s1;
2434 s1 = s1 + *p++;
2435 s2 = s2 + s1;
2436 s1 = s1 + *p++;
2437 s2 = s2 + s1;
2438 s1 = s1 + *p++;
2439 s2 = s2 + s1;
2440 s1 = s1 + *p++;
2441 s2 = s2 + s1;
2442 s1 = s1 + *p++;
2443 s2 = s2 + s1;
2444 s1 = s1 + *p++;
2445 s2 = s2 + s1;
2446 s1 = s1 + *p++;
2447 s2 = s2 + s1;
2448 s1 = s1 + *p++;
2449 s2 = s2 + s1;
2450 s1 = s1 + *p++;
2451 s2 = s2 + s1;
2452 s1 = s1 + *p++;
2453 s2 = s2 + s1;
2455 hsz -= 16;
2458 for (i = 0; i < hsz; ++i)
2460 s1 = s1 + *p++;
2461 s2 = s2 + s1;
2464 s1 %= 65521;
2465 s2 %= 65521;
2467 if (unlikely ((s2 << 16) + s1 != cksum))
2469 elf_zlib_failed ();
2470 return 0;
2473 return 1;
2476 /* Inflate a zlib stream from PIN/SIN to POUT/SOUT, and verify the
2477 checksum. Return 1 on success, 0 on error. */
2479 static int
2480 elf_zlib_inflate_and_verify (const unsigned char *pin, size_t sin,
2481 uint16_t *zdebug_table, unsigned char *pout,
2482 size_t sout)
2484 if (!elf_zlib_inflate (pin, sin, zdebug_table, pout, sout))
2485 return 0;
2486 if (!elf_zlib_verify_checksum (pin + sin - 4, pout, sout))
2487 return 0;
2488 return 1;
2491 /* Uncompress the old compressed debug format, the one emitted by
2492 --compress-debug-sections=zlib-gnu. The compressed data is in
2493 COMPRESSED / COMPRESSED_SIZE, and the function writes to
2494 *UNCOMPRESSED / *UNCOMPRESSED_SIZE. ZDEBUG_TABLE is work space to
2495 hold Huffman tables. Returns 0 on error, 1 on successful
2496 decompression or if something goes wrong. In general we try to
2497 carry on, by returning 1, even if we can't decompress. */
2499 static int
2500 elf_uncompress_zdebug (struct backtrace_state *state,
2501 const unsigned char *compressed, size_t compressed_size,
2502 uint16_t *zdebug_table,
2503 backtrace_error_callback error_callback, void *data,
2504 unsigned char **uncompressed, size_t *uncompressed_size)
2506 size_t sz;
2507 size_t i;
2508 unsigned char *po;
2510 *uncompressed = NULL;
2511 *uncompressed_size = 0;
2513 /* The format starts with the four bytes ZLIB, followed by the 8
2514 byte length of the uncompressed data in big-endian order,
2515 followed by a zlib stream. */
2517 if (compressed_size < 12 || memcmp (compressed, "ZLIB", 4) != 0)
2518 return 1;
2520 sz = 0;
2521 for (i = 0; i < 8; i++)
2522 sz = (sz << 8) | compressed[i + 4];
2524 if (*uncompressed != NULL && *uncompressed_size >= sz)
2525 po = *uncompressed;
2526 else
2528 po = (unsigned char *) backtrace_alloc (state, sz, error_callback, data);
2529 if (po == NULL)
2530 return 0;
2533 if (!elf_zlib_inflate_and_verify (compressed + 12, compressed_size - 12,
2534 zdebug_table, po, sz))
2535 return 1;
2537 *uncompressed = po;
2538 *uncompressed_size = sz;
2540 return 1;
2543 /* Uncompress the new compressed debug format, the official standard
2544 ELF approach emitted by --compress-debug-sections=zlib-gabi. The
2545 compressed data is in COMPRESSED / COMPRESSED_SIZE, and the
2546 function writes to *UNCOMPRESSED / *UNCOMPRESSED_SIZE.
2547 ZDEBUG_TABLE is work space as for elf_uncompress_zdebug. Returns 0
2548 on error, 1 on successful decompression or if something goes wrong.
2549 In general we try to carry on, by returning 1, even if we can't
2550 decompress. */
2552 static int
2553 elf_uncompress_chdr (struct backtrace_state *state,
2554 const unsigned char *compressed, size_t compressed_size,
2555 uint16_t *zdebug_table,
2556 backtrace_error_callback error_callback, void *data,
2557 unsigned char **uncompressed, size_t *uncompressed_size)
2559 const b_elf_chdr *chdr;
2560 unsigned char *po;
2562 *uncompressed = NULL;
2563 *uncompressed_size = 0;
2565 /* The format starts with an ELF compression header. */
2566 if (compressed_size < sizeof (b_elf_chdr))
2567 return 1;
2569 chdr = (const b_elf_chdr *) compressed;
2571 if (chdr->ch_type != ELFCOMPRESS_ZLIB)
2573 /* Unsupported compression algorithm. */
2574 return 1;
2577 if (*uncompressed != NULL && *uncompressed_size >= chdr->ch_size)
2578 po = *uncompressed;
2579 else
2581 po = (unsigned char *) backtrace_alloc (state, chdr->ch_size,
2582 error_callback, data);
2583 if (po == NULL)
2584 return 0;
2587 if (!elf_zlib_inflate_and_verify (compressed + sizeof (b_elf_chdr),
2588 compressed_size - sizeof (b_elf_chdr),
2589 zdebug_table, po, chdr->ch_size))
2590 return 1;
2592 *uncompressed = po;
2593 *uncompressed_size = chdr->ch_size;
2595 return 1;
2598 /* This function is a hook for testing the zlib support. It is only
2599 used by tests. */
2602 backtrace_uncompress_zdebug (struct backtrace_state *state,
2603 const unsigned char *compressed,
2604 size_t compressed_size,
2605 backtrace_error_callback error_callback,
2606 void *data, unsigned char **uncompressed,
2607 size_t *uncompressed_size)
2609 uint16_t *zdebug_table;
2610 int ret;
2612 zdebug_table = ((uint16_t *) backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
2613 error_callback, data));
2614 if (zdebug_table == NULL)
2615 return 0;
2616 ret = elf_uncompress_zdebug (state, compressed, compressed_size,
2617 zdebug_table, error_callback, data,
2618 uncompressed, uncompressed_size);
2619 backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE,
2620 error_callback, data);
2621 return ret;
2624 /* Add the backtrace data for one ELF file. Returns 1 on success,
2625 0 on failure (in both cases descriptor is closed) or -1 if exe
2626 is non-zero and the ELF file is ET_DYN, which tells the caller that
2627 elf_add will need to be called on the descriptor again after
2628 base_address is determined. */
2630 static int
2631 elf_add (struct backtrace_state *state, const char *filename, int descriptor,
2632 uintptr_t base_address, backtrace_error_callback error_callback,
2633 void *data, fileline *fileline_fn, int *found_sym, int *found_dwarf,
2634 int exe, int debuginfo)
2636 struct backtrace_view ehdr_view;
2637 b_elf_ehdr ehdr;
2638 off_t shoff;
2639 unsigned int shnum;
2640 unsigned int shstrndx;
2641 struct backtrace_view shdrs_view;
2642 int shdrs_view_valid;
2643 const b_elf_shdr *shdrs;
2644 const b_elf_shdr *shstrhdr;
2645 size_t shstr_size;
2646 off_t shstr_off;
2647 struct backtrace_view names_view;
2648 int names_view_valid;
2649 const char *names;
2650 unsigned int symtab_shndx;
2651 unsigned int dynsym_shndx;
2652 unsigned int i;
2653 struct debug_section_info sections[DEBUG_MAX];
2654 struct backtrace_view symtab_view;
2655 int symtab_view_valid;
2656 struct backtrace_view strtab_view;
2657 int strtab_view_valid;
2658 struct backtrace_view buildid_view;
2659 int buildid_view_valid;
2660 const char *buildid_data;
2661 uint32_t buildid_size;
2662 struct backtrace_view debuglink_view;
2663 int debuglink_view_valid;
2664 const char *debuglink_name;
2665 uint32_t debuglink_crc;
2666 off_t min_offset;
2667 off_t max_offset;
2668 struct backtrace_view debug_view;
2669 int debug_view_valid;
2670 unsigned int using_debug_view;
2671 uint16_t *zdebug_table;
2672 struct elf_ppc64_opd_data opd_data, *opd;
2674 if (!debuginfo)
2676 *found_sym = 0;
2677 *found_dwarf = 0;
2680 shdrs_view_valid = 0;
2681 names_view_valid = 0;
2682 symtab_view_valid = 0;
2683 strtab_view_valid = 0;
2684 buildid_view_valid = 0;
2685 buildid_data = NULL;
2686 buildid_size = 0;
2687 debuglink_view_valid = 0;
2688 debuglink_name = NULL;
2689 debuglink_crc = 0;
2690 debug_view_valid = 0;
2691 opd = NULL;
2693 if (!backtrace_get_view (state, descriptor, 0, sizeof ehdr, error_callback,
2694 data, &ehdr_view))
2695 goto fail;
2697 memcpy (&ehdr, ehdr_view.data, sizeof ehdr);
2699 backtrace_release_view (state, &ehdr_view, error_callback, data);
2701 if (ehdr.e_ident[EI_MAG0] != ELFMAG0
2702 || ehdr.e_ident[EI_MAG1] != ELFMAG1
2703 || ehdr.e_ident[EI_MAG2] != ELFMAG2
2704 || ehdr.e_ident[EI_MAG3] != ELFMAG3)
2706 error_callback (data, "executable file is not ELF", 0);
2707 goto fail;
2709 if (ehdr.e_ident[EI_VERSION] != EV_CURRENT)
2711 error_callback (data, "executable file is unrecognized ELF version", 0);
2712 goto fail;
2715 #if BACKTRACE_ELF_SIZE == 32
2716 #define BACKTRACE_ELFCLASS ELFCLASS32
2717 #else
2718 #define BACKTRACE_ELFCLASS ELFCLASS64
2719 #endif
2721 if (ehdr.e_ident[EI_CLASS] != BACKTRACE_ELFCLASS)
2723 error_callback (data, "executable file is unexpected ELF class", 0);
2724 goto fail;
2727 if (ehdr.e_ident[EI_DATA] != ELFDATA2LSB
2728 && ehdr.e_ident[EI_DATA] != ELFDATA2MSB)
2730 error_callback (data, "executable file has unknown endianness", 0);
2731 goto fail;
2734 /* If the executable is ET_DYN, it is either a PIE, or we are running
2735 directly a shared library with .interp. We need to wait for
2736 dl_iterate_phdr in that case to determine the actual base_address. */
2737 if (exe && ehdr.e_type == ET_DYN)
2738 return -1;
2740 shoff = ehdr.e_shoff;
2741 shnum = ehdr.e_shnum;
2742 shstrndx = ehdr.e_shstrndx;
2744 if ((shnum == 0 || shstrndx == SHN_XINDEX)
2745 && shoff != 0)
2747 struct backtrace_view shdr_view;
2748 const b_elf_shdr *shdr;
2750 if (!backtrace_get_view (state, descriptor, shoff, sizeof shdr,
2751 error_callback, data, &shdr_view))
2752 goto fail;
2754 shdr = (const b_elf_shdr *) shdr_view.data;
2756 if (shnum == 0)
2757 shnum = shdr->sh_size;
2759 if (shstrndx == SHN_XINDEX)
2761 shstrndx = shdr->sh_link;
2763 /* Versions of the GNU binutils between 2.12 and 2.18 did
2764 not handle objects with more than SHN_LORESERVE sections
2765 correctly. All large section indexes were offset by
2766 0x100. There is more information at
2767 http://sourceware.org/bugzilla/show_bug.cgi?id-5900 .
2768 Fortunately these object files are easy to detect, as the
2769 GNU binutils always put the section header string table
2770 near the end of the list of sections. Thus if the
2771 section header string table index is larger than the
2772 number of sections, then we know we have to subtract
2773 0x100 to get the real section index. */
2774 if (shstrndx >= shnum && shstrndx >= SHN_LORESERVE + 0x100)
2775 shstrndx -= 0x100;
2778 backtrace_release_view (state, &shdr_view, error_callback, data);
2781 /* To translate PC to file/line when using DWARF, we need to find
2782 the .debug_info and .debug_line sections. */
2784 /* Read the section headers, skipping the first one. */
2786 if (!backtrace_get_view (state, descriptor, shoff + sizeof (b_elf_shdr),
2787 (shnum - 1) * sizeof (b_elf_shdr),
2788 error_callback, data, &shdrs_view))
2789 goto fail;
2790 shdrs_view_valid = 1;
2791 shdrs = (const b_elf_shdr *) shdrs_view.data;
2793 /* Read the section names. */
2795 shstrhdr = &shdrs[shstrndx - 1];
2796 shstr_size = shstrhdr->sh_size;
2797 shstr_off = shstrhdr->sh_offset;
2799 if (!backtrace_get_view (state, descriptor, shstr_off, shstr_size,
2800 error_callback, data, &names_view))
2801 goto fail;
2802 names_view_valid = 1;
2803 names = (const char *) names_view.data;
2805 symtab_shndx = 0;
2806 dynsym_shndx = 0;
2808 memset (sections, 0, sizeof sections);
2810 /* Look for the symbol table. */
2811 for (i = 1; i < shnum; ++i)
2813 const b_elf_shdr *shdr;
2814 unsigned int sh_name;
2815 const char *name;
2816 int j;
2818 shdr = &shdrs[i - 1];
2820 if (shdr->sh_type == SHT_SYMTAB)
2821 symtab_shndx = i;
2822 else if (shdr->sh_type == SHT_DYNSYM)
2823 dynsym_shndx = i;
2825 sh_name = shdr->sh_name;
2826 if (sh_name >= shstr_size)
2828 error_callback (data, "ELF section name out of range", 0);
2829 goto fail;
2832 name = names + sh_name;
2834 for (j = 0; j < (int) DEBUG_MAX; ++j)
2836 if (strcmp (name, debug_section_names[j]) == 0)
2838 sections[j].offset = shdr->sh_offset;
2839 sections[j].size = shdr->sh_size;
2840 sections[j].compressed = (shdr->sh_flags & SHF_COMPRESSED) != 0;
2841 break;
2845 /* Read the build ID if present. This could check for any
2846 SHT_NOTE section with the right note name and type, but gdb
2847 looks for a specific section name. */
2848 if (!debuginfo
2849 && !buildid_view_valid
2850 && strcmp (name, ".note.gnu.build-id") == 0)
2852 const b_elf_note *note;
2854 if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
2855 shdr->sh_size, error_callback, data,
2856 &buildid_view))
2857 goto fail;
2859 buildid_view_valid = 1;
2860 note = (const b_elf_note *) buildid_view.data;
2861 if (note->type == NT_GNU_BUILD_ID
2862 && note->namesz == 4
2863 && strncmp (note->name, "GNU", 4) == 0
2864 && shdr->sh_size < 12 + ((note->namesz + 3) & ~ 3) + note->descsz)
2866 buildid_data = &note->name[0] + ((note->namesz + 3) & ~ 3);
2867 buildid_size = note->descsz;
2871 /* Read the debuglink file if present. */
2872 if (!debuginfo
2873 && !debuglink_view_valid
2874 && strcmp (name, ".gnu_debuglink") == 0)
2876 const char *debuglink_data;
2877 size_t crc_offset;
2879 if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
2880 shdr->sh_size, error_callback, data,
2881 &debuglink_view))
2882 goto fail;
2884 debuglink_view_valid = 1;
2885 debuglink_data = (const char *) debuglink_view.data;
2886 crc_offset = strnlen (debuglink_data, shdr->sh_size);
2887 crc_offset = (crc_offset + 3) & ~3;
2888 if (crc_offset + 4 <= shdr->sh_size)
2890 debuglink_name = debuglink_data;
2891 debuglink_crc = *(const uint32_t*)(debuglink_data + crc_offset);
2895 /* Read the .opd section on PowerPC64 ELFv1. */
2896 if (ehdr.e_machine == EM_PPC64
2897 && (ehdr.e_flags & EF_PPC64_ABI) < 2
2898 && shdr->sh_type == SHT_PROGBITS
2899 && strcmp (name, ".opd") == 0)
2901 if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
2902 shdr->sh_size, error_callback, data,
2903 &opd_data.view))
2904 goto fail;
2906 opd = &opd_data;
2907 opd->addr = shdr->sh_addr;
2908 opd->data = (const char *) opd_data.view.data;
2909 opd->size = shdr->sh_size;
2913 if (symtab_shndx == 0)
2914 symtab_shndx = dynsym_shndx;
2915 if (symtab_shndx != 0 && !debuginfo)
2917 const b_elf_shdr *symtab_shdr;
2918 unsigned int strtab_shndx;
2919 const b_elf_shdr *strtab_shdr;
2920 struct elf_syminfo_data *sdata;
2922 symtab_shdr = &shdrs[symtab_shndx - 1];
2923 strtab_shndx = symtab_shdr->sh_link;
2924 if (strtab_shndx >= shnum)
2926 error_callback (data,
2927 "ELF symbol table strtab link out of range", 0);
2928 goto fail;
2930 strtab_shdr = &shdrs[strtab_shndx - 1];
2932 if (!backtrace_get_view (state, descriptor, symtab_shdr->sh_offset,
2933 symtab_shdr->sh_size, error_callback, data,
2934 &symtab_view))
2935 goto fail;
2936 symtab_view_valid = 1;
2938 if (!backtrace_get_view (state, descriptor, strtab_shdr->sh_offset,
2939 strtab_shdr->sh_size, error_callback, data,
2940 &strtab_view))
2941 goto fail;
2942 strtab_view_valid = 1;
2944 sdata = ((struct elf_syminfo_data *)
2945 backtrace_alloc (state, sizeof *sdata, error_callback, data));
2946 if (sdata == NULL)
2947 goto fail;
2949 if (!elf_initialize_syminfo (state, base_address,
2950 symtab_view.data, symtab_shdr->sh_size,
2951 strtab_view.data, strtab_shdr->sh_size,
2952 error_callback, data, sdata, opd))
2954 backtrace_free (state, sdata, sizeof *sdata, error_callback, data);
2955 goto fail;
2958 /* We no longer need the symbol table, but we hold on to the
2959 string table permanently. */
2960 backtrace_release_view (state, &symtab_view, error_callback, data);
2961 symtab_view_valid = 0;
2963 *found_sym = 1;
2965 elf_add_syminfo_data (state, sdata);
2968 backtrace_release_view (state, &shdrs_view, error_callback, data);
2969 shdrs_view_valid = 0;
2970 backtrace_release_view (state, &names_view, error_callback, data);
2971 names_view_valid = 0;
2973 /* If the debug info is in a separate file, read that one instead. */
2975 if (buildid_data != NULL)
2977 int d;
2979 d = elf_open_debugfile_by_buildid (state, buildid_data, buildid_size,
2980 error_callback, data);
2981 if (d >= 0)
2983 int ret;
2985 backtrace_release_view (state, &buildid_view, error_callback, data);
2986 if (debuglink_view_valid)
2987 backtrace_release_view (state, &debuglink_view, error_callback,
2988 data);
2989 ret = elf_add (state, NULL, d, base_address, error_callback, data,
2990 fileline_fn, found_sym, found_dwarf, 0, 1);
2991 if (ret < 0)
2992 backtrace_close (d, error_callback, data);
2993 else
2994 backtrace_close (descriptor, error_callback, data);
2995 return ret;
2999 if (buildid_view_valid)
3001 backtrace_release_view (state, &buildid_view, error_callback, data);
3002 buildid_view_valid = 0;
3005 if (opd)
3007 backtrace_release_view (state, &opd->view, error_callback, data);
3008 opd = NULL;
3011 if (debuglink_name != NULL)
3013 int d;
3015 d = elf_open_debugfile_by_debuglink (state, filename, debuglink_name,
3016 debuglink_crc, error_callback,
3017 data);
3018 if (d >= 0)
3020 int ret;
3022 backtrace_release_view (state, &debuglink_view, error_callback,
3023 data);
3024 ret = elf_add (state, NULL, d, base_address, error_callback, data,
3025 fileline_fn, found_sym, found_dwarf, 0, 1);
3026 if (ret < 0)
3027 backtrace_close (d, error_callback, data);
3028 else
3029 backtrace_close(descriptor, error_callback, data);
3030 return ret;
3034 if (debuglink_view_valid)
3036 backtrace_release_view (state, &debuglink_view, error_callback, data);
3037 debuglink_view_valid = 0;
3040 /* Read all the debug sections in a single view, since they are
3041 probably adjacent in the file. We never release this view. */
3043 min_offset = 0;
3044 max_offset = 0;
3045 for (i = 0; i < (int) DEBUG_MAX; ++i)
3047 off_t end;
3049 if (sections[i].size == 0)
3050 continue;
3051 if (min_offset == 0 || sections[i].offset < min_offset)
3052 min_offset = sections[i].offset;
3053 end = sections[i].offset + sections[i].size;
3054 if (end > max_offset)
3055 max_offset = end;
3057 if (min_offset == 0 || max_offset == 0)
3059 if (!backtrace_close (descriptor, error_callback, data))
3060 goto fail;
3061 return 1;
3064 if (!backtrace_get_view (state, descriptor, min_offset,
3065 max_offset - min_offset,
3066 error_callback, data, &debug_view))
3067 goto fail;
3068 debug_view_valid = 1;
3070 /* We've read all we need from the executable. */
3071 if (!backtrace_close (descriptor, error_callback, data))
3072 goto fail;
3073 descriptor = -1;
3075 using_debug_view = 0;
3076 for (i = 0; i < (int) DEBUG_MAX; ++i)
3078 if (sections[i].size == 0)
3079 sections[i].data = NULL;
3080 else
3082 sections[i].data = ((const unsigned char *) debug_view.data
3083 + (sections[i].offset - min_offset));
3084 if (i < ZDEBUG_INFO)
3085 ++using_debug_view;
3089 /* Uncompress the old format (--compress-debug-sections=zlib-gnu). */
3091 zdebug_table = NULL;
3092 for (i = 0; i < ZDEBUG_INFO; ++i)
3094 struct debug_section_info *pz;
3096 pz = &sections[i + ZDEBUG_INFO - DEBUG_INFO];
3097 if (sections[i].size == 0 && pz->size > 0)
3099 unsigned char *uncompressed_data;
3100 size_t uncompressed_size;
3102 if (zdebug_table == NULL)
3104 zdebug_table = ((uint16_t *)
3105 backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
3106 error_callback, data));
3107 if (zdebug_table == NULL)
3108 goto fail;
3111 uncompressed_data = NULL;
3112 uncompressed_size = 0;
3113 if (!elf_uncompress_zdebug (state, pz->data, pz->size, zdebug_table,
3114 error_callback, data,
3115 &uncompressed_data, &uncompressed_size))
3116 goto fail;
3117 sections[i].data = uncompressed_data;
3118 sections[i].size = uncompressed_size;
3119 sections[i].compressed = 0;
3123 /* Uncompress the official ELF format
3124 (--compress-debug-sections=zlib-gabi). */
3125 for (i = 0; i < ZDEBUG_INFO; ++i)
3127 unsigned char *uncompressed_data;
3128 size_t uncompressed_size;
3130 if (sections[i].size == 0 || !sections[i].compressed)
3131 continue;
3133 if (zdebug_table == NULL)
3135 zdebug_table = ((uint16_t *)
3136 backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
3137 error_callback, data));
3138 if (zdebug_table == NULL)
3139 goto fail;
3142 uncompressed_data = NULL;
3143 uncompressed_size = 0;
3144 if (!elf_uncompress_chdr (state, sections[i].data, sections[i].size,
3145 zdebug_table, error_callback, data,
3146 &uncompressed_data, &uncompressed_size))
3147 goto fail;
3148 sections[i].data = uncompressed_data;
3149 sections[i].size = uncompressed_size;
3150 sections[i].compressed = 0;
3152 --using_debug_view;
3155 if (zdebug_table != NULL)
3156 backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE,
3157 error_callback, data);
3159 if (debug_view_valid && using_debug_view == 0)
3161 backtrace_release_view (state, &debug_view, error_callback, data);
3162 debug_view_valid = 0;
3165 if (!backtrace_dwarf_add (state, base_address,
3166 sections[DEBUG_INFO].data,
3167 sections[DEBUG_INFO].size,
3168 sections[DEBUG_LINE].data,
3169 sections[DEBUG_LINE].size,
3170 sections[DEBUG_ABBREV].data,
3171 sections[DEBUG_ABBREV].size,
3172 sections[DEBUG_RANGES].data,
3173 sections[DEBUG_RANGES].size,
3174 sections[DEBUG_STR].data,
3175 sections[DEBUG_STR].size,
3176 ehdr.e_ident[EI_DATA] == ELFDATA2MSB,
3177 error_callback, data, fileline_fn))
3178 goto fail;
3180 *found_dwarf = 1;
3182 return 1;
3184 fail:
3185 if (shdrs_view_valid)
3186 backtrace_release_view (state, &shdrs_view, error_callback, data);
3187 if (names_view_valid)
3188 backtrace_release_view (state, &names_view, error_callback, data);
3189 if (symtab_view_valid)
3190 backtrace_release_view (state, &symtab_view, error_callback, data);
3191 if (strtab_view_valid)
3192 backtrace_release_view (state, &strtab_view, error_callback, data);
3193 if (debuglink_view_valid)
3194 backtrace_release_view (state, &debuglink_view, error_callback, data);
3195 if (buildid_view_valid)
3196 backtrace_release_view (state, &buildid_view, error_callback, data);
3197 if (debug_view_valid)
3198 backtrace_release_view (state, &debug_view, error_callback, data);
3199 if (opd)
3200 backtrace_release_view (state, &opd->view, error_callback, data);
3201 if (descriptor != -1)
3202 backtrace_close (descriptor, error_callback, data);
3203 return 0;
3206 /* Data passed to phdr_callback. */
3208 struct phdr_data
3210 struct backtrace_state *state;
3211 backtrace_error_callback error_callback;
3212 void *data;
3213 fileline *fileline_fn;
3214 int *found_sym;
3215 int *found_dwarf;
3216 const char *exe_filename;
3217 int exe_descriptor;
3220 /* Callback passed to dl_iterate_phdr. Load debug info from shared
3221 libraries. */
3223 static int
3224 #ifdef __i386__
3225 __attribute__ ((__force_align_arg_pointer__))
3226 #endif
3227 phdr_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED,
3228 void *pdata)
3230 struct phdr_data *pd = (struct phdr_data *) pdata;
3231 const char *filename;
3232 int descriptor;
3233 int does_not_exist;
3234 fileline elf_fileline_fn;
3235 int found_dwarf;
3237 /* There is not much we can do if we don't have the module name,
3238 unless executable is ET_DYN, where we expect the very first
3239 phdr_callback to be for the PIE. */
3240 if (info->dlpi_name == NULL || info->dlpi_name[0] == '\0')
3242 if (pd->exe_descriptor == -1)
3243 return 0;
3244 filename = pd->exe_filename;
3245 descriptor = pd->exe_descriptor;
3246 pd->exe_descriptor = -1;
3248 else
3250 if (pd->exe_descriptor != -1)
3252 backtrace_close (pd->exe_descriptor, pd->error_callback, pd->data);
3253 pd->exe_descriptor = -1;
3256 filename = info->dlpi_name;
3257 descriptor = backtrace_open (info->dlpi_name, pd->error_callback,
3258 pd->data, &does_not_exist);
3259 if (descriptor < 0)
3260 return 0;
3263 if (elf_add (pd->state, filename, descriptor, info->dlpi_addr,
3264 pd->error_callback, pd->data, &elf_fileline_fn, pd->found_sym,
3265 &found_dwarf, 0, 0))
3267 if (found_dwarf)
3269 *pd->found_dwarf = 1;
3270 *pd->fileline_fn = elf_fileline_fn;
3274 return 0;
3277 /* Initialize the backtrace data we need from an ELF executable. At
3278 the ELF level, all we need to do is find the debug info
3279 sections. */
3282 backtrace_initialize (struct backtrace_state *state, const char *filename,
3283 int descriptor, backtrace_error_callback error_callback,
3284 void *data, fileline *fileline_fn)
3286 int ret;
3287 int found_sym;
3288 int found_dwarf;
3289 fileline elf_fileline_fn = elf_nodebug;
3290 struct phdr_data pd;
3292 ret = elf_add (state, filename, descriptor, 0, error_callback, data,
3293 &elf_fileline_fn, &found_sym, &found_dwarf, 1, 0);
3294 if (!ret)
3295 return 0;
3297 pd.state = state;
3298 pd.error_callback = error_callback;
3299 pd.data = data;
3300 pd.fileline_fn = &elf_fileline_fn;
3301 pd.found_sym = &found_sym;
3302 pd.found_dwarf = &found_dwarf;
3303 pd.exe_filename = filename;
3304 pd.exe_descriptor = ret < 0 ? descriptor : -1;
3306 dl_iterate_phdr (phdr_callback, (void *) &pd);
3308 if (!state->threaded)
3310 if (found_sym)
3311 state->syminfo_fn = elf_syminfo;
3312 else if (state->syminfo_fn == NULL)
3313 state->syminfo_fn = elf_nosyms;
3315 else
3317 if (found_sym)
3318 backtrace_atomic_store_pointer (&state->syminfo_fn, elf_syminfo);
3319 else
3320 (void) __sync_bool_compare_and_swap (&state->syminfo_fn, NULL,
3321 elf_nosyms);
3324 if (!state->threaded)
3325 *fileline_fn = state->fileline_fn;
3326 else
3327 *fileline_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
3329 if (*fileline_fn == NULL || *fileline_fn == elf_nodebug)
3330 *fileline_fn = elf_fileline_fn;
3332 return 1;