1 1.1 mrg /* elf.c -- Get debug data from an ELF file for backtraces. 2 1.10 mrg Copyright (C) 2012-2022 Free Software Foundation, Inc. 3 1.1 mrg Written by Ian Lance Taylor, Google. 4 1.1 mrg 5 1.1 mrg Redistribution and use in source and binary forms, with or without 6 1.1 mrg modification, are permitted provided that the following conditions are 7 1.1 mrg met: 8 1.1 mrg 9 1.1 mrg (1) Redistributions of source code must retain the above copyright 10 1.6 mrg notice, this list of conditions and the following disclaimer. 11 1.1 mrg 12 1.1 mrg (2) Redistributions in binary form must reproduce the above copyright 13 1.1 mrg notice, this list of conditions and the following disclaimer in 14 1.1 mrg the documentation and/or other materials provided with the 15 1.6 mrg distribution. 16 1.6 mrg 17 1.1 mrg (3) The name of the author may not be used to 18 1.1 mrg endorse or promote products derived from this software without 19 1.1 mrg specific prior written permission. 20 1.1 mrg 21 1.1 mrg THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 1.1 mrg IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 1.1 mrg WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 1.1 mrg DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 25 1.1 mrg INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 1.1 mrg (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 27 1.1 mrg SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 1.1 mrg HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 29 1.1 mrg STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 30 1.1 mrg IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 1.1 mrg POSSIBILITY OF SUCH DAMAGE. */ 32 1.1 mrg 33 1.1 mrg #include "config.h" 34 1.1 mrg 35 1.7 mrg #include <errno.h> 36 1.1 mrg #include <stdlib.h> 37 1.1 mrg #include <string.h> 38 1.1 mrg #include <sys/types.h> 39 1.7 mrg #include <sys/stat.h> 40 1.7 mrg #include <unistd.h> 41 1.1 mrg 42 1.1 mrg #ifdef HAVE_DL_ITERATE_PHDR 43 1.1 mrg #include <link.h> 44 1.1 mrg #endif 45 1.1 mrg 46 1.1 mrg #include "backtrace.h" 47 1.1 mrg #include "internal.h" 48 1.1 mrg 49 1.7 mrg #ifndef S_ISLNK 50 1.7 mrg #ifndef S_IFLNK 51 1.7 mrg #define S_IFLNK 0120000 52 1.7 mrg #endif 53 1.7 mrg #ifndef S_IFMT 54 1.7 mrg #define S_IFMT 0170000 55 1.7 mrg #endif 56 1.7 mrg #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 57 1.7 mrg #endif 58 1.7 mrg 59 1.7 mrg #ifndef __GNUC__ 60 1.7 mrg #define __builtin_prefetch(p, r, l) 61 1.7 mrg #define unlikely(x) (x) 62 1.7 mrg #else 63 1.7 mrg #define unlikely(x) __builtin_expect(!!(x), 0) 64 1.7 mrg #endif 65 1.7 mrg 66 1.7 mrg #if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN 67 1.7 mrg 68 1.7 mrg /* If strnlen is not declared, provide our own version. */ 69 1.7 mrg 70 1.7 mrg static size_t 71 1.7 mrg xstrnlen (const char *s, size_t maxlen) 72 1.7 mrg { 73 1.7 mrg size_t i; 74 1.7 mrg 75 1.7 mrg for (i = 0; i < maxlen; ++i) 76 1.7 mrg if (s[i] == '\0') 77 1.7 mrg break; 78 1.7 mrg return i; 79 1.7 mrg } 80 1.7 mrg 81 1.7 mrg #define strnlen xstrnlen 82 1.7 mrg 83 1.7 mrg #endif 84 1.7 mrg 85 1.7 mrg #ifndef HAVE_LSTAT 86 1.7 mrg 87 1.7 mrg /* Dummy version of lstat for systems that don't have it. */ 88 1.7 mrg 89 1.7 mrg static int 90 1.7 mrg xlstat (const char *path ATTRIBUTE_UNUSED, struct stat *st ATTRIBUTE_UNUSED) 91 1.7 mrg { 92 1.7 mrg return -1; 93 1.7 mrg } 94 1.7 mrg 95 1.7 mrg #define lstat xlstat 96 1.7 mrg 97 1.7 mrg #endif 98 1.7 mrg 99 1.7 mrg #ifndef HAVE_READLINK 100 1.7 mrg 101 1.7 mrg /* Dummy version of readlink for systems that don't have it. */ 102 1.7 mrg 103 1.7 mrg static ssize_t 104 1.7 mrg xreadlink (const char *path ATTRIBUTE_UNUSED, char *buf ATTRIBUTE_UNUSED, 105 1.7 mrg size_t bufsz ATTRIBUTE_UNUSED) 106 1.7 mrg { 107 1.7 mrg return -1; 108 1.7 mrg } 109 1.7 mrg 110 1.7 mrg #define readlink xreadlink 111 1.7 mrg 112 1.7 mrg #endif 113 1.7 mrg 114 1.1 mrg #ifndef HAVE_DL_ITERATE_PHDR 115 1.1 mrg 116 1.1 mrg /* Dummy version of dl_iterate_phdr for systems that don't have it. */ 117 1.1 mrg 118 1.1 mrg #define dl_phdr_info x_dl_phdr_info 119 1.1 mrg #define dl_iterate_phdr x_dl_iterate_phdr 120 1.1 mrg 121 1.1 mrg struct dl_phdr_info 122 1.1 mrg { 123 1.1 mrg uintptr_t dlpi_addr; 124 1.1 mrg const char *dlpi_name; 125 1.1 mrg }; 126 1.1 mrg 127 1.1 mrg static int 128 1.1 mrg dl_iterate_phdr (int (*callback) (struct dl_phdr_info *, 129 1.1 mrg size_t, void *) ATTRIBUTE_UNUSED, 130 1.1 mrg void *data ATTRIBUTE_UNUSED) 131 1.1 mrg { 132 1.1 mrg return 0; 133 1.1 mrg } 134 1.1 mrg 135 1.1 mrg #endif /* ! defined (HAVE_DL_ITERATE_PHDR) */ 136 1.1 mrg 137 1.1 mrg /* The configure script must tell us whether we are 32-bit or 64-bit 138 1.1 mrg ELF. We could make this code test and support either possibility, 139 1.1 mrg but there is no point. This code only works for the currently 140 1.1 mrg running executable, which means that we know the ELF mode at 141 1.7 mrg configure time. */ 142 1.1 mrg 143 1.1 mrg #if BACKTRACE_ELF_SIZE != 32 && BACKTRACE_ELF_SIZE != 64 144 1.1 mrg #error "Unknown BACKTRACE_ELF_SIZE" 145 1.1 mrg #endif 146 1.1 mrg 147 1.1 mrg /* <link.h> might #include <elf.h> which might define our constants 148 1.1 mrg with slightly different values. Undefine them to be safe. */ 149 1.1 mrg 150 1.1 mrg #undef EI_NIDENT 151 1.1 mrg #undef EI_MAG0 152 1.1 mrg #undef EI_MAG1 153 1.1 mrg #undef EI_MAG2 154 1.1 mrg #undef EI_MAG3 155 1.1 mrg #undef EI_CLASS 156 1.1 mrg #undef EI_DATA 157 1.1 mrg #undef EI_VERSION 158 1.11 jkoshy #undef ELFMAG0 159 1.11 jkoshy #undef ELFMAG1 160 1.11 jkoshy #undef ELFMAG2 161 1.11 jkoshy #undef ELFMAG3 162 1.1 mrg #undef ELFCLASS32 163 1.1 mrg #undef ELFCLASS64 164 1.1 mrg #undef ELFDATA2LSB 165 1.1 mrg #undef ELFDATA2MSB 166 1.1 mrg #undef EV_CURRENT 167 1.3 mrg #undef ET_DYN 168 1.7 mrg #undef EM_PPC64 169 1.7 mrg #undef EF_PPC64_ABI 170 1.1 mrg #undef SHN_LORESERVE 171 1.1 mrg #undef SHN_XINDEX 172 1.3 mrg #undef SHN_UNDEF 173 1.7 mrg #undef SHT_PROGBITS 174 1.1 mrg #undef SHT_SYMTAB 175 1.1 mrg #undef SHT_STRTAB 176 1.1 mrg #undef SHT_DYNSYM 177 1.6 mrg #undef SHF_COMPRESSED 178 1.3 mrg #undef STT_OBJECT 179 1.1 mrg #undef STT_FUNC 180 1.7 mrg #undef NT_GNU_BUILD_ID 181 1.7 mrg #undef ELFCOMPRESS_ZLIB 182 1.1 mrg 183 1.1 mrg /* Basic types. */ 184 1.1 mrg 185 1.1 mrg typedef uint16_t b_elf_half; /* Elf_Half. */ 186 1.1 mrg typedef uint32_t b_elf_word; /* Elf_Word. */ 187 1.1 mrg typedef int32_t b_elf_sword; /* Elf_Sword. */ 188 1.1 mrg 189 1.1 mrg #if BACKTRACE_ELF_SIZE == 32 190 1.1 mrg 191 1.1 mrg typedef uint32_t b_elf_addr; /* Elf_Addr. */ 192 1.1 mrg typedef uint32_t b_elf_off; /* Elf_Off. */ 193 1.1 mrg 194 1.1 mrg typedef uint32_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */ 195 1.1 mrg 196 1.1 mrg #else 197 1.1 mrg 198 1.1 mrg typedef uint64_t b_elf_addr; /* Elf_Addr. */ 199 1.1 mrg typedef uint64_t b_elf_off; /* Elf_Off. */ 200 1.1 mrg typedef uint64_t b_elf_xword; /* Elf_Xword. */ 201 1.1 mrg typedef int64_t b_elf_sxword; /* Elf_Sxword. */ 202 1.1 mrg 203 1.1 mrg typedef uint64_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */ 204 1.1 mrg 205 1.1 mrg #endif 206 1.1 mrg 207 1.1 mrg /* Data structures and associated constants. */ 208 1.1 mrg 209 1.1 mrg #define EI_NIDENT 16 210 1.1 mrg 211 1.1 mrg typedef struct { 212 1.1 mrg unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */ 213 1.1 mrg b_elf_half e_type; /* Identifies object file type */ 214 1.1 mrg b_elf_half e_machine; /* Specifies required architecture */ 215 1.1 mrg b_elf_word e_version; /* Identifies object file version */ 216 1.1 mrg b_elf_addr e_entry; /* Entry point virtual address */ 217 1.1 mrg b_elf_off e_phoff; /* Program header table file offset */ 218 1.1 mrg b_elf_off e_shoff; /* Section header table file offset */ 219 1.1 mrg b_elf_word e_flags; /* Processor-specific flags */ 220 1.1 mrg b_elf_half e_ehsize; /* ELF header size in bytes */ 221 1.1 mrg b_elf_half e_phentsize; /* Program header table entry size */ 222 1.1 mrg b_elf_half e_phnum; /* Program header table entry count */ 223 1.1 mrg b_elf_half e_shentsize; /* Section header table entry size */ 224 1.1 mrg b_elf_half e_shnum; /* Section header table entry count */ 225 1.1 mrg b_elf_half e_shstrndx; /* Section header string table index */ 226 1.1 mrg } b_elf_ehdr; /* Elf_Ehdr. */ 227 1.1 mrg 228 1.1 mrg #define EI_MAG0 0 229 1.1 mrg #define EI_MAG1 1 230 1.1 mrg #define EI_MAG2 2 231 1.1 mrg #define EI_MAG3 3 232 1.1 mrg #define EI_CLASS 4 233 1.1 mrg #define EI_DATA 5 234 1.1 mrg #define EI_VERSION 6 235 1.1 mrg 236 1.1 mrg #define ELFMAG0 0x7f 237 1.1 mrg #define ELFMAG1 'E' 238 1.1 mrg #define ELFMAG2 'L' 239 1.1 mrg #define ELFMAG3 'F' 240 1.1 mrg 241 1.1 mrg #define ELFCLASS32 1 242 1.1 mrg #define ELFCLASS64 2 243 1.1 mrg 244 1.1 mrg #define ELFDATA2LSB 1 245 1.1 mrg #define ELFDATA2MSB 2 246 1.1 mrg 247 1.1 mrg #define EV_CURRENT 1 248 1.1 mrg 249 1.3 mrg #define ET_DYN 3 250 1.3 mrg 251 1.7 mrg #define EM_PPC64 21 252 1.7 mrg #define EF_PPC64_ABI 3 253 1.7 mrg 254 1.1 mrg typedef struct { 255 1.1 mrg b_elf_word sh_name; /* Section name, index in string tbl */ 256 1.1 mrg b_elf_word sh_type; /* Type of section */ 257 1.1 mrg b_elf_wxword sh_flags; /* Miscellaneous section attributes */ 258 1.1 mrg b_elf_addr sh_addr; /* Section virtual addr at execution */ 259 1.1 mrg b_elf_off sh_offset; /* Section file offset */ 260 1.1 mrg b_elf_wxword sh_size; /* Size of section in bytes */ 261 1.1 mrg b_elf_word sh_link; /* Index of another section */ 262 1.1 mrg b_elf_word sh_info; /* Additional section information */ 263 1.1 mrg b_elf_wxword sh_addralign; /* Section alignment */ 264 1.1 mrg b_elf_wxword sh_entsize; /* Entry size if section holds table */ 265 1.1 mrg } b_elf_shdr; /* Elf_Shdr. */ 266 1.1 mrg 267 1.3 mrg #define SHN_UNDEF 0x0000 /* Undefined section */ 268 1.1 mrg #define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */ 269 1.1 mrg #define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */ 270 1.1 mrg 271 1.7 mrg #define SHT_PROGBITS 1 272 1.1 mrg #define SHT_SYMTAB 2 273 1.1 mrg #define SHT_STRTAB 3 274 1.1 mrg #define SHT_DYNSYM 11 275 1.1 mrg 276 1.6 mrg #define SHF_COMPRESSED 0x800 277 1.6 mrg 278 1.1 mrg #if BACKTRACE_ELF_SIZE == 32 279 1.1 mrg 280 1.1 mrg typedef struct 281 1.1 mrg { 282 1.1 mrg b_elf_word st_name; /* Symbol name, index in string tbl */ 283 1.1 mrg b_elf_addr st_value; /* Symbol value */ 284 1.1 mrg b_elf_word st_size; /* Symbol size */ 285 1.1 mrg unsigned char st_info; /* Symbol binding and type */ 286 1.1 mrg unsigned char st_other; /* Visibility and other data */ 287 1.1 mrg b_elf_half st_shndx; /* Symbol section index */ 288 1.1 mrg } b_elf_sym; /* Elf_Sym. */ 289 1.1 mrg 290 1.1 mrg #else /* BACKTRACE_ELF_SIZE != 32 */ 291 1.1 mrg 292 1.1 mrg typedef struct 293 1.1 mrg { 294 1.1 mrg b_elf_word st_name; /* Symbol name, index in string tbl */ 295 1.1 mrg unsigned char st_info; /* Symbol binding and type */ 296 1.1 mrg unsigned char st_other; /* Visibility and other data */ 297 1.1 mrg b_elf_half st_shndx; /* Symbol section index */ 298 1.1 mrg b_elf_addr st_value; /* Symbol value */ 299 1.1 mrg b_elf_xword st_size; /* Symbol size */ 300 1.1 mrg } b_elf_sym; /* Elf_Sym. */ 301 1.1 mrg 302 1.1 mrg #endif /* BACKTRACE_ELF_SIZE != 32 */ 303 1.1 mrg 304 1.3 mrg #define STT_OBJECT 1 305 1.1 mrg #define STT_FUNC 2 306 1.1 mrg 307 1.7 mrg typedef struct 308 1.7 mrg { 309 1.7 mrg uint32_t namesz; 310 1.7 mrg uint32_t descsz; 311 1.7 mrg uint32_t type; 312 1.7 mrg char name[1]; 313 1.7 mrg } b_elf_note; 314 1.7 mrg 315 1.7 mrg #define NT_GNU_BUILD_ID 3 316 1.7 mrg 317 1.7 mrg #if BACKTRACE_ELF_SIZE == 32 318 1.7 mrg 319 1.7 mrg typedef struct 320 1.7 mrg { 321 1.7 mrg b_elf_word ch_type; /* Compresstion algorithm */ 322 1.7 mrg b_elf_word ch_size; /* Uncompressed size */ 323 1.7 mrg b_elf_word ch_addralign; /* Alignment for uncompressed data */ 324 1.7 mrg } b_elf_chdr; /* Elf_Chdr */ 325 1.7 mrg 326 1.7 mrg #else /* BACKTRACE_ELF_SIZE != 32 */ 327 1.7 mrg 328 1.7 mrg typedef struct 329 1.7 mrg { 330 1.7 mrg b_elf_word ch_type; /* Compression algorithm */ 331 1.7 mrg b_elf_word ch_reserved; /* Reserved */ 332 1.7 mrg b_elf_xword ch_size; /* Uncompressed size */ 333 1.7 mrg b_elf_xword ch_addralign; /* Alignment for uncompressed data */ 334 1.7 mrg } b_elf_chdr; /* Elf_Chdr */ 335 1.7 mrg 336 1.7 mrg #endif /* BACKTRACE_ELF_SIZE != 32 */ 337 1.7 mrg 338 1.7 mrg #define ELFCOMPRESS_ZLIB 1 339 1.7 mrg 340 1.9 mrg /* Names of sections, indexed by enum dwarf_section in internal.h. */ 341 1.1 mrg 342 1.9 mrg static const char * const dwarf_section_names[DEBUG_MAX] = 343 1.1 mrg { 344 1.1 mrg ".debug_info", 345 1.1 mrg ".debug_line", 346 1.1 mrg ".debug_abbrev", 347 1.1 mrg ".debug_ranges", 348 1.7 mrg ".debug_str", 349 1.9 mrg ".debug_addr", 350 1.9 mrg ".debug_str_offsets", 351 1.9 mrg ".debug_line_str", 352 1.9 mrg ".debug_rnglists" 353 1.1 mrg }; 354 1.1 mrg 355 1.1 mrg /* Information we gather for the sections we care about. */ 356 1.1 mrg 357 1.1 mrg struct debug_section_info 358 1.1 mrg { 359 1.1 mrg /* Section file offset. */ 360 1.1 mrg off_t offset; 361 1.1 mrg /* Section size. */ 362 1.1 mrg size_t size; 363 1.1 mrg /* Section contents, after read from file. */ 364 1.1 mrg const unsigned char *data; 365 1.7 mrg /* Whether the SHF_COMPRESSED flag is set for the section. */ 366 1.7 mrg int compressed; 367 1.1 mrg }; 368 1.1 mrg 369 1.1 mrg /* Information we keep for an ELF symbol. */ 370 1.1 mrg 371 1.1 mrg struct elf_symbol 372 1.1 mrg { 373 1.1 mrg /* The name of the symbol. */ 374 1.1 mrg const char *name; 375 1.1 mrg /* The address of the symbol. */ 376 1.1 mrg uintptr_t address; 377 1.1 mrg /* The size of the symbol. */ 378 1.1 mrg size_t size; 379 1.1 mrg }; 380 1.1 mrg 381 1.1 mrg /* Information to pass to elf_syminfo. */ 382 1.1 mrg 383 1.1 mrg struct elf_syminfo_data 384 1.1 mrg { 385 1.1 mrg /* Symbols for the next module. */ 386 1.1 mrg struct elf_syminfo_data *next; 387 1.1 mrg /* The ELF symbols, sorted by address. */ 388 1.1 mrg struct elf_symbol *symbols; 389 1.1 mrg /* The number of symbols. */ 390 1.1 mrg size_t count; 391 1.1 mrg }; 392 1.1 mrg 393 1.10 mrg /* A view that works for either a file or memory. */ 394 1.10 mrg 395 1.10 mrg struct elf_view 396 1.10 mrg { 397 1.10 mrg struct backtrace_view view; 398 1.10 mrg int release; /* If non-zero, must call backtrace_release_view. */ 399 1.10 mrg }; 400 1.10 mrg 401 1.7 mrg /* Information about PowerPC64 ELFv1 .opd section. */ 402 1.7 mrg 403 1.7 mrg struct elf_ppc64_opd_data 404 1.7 mrg { 405 1.7 mrg /* Address of the .opd section. */ 406 1.7 mrg b_elf_addr addr; 407 1.7 mrg /* Section data. */ 408 1.7 mrg const char *data; 409 1.7 mrg /* Size of the .opd section. */ 410 1.7 mrg size_t size; 411 1.7 mrg /* Corresponding section view. */ 412 1.10 mrg struct elf_view view; 413 1.7 mrg }; 414 1.7 mrg 415 1.10 mrg /* Create a view of SIZE bytes from DESCRIPTOR/MEMORY at OFFSET. */ 416 1.10 mrg 417 1.10 mrg static int 418 1.10 mrg elf_get_view (struct backtrace_state *state, int descriptor, 419 1.10 mrg const unsigned char *memory, size_t memory_size, off_t offset, 420 1.10 mrg uint64_t size, backtrace_error_callback error_callback, 421 1.10 mrg void *data, struct elf_view *view) 422 1.10 mrg { 423 1.10 mrg if (memory == NULL) 424 1.10 mrg { 425 1.10 mrg view->release = 1; 426 1.10 mrg return backtrace_get_view (state, descriptor, offset, size, 427 1.10 mrg error_callback, data, &view->view); 428 1.10 mrg } 429 1.10 mrg else 430 1.10 mrg { 431 1.10 mrg if ((uint64_t) offset + size > (uint64_t) memory_size) 432 1.10 mrg { 433 1.10 mrg error_callback (data, "out of range for in-memory file", 0); 434 1.10 mrg return 0; 435 1.10 mrg } 436 1.10 mrg view->view.data = (const void *) (memory + offset); 437 1.10 mrg view->view.base = NULL; 438 1.10 mrg view->view.len = size; 439 1.10 mrg view->release = 0; 440 1.10 mrg return 1; 441 1.10 mrg } 442 1.10 mrg } 443 1.10 mrg 444 1.10 mrg /* Release a view read by elf_get_view. */ 445 1.10 mrg 446 1.10 mrg static void 447 1.10 mrg elf_release_view (struct backtrace_state *state, struct elf_view *view, 448 1.10 mrg backtrace_error_callback error_callback, void *data) 449 1.10 mrg { 450 1.10 mrg if (view->release) 451 1.10 mrg backtrace_release_view (state, &view->view, error_callback, data); 452 1.10 mrg } 453 1.10 mrg 454 1.7 mrg /* Compute the CRC-32 of BUF/LEN. This uses the CRC used for 455 1.7 mrg .gnu_debuglink files. */ 456 1.7 mrg 457 1.7 mrg static uint32_t 458 1.7 mrg elf_crc32 (uint32_t crc, const unsigned char *buf, size_t len) 459 1.7 mrg { 460 1.7 mrg static const uint32_t crc32_table[256] = 461 1.7 mrg { 462 1.7 mrg 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 463 1.7 mrg 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 464 1.7 mrg 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 465 1.7 mrg 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 466 1.7 mrg 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 467 1.7 mrg 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 468 1.7 mrg 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 469 1.7 mrg 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 470 1.7 mrg 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 471 1.7 mrg 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 472 1.7 mrg 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 473 1.7 mrg 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 474 1.7 mrg 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 475 1.7 mrg 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 476 1.7 mrg 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 477 1.7 mrg 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 478 1.7 mrg 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 479 1.7 mrg 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 480 1.7 mrg 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 481 1.7 mrg 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 482 1.7 mrg 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 483 1.7 mrg 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 484 1.7 mrg 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 485 1.7 mrg 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 486 1.7 mrg 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 487 1.7 mrg 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 488 1.7 mrg 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 489 1.7 mrg 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 490 1.7 mrg 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 491 1.7 mrg 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 492 1.7 mrg 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 493 1.7 mrg 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 494 1.7 mrg 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 495 1.7 mrg 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 496 1.7 mrg 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 497 1.7 mrg 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 498 1.7 mrg 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 499 1.7 mrg 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 500 1.7 mrg 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 501 1.7 mrg 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 502 1.7 mrg 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 503 1.7 mrg 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 504 1.7 mrg 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 505 1.7 mrg 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 506 1.7 mrg 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 507 1.7 mrg 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 508 1.7 mrg 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 509 1.7 mrg 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 510 1.7 mrg 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 511 1.7 mrg 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 512 1.7 mrg 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 513 1.7 mrg 0x2d02ef8d 514 1.7 mrg }; 515 1.7 mrg const unsigned char *end; 516 1.7 mrg 517 1.7 mrg crc = ~crc; 518 1.7 mrg for (end = buf + len; buf < end; ++ buf) 519 1.7 mrg crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); 520 1.7 mrg return ~crc; 521 1.7 mrg } 522 1.7 mrg 523 1.7 mrg /* Return the CRC-32 of the entire file open at DESCRIPTOR. */ 524 1.7 mrg 525 1.7 mrg static uint32_t 526 1.7 mrg elf_crc32_file (struct backtrace_state *state, int descriptor, 527 1.7 mrg backtrace_error_callback error_callback, void *data) 528 1.7 mrg { 529 1.7 mrg struct stat st; 530 1.7 mrg struct backtrace_view file_view; 531 1.7 mrg uint32_t ret; 532 1.7 mrg 533 1.7 mrg if (fstat (descriptor, &st) < 0) 534 1.7 mrg { 535 1.7 mrg error_callback (data, "fstat", errno); 536 1.7 mrg return 0; 537 1.7 mrg } 538 1.7 mrg 539 1.7 mrg if (!backtrace_get_view (state, descriptor, 0, st.st_size, error_callback, 540 1.7 mrg data, &file_view)) 541 1.7 mrg return 0; 542 1.7 mrg 543 1.7 mrg ret = elf_crc32 (0, (const unsigned char *) file_view.data, st.st_size); 544 1.7 mrg 545 1.7 mrg backtrace_release_view (state, &file_view, error_callback, data); 546 1.7 mrg 547 1.7 mrg return ret; 548 1.7 mrg } 549 1.7 mrg 550 1.1 mrg /* A dummy callback function used when we can't find a symbol 551 1.1 mrg table. */ 552 1.1 mrg 553 1.1 mrg static void 554 1.1 mrg elf_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED, 555 1.3 mrg uintptr_t addr ATTRIBUTE_UNUSED, 556 1.1 mrg backtrace_syminfo_callback callback ATTRIBUTE_UNUSED, 557 1.1 mrg backtrace_error_callback error_callback, void *data) 558 1.1 mrg { 559 1.1 mrg error_callback (data, "no symbol table in ELF executable", -1); 560 1.1 mrg } 561 1.1 mrg 562 1.10 mrg /* A callback function used when we can't find any debug info. */ 563 1.10 mrg 564 1.10 mrg static int 565 1.10 mrg elf_nodebug (struct backtrace_state *state, uintptr_t pc, 566 1.10 mrg backtrace_full_callback callback, 567 1.10 mrg backtrace_error_callback error_callback, void *data) 568 1.10 mrg { 569 1.10 mrg if (state->syminfo_fn != NULL && state->syminfo_fn != elf_nosyms) 570 1.10 mrg { 571 1.10 mrg struct backtrace_call_full bdata; 572 1.10 mrg 573 1.10 mrg /* Fetch symbol information so that we can least get the 574 1.10 mrg function name. */ 575 1.10 mrg 576 1.10 mrg bdata.full_callback = callback; 577 1.10 mrg bdata.full_error_callback = error_callback; 578 1.10 mrg bdata.full_data = data; 579 1.10 mrg bdata.ret = 0; 580 1.10 mrg state->syminfo_fn (state, pc, backtrace_syminfo_to_full_callback, 581 1.10 mrg backtrace_syminfo_to_full_error_callback, &bdata); 582 1.10 mrg return bdata.ret; 583 1.10 mrg } 584 1.10 mrg 585 1.10 mrg error_callback (data, "no debug info in ELF executable", -1); 586 1.10 mrg return 0; 587 1.10 mrg } 588 1.10 mrg 589 1.1 mrg /* Compare struct elf_symbol for qsort. */ 590 1.1 mrg 591 1.1 mrg static int 592 1.1 mrg elf_symbol_compare (const void *v1, const void *v2) 593 1.1 mrg { 594 1.1 mrg const struct elf_symbol *e1 = (const struct elf_symbol *) v1; 595 1.1 mrg const struct elf_symbol *e2 = (const struct elf_symbol *) v2; 596 1.1 mrg 597 1.1 mrg if (e1->address < e2->address) 598 1.1 mrg return -1; 599 1.1 mrg else if (e1->address > e2->address) 600 1.1 mrg return 1; 601 1.1 mrg else 602 1.1 mrg return 0; 603 1.1 mrg } 604 1.1 mrg 605 1.3 mrg /* Compare an ADDR against an elf_symbol for bsearch. We allocate one 606 1.1 mrg extra entry in the array so that this can look safely at the next 607 1.1 mrg entry. */ 608 1.1 mrg 609 1.1 mrg static int 610 1.1 mrg elf_symbol_search (const void *vkey, const void *ventry) 611 1.1 mrg { 612 1.1 mrg const uintptr_t *key = (const uintptr_t *) vkey; 613 1.1 mrg const struct elf_symbol *entry = (const struct elf_symbol *) ventry; 614 1.3 mrg uintptr_t addr; 615 1.1 mrg 616 1.3 mrg addr = *key; 617 1.3 mrg if (addr < entry->address) 618 1.1 mrg return -1; 619 1.3 mrg else if (addr >= entry->address + entry->size) 620 1.1 mrg return 1; 621 1.1 mrg else 622 1.1 mrg return 0; 623 1.1 mrg } 624 1.1 mrg 625 1.1 mrg /* Initialize the symbol table info for elf_syminfo. */ 626 1.1 mrg 627 1.1 mrg static int 628 1.1 mrg elf_initialize_syminfo (struct backtrace_state *state, 629 1.3 mrg uintptr_t base_address, 630 1.1 mrg const unsigned char *symtab_data, size_t symtab_size, 631 1.1 mrg const unsigned char *strtab, size_t strtab_size, 632 1.1 mrg backtrace_error_callback error_callback, 633 1.7 mrg void *data, struct elf_syminfo_data *sdata, 634 1.7 mrg struct elf_ppc64_opd_data *opd) 635 1.1 mrg { 636 1.1 mrg size_t sym_count; 637 1.1 mrg const b_elf_sym *sym; 638 1.1 mrg size_t elf_symbol_count; 639 1.1 mrg size_t elf_symbol_size; 640 1.1 mrg struct elf_symbol *elf_symbols; 641 1.1 mrg size_t i; 642 1.1 mrg unsigned int j; 643 1.1 mrg 644 1.1 mrg sym_count = symtab_size / sizeof (b_elf_sym); 645 1.1 mrg 646 1.1 mrg /* We only care about function symbols. Count them. */ 647 1.1 mrg sym = (const b_elf_sym *) symtab_data; 648 1.1 mrg elf_symbol_count = 0; 649 1.1 mrg for (i = 0; i < sym_count; ++i, ++sym) 650 1.1 mrg { 651 1.3 mrg int info; 652 1.3 mrg 653 1.3 mrg info = sym->st_info & 0xf; 654 1.3 mrg if ((info == STT_FUNC || info == STT_OBJECT) 655 1.3 mrg && sym->st_shndx != SHN_UNDEF) 656 1.1 mrg ++elf_symbol_count; 657 1.1 mrg } 658 1.1 mrg 659 1.1 mrg elf_symbol_size = elf_symbol_count * sizeof (struct elf_symbol); 660 1.1 mrg elf_symbols = ((struct elf_symbol *) 661 1.1 mrg backtrace_alloc (state, elf_symbol_size, error_callback, 662 1.1 mrg data)); 663 1.1 mrg if (elf_symbols == NULL) 664 1.1 mrg return 0; 665 1.1 mrg 666 1.1 mrg sym = (const b_elf_sym *) symtab_data; 667 1.1 mrg j = 0; 668 1.1 mrg for (i = 0; i < sym_count; ++i, ++sym) 669 1.1 mrg { 670 1.3 mrg int info; 671 1.3 mrg 672 1.3 mrg info = sym->st_info & 0xf; 673 1.3 mrg if (info != STT_FUNC && info != STT_OBJECT) 674 1.3 mrg continue; 675 1.3 mrg if (sym->st_shndx == SHN_UNDEF) 676 1.1 mrg continue; 677 1.1 mrg if (sym->st_name >= strtab_size) 678 1.1 mrg { 679 1.1 mrg error_callback (data, "symbol string index out of range", 0); 680 1.1 mrg backtrace_free (state, elf_symbols, elf_symbol_size, error_callback, 681 1.1 mrg data); 682 1.1 mrg return 0; 683 1.1 mrg } 684 1.1 mrg elf_symbols[j].name = (const char *) strtab + sym->st_name; 685 1.7 mrg /* Special case PowerPC64 ELFv1 symbols in .opd section, if the symbol 686 1.7 mrg is a function descriptor, read the actual code address from the 687 1.7 mrg descriptor. */ 688 1.7 mrg if (opd 689 1.7 mrg && sym->st_value >= opd->addr 690 1.7 mrg && sym->st_value < opd->addr + opd->size) 691 1.7 mrg elf_symbols[j].address 692 1.7 mrg = *(const b_elf_addr *) (opd->data + (sym->st_value - opd->addr)); 693 1.7 mrg else 694 1.7 mrg elf_symbols[j].address = sym->st_value; 695 1.7 mrg elf_symbols[j].address += base_address; 696 1.1 mrg elf_symbols[j].size = sym->st_size; 697 1.1 mrg ++j; 698 1.1 mrg } 699 1.1 mrg 700 1.3 mrg backtrace_qsort (elf_symbols, elf_symbol_count, sizeof (struct elf_symbol), 701 1.3 mrg elf_symbol_compare); 702 1.1 mrg 703 1.1 mrg sdata->next = NULL; 704 1.1 mrg sdata->symbols = elf_symbols; 705 1.1 mrg sdata->count = elf_symbol_count; 706 1.1 mrg 707 1.1 mrg return 1; 708 1.1 mrg } 709 1.1 mrg 710 1.1 mrg /* Add EDATA to the list in STATE. */ 711 1.1 mrg 712 1.1 mrg static void 713 1.1 mrg elf_add_syminfo_data (struct backtrace_state *state, 714 1.1 mrg struct elf_syminfo_data *edata) 715 1.1 mrg { 716 1.1 mrg if (!state->threaded) 717 1.1 mrg { 718 1.1 mrg struct elf_syminfo_data **pp; 719 1.1 mrg 720 1.1 mrg for (pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data; 721 1.1 mrg *pp != NULL; 722 1.1 mrg pp = &(*pp)->next) 723 1.1 mrg ; 724 1.1 mrg *pp = edata; 725 1.1 mrg } 726 1.1 mrg else 727 1.1 mrg { 728 1.1 mrg while (1) 729 1.1 mrg { 730 1.1 mrg struct elf_syminfo_data **pp; 731 1.1 mrg 732 1.1 mrg pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data; 733 1.1 mrg 734 1.1 mrg while (1) 735 1.1 mrg { 736 1.1 mrg struct elf_syminfo_data *p; 737 1.1 mrg 738 1.3 mrg p = backtrace_atomic_load_pointer (pp); 739 1.1 mrg 740 1.1 mrg if (p == NULL) 741 1.1 mrg break; 742 1.1 mrg 743 1.1 mrg pp = &p->next; 744 1.1 mrg } 745 1.1 mrg 746 1.1 mrg if (__sync_bool_compare_and_swap (pp, NULL, edata)) 747 1.1 mrg break; 748 1.1 mrg } 749 1.1 mrg } 750 1.1 mrg } 751 1.1 mrg 752 1.3 mrg /* Return the symbol name and value for an ADDR. */ 753 1.1 mrg 754 1.1 mrg static void 755 1.3 mrg elf_syminfo (struct backtrace_state *state, uintptr_t addr, 756 1.1 mrg backtrace_syminfo_callback callback, 757 1.1 mrg backtrace_error_callback error_callback ATTRIBUTE_UNUSED, 758 1.1 mrg void *data) 759 1.1 mrg { 760 1.1 mrg struct elf_syminfo_data *edata; 761 1.3 mrg struct elf_symbol *sym = NULL; 762 1.3 mrg 763 1.3 mrg if (!state->threaded) 764 1.3 mrg { 765 1.3 mrg for (edata = (struct elf_syminfo_data *) state->syminfo_data; 766 1.3 mrg edata != NULL; 767 1.3 mrg edata = edata->next) 768 1.3 mrg { 769 1.3 mrg sym = ((struct elf_symbol *) 770 1.3 mrg bsearch (&addr, edata->symbols, edata->count, 771 1.3 mrg sizeof (struct elf_symbol), elf_symbol_search)); 772 1.3 mrg if (sym != NULL) 773 1.3 mrg break; 774 1.3 mrg } 775 1.3 mrg } 776 1.3 mrg else 777 1.3 mrg { 778 1.3 mrg struct elf_syminfo_data **pp; 779 1.3 mrg 780 1.3 mrg pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data; 781 1.3 mrg while (1) 782 1.3 mrg { 783 1.3 mrg edata = backtrace_atomic_load_pointer (pp); 784 1.3 mrg if (edata == NULL) 785 1.3 mrg break; 786 1.3 mrg 787 1.3 mrg sym = ((struct elf_symbol *) 788 1.3 mrg bsearch (&addr, edata->symbols, edata->count, 789 1.3 mrg sizeof (struct elf_symbol), elf_symbol_search)); 790 1.3 mrg if (sym != NULL) 791 1.3 mrg break; 792 1.3 mrg 793 1.3 mrg pp = &edata->next; 794 1.3 mrg } 795 1.3 mrg } 796 1.1 mrg 797 1.1 mrg if (sym == NULL) 798 1.3 mrg callback (data, addr, NULL, 0, 0); 799 1.1 mrg else 800 1.3 mrg callback (data, addr, sym->name, sym->address, sym->size); 801 1.1 mrg } 802 1.1 mrg 803 1.7 mrg /* Return whether FILENAME is a symlink. */ 804 1.1 mrg 805 1.1 mrg static int 806 1.7 mrg elf_is_symlink (const char *filename) 807 1.1 mrg { 808 1.7 mrg struct stat st; 809 1.7 mrg 810 1.7 mrg if (lstat (filename, &st) < 0) 811 1.7 mrg return 0; 812 1.7 mrg return S_ISLNK (st.st_mode); 813 1.7 mrg } 814 1.7 mrg 815 1.7 mrg /* Return the results of reading the symlink FILENAME in a buffer 816 1.7 mrg allocated by backtrace_alloc. Return the length of the buffer in 817 1.7 mrg *LEN. */ 818 1.7 mrg 819 1.7 mrg static char * 820 1.7 mrg elf_readlink (struct backtrace_state *state, const char *filename, 821 1.7 mrg backtrace_error_callback error_callback, void *data, 822 1.7 mrg size_t *plen) 823 1.7 mrg { 824 1.7 mrg size_t len; 825 1.7 mrg char *buf; 826 1.7 mrg 827 1.7 mrg len = 128; 828 1.7 mrg while (1) 829 1.7 mrg { 830 1.7 mrg ssize_t rl; 831 1.1 mrg 832 1.7 mrg buf = backtrace_alloc (state, len, error_callback, data); 833 1.7 mrg if (buf == NULL) 834 1.7 mrg return NULL; 835 1.7 mrg rl = readlink (filename, buf, len); 836 1.7 mrg if (rl < 0) 837 1.7 mrg { 838 1.7 mrg backtrace_free (state, buf, len, error_callback, data); 839 1.7 mrg return NULL; 840 1.7 mrg } 841 1.7 mrg if ((size_t) rl < len - 1) 842 1.7 mrg { 843 1.7 mrg buf[rl] = '\0'; 844 1.7 mrg *plen = len; 845 1.7 mrg return buf; 846 1.7 mrg } 847 1.7 mrg backtrace_free (state, buf, len, error_callback, data); 848 1.7 mrg len *= 2; 849 1.7 mrg } 850 1.7 mrg } 851 1.1 mrg 852 1.8 mrg #define SYSTEM_BUILD_ID_DIR "/usr/lib/debug/.build-id/" 853 1.8 mrg 854 1.7 mrg /* Open a separate debug info file, using the build ID to find it. 855 1.7 mrg Returns an open file descriptor, or -1. 856 1.1 mrg 857 1.7 mrg The GDB manual says that the only place gdb looks for a debug file 858 1.7 mrg when the build ID is known is in /usr/lib/debug/.build-id. */ 859 1.1 mrg 860 1.7 mrg static int 861 1.7 mrg elf_open_debugfile_by_buildid (struct backtrace_state *state, 862 1.7 mrg const char *buildid_data, size_t buildid_size, 863 1.7 mrg backtrace_error_callback error_callback, 864 1.7 mrg void *data) 865 1.7 mrg { 866 1.8 mrg const char * const prefix = SYSTEM_BUILD_ID_DIR; 867 1.7 mrg const size_t prefix_len = strlen (prefix); 868 1.7 mrg const char * const suffix = ".debug"; 869 1.7 mrg const size_t suffix_len = strlen (suffix); 870 1.7 mrg size_t len; 871 1.7 mrg char *bd_filename; 872 1.7 mrg char *t; 873 1.7 mrg size_t i; 874 1.7 mrg int ret; 875 1.7 mrg int does_not_exist; 876 1.1 mrg 877 1.7 mrg len = prefix_len + buildid_size * 2 + suffix_len + 2; 878 1.7 mrg bd_filename = backtrace_alloc (state, len, error_callback, data); 879 1.7 mrg if (bd_filename == NULL) 880 1.7 mrg return -1; 881 1.1 mrg 882 1.7 mrg t = bd_filename; 883 1.7 mrg memcpy (t, prefix, prefix_len); 884 1.7 mrg t += prefix_len; 885 1.7 mrg for (i = 0; i < buildid_size; i++) 886 1.7 mrg { 887 1.7 mrg unsigned char b; 888 1.7 mrg unsigned char nib; 889 1.7 mrg 890 1.7 mrg b = (unsigned char) buildid_data[i]; 891 1.7 mrg nib = (b & 0xf0) >> 4; 892 1.7 mrg *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10; 893 1.7 mrg nib = b & 0x0f; 894 1.7 mrg *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10; 895 1.7 mrg if (i == 0) 896 1.7 mrg *t++ = '/'; 897 1.7 mrg } 898 1.7 mrg memcpy (t, suffix, suffix_len); 899 1.7 mrg t[suffix_len] = '\0'; 900 1.7 mrg 901 1.7 mrg ret = backtrace_open (bd_filename, error_callback, data, &does_not_exist); 902 1.7 mrg 903 1.7 mrg backtrace_free (state, bd_filename, len, error_callback, data); 904 1.7 mrg 905 1.7 mrg /* gdb checks that the debuginfo file has the same build ID note. 906 1.7 mrg That seems kind of pointless to me--why would it have the right 907 1.7 mrg name but not the right build ID?--so skipping the check. */ 908 1.1 mrg 909 1.7 mrg return ret; 910 1.7 mrg } 911 1.1 mrg 912 1.7 mrg /* Try to open a file whose name is PREFIX (length PREFIX_LEN) 913 1.7 mrg concatenated with PREFIX2 (length PREFIX2_LEN) concatenated with 914 1.7 mrg DEBUGLINK_NAME. Returns an open file descriptor, or -1. */ 915 1.1 mrg 916 1.7 mrg static int 917 1.7 mrg elf_try_debugfile (struct backtrace_state *state, const char *prefix, 918 1.7 mrg size_t prefix_len, const char *prefix2, size_t prefix2_len, 919 1.7 mrg const char *debuglink_name, 920 1.7 mrg backtrace_error_callback error_callback, void *data) 921 1.7 mrg { 922 1.7 mrg size_t debuglink_len; 923 1.7 mrg size_t try_len; 924 1.7 mrg char *try; 925 1.7 mrg int does_not_exist; 926 1.7 mrg int ret; 927 1.1 mrg 928 1.7 mrg debuglink_len = strlen (debuglink_name); 929 1.7 mrg try_len = prefix_len + prefix2_len + debuglink_len + 1; 930 1.7 mrg try = backtrace_alloc (state, try_len, error_callback, data); 931 1.7 mrg if (try == NULL) 932 1.3 mrg return -1; 933 1.3 mrg 934 1.7 mrg memcpy (try, prefix, prefix_len); 935 1.7 mrg memcpy (try + prefix_len, prefix2, prefix2_len); 936 1.7 mrg memcpy (try + prefix_len + prefix2_len, debuglink_name, debuglink_len); 937 1.7 mrg try[prefix_len + prefix2_len + debuglink_len] = '\0'; 938 1.7 mrg 939 1.7 mrg ret = backtrace_open (try, error_callback, data, &does_not_exist); 940 1.1 mrg 941 1.7 mrg backtrace_free (state, try, try_len, error_callback, data); 942 1.1 mrg 943 1.7 mrg return ret; 944 1.7 mrg } 945 1.1 mrg 946 1.7 mrg /* Find a separate debug info file, using the debuglink section data 947 1.7 mrg to find it. Returns an open file descriptor, or -1. */ 948 1.1 mrg 949 1.7 mrg static int 950 1.7 mrg elf_find_debugfile_by_debuglink (struct backtrace_state *state, 951 1.7 mrg const char *filename, 952 1.7 mrg const char *debuglink_name, 953 1.7 mrg backtrace_error_callback error_callback, 954 1.7 mrg void *data) 955 1.7 mrg { 956 1.7 mrg int ret; 957 1.7 mrg char *alc; 958 1.7 mrg size_t alc_len; 959 1.7 mrg const char *slash; 960 1.7 mrg int ddescriptor; 961 1.7 mrg const char *prefix; 962 1.7 mrg size_t prefix_len; 963 1.7 mrg 964 1.7 mrg /* Resolve symlinks in FILENAME. Since FILENAME is fairly likely to 965 1.7 mrg be /proc/self/exe, symlinks are common. We don't try to resolve 966 1.7 mrg the whole path name, just the base name. */ 967 1.7 mrg ret = -1; 968 1.7 mrg alc = NULL; 969 1.7 mrg alc_len = 0; 970 1.7 mrg while (elf_is_symlink (filename)) 971 1.7 mrg { 972 1.7 mrg char *new_buf; 973 1.7 mrg size_t new_len; 974 1.7 mrg 975 1.7 mrg new_buf = elf_readlink (state, filename, error_callback, data, &new_len); 976 1.7 mrg if (new_buf == NULL) 977 1.7 mrg break; 978 1.1 mrg 979 1.7 mrg if (new_buf[0] == '/') 980 1.7 mrg filename = new_buf; 981 1.7 mrg else 982 1.1 mrg { 983 1.7 mrg slash = strrchr (filename, '/'); 984 1.7 mrg if (slash == NULL) 985 1.7 mrg filename = new_buf; 986 1.7 mrg else 987 1.7 mrg { 988 1.7 mrg size_t clen; 989 1.7 mrg char *c; 990 1.1 mrg 991 1.7 mrg slash++; 992 1.7 mrg clen = slash - filename + strlen (new_buf) + 1; 993 1.7 mrg c = backtrace_alloc (state, clen, error_callback, data); 994 1.7 mrg if (c == NULL) 995 1.7 mrg goto done; 996 1.7 mrg 997 1.7 mrg memcpy (c, filename, slash - filename); 998 1.7 mrg memcpy (c + (slash - filename), new_buf, strlen (new_buf)); 999 1.7 mrg c[slash - filename + strlen (new_buf)] = '\0'; 1000 1.7 mrg backtrace_free (state, new_buf, new_len, error_callback, data); 1001 1.7 mrg filename = c; 1002 1.7 mrg new_buf = c; 1003 1.7 mrg new_len = clen; 1004 1.7 mrg } 1005 1.1 mrg } 1006 1.1 mrg 1007 1.7 mrg if (alc != NULL) 1008 1.7 mrg backtrace_free (state, alc, alc_len, error_callback, data); 1009 1.7 mrg alc = new_buf; 1010 1.7 mrg alc_len = new_len; 1011 1.7 mrg } 1012 1.7 mrg 1013 1.7 mrg /* Look for DEBUGLINK_NAME in the same directory as FILENAME. */ 1014 1.7 mrg 1015 1.7 mrg slash = strrchr (filename, '/'); 1016 1.7 mrg if (slash == NULL) 1017 1.7 mrg { 1018 1.7 mrg prefix = ""; 1019 1.7 mrg prefix_len = 0; 1020 1.7 mrg } 1021 1.7 mrg else 1022 1.7 mrg { 1023 1.7 mrg slash++; 1024 1.7 mrg prefix = filename; 1025 1.7 mrg prefix_len = slash - filename; 1026 1.7 mrg } 1027 1.7 mrg 1028 1.7 mrg ddescriptor = elf_try_debugfile (state, prefix, prefix_len, "", 0, 1029 1.7 mrg debuglink_name, error_callback, data); 1030 1.7 mrg if (ddescriptor >= 0) 1031 1.7 mrg { 1032 1.7 mrg ret = ddescriptor; 1033 1.7 mrg goto done; 1034 1.1 mrg } 1035 1.1 mrg 1036 1.7 mrg /* Look for DEBUGLINK_NAME in a .debug subdirectory of FILENAME. */ 1037 1.1 mrg 1038 1.7 mrg ddescriptor = elf_try_debugfile (state, prefix, prefix_len, ".debug/", 1039 1.7 mrg strlen (".debug/"), debuglink_name, 1040 1.7 mrg error_callback, data); 1041 1.7 mrg if (ddescriptor >= 0) 1042 1.7 mrg { 1043 1.7 mrg ret = ddescriptor; 1044 1.7 mrg goto done; 1045 1.7 mrg } 1046 1.1 mrg 1047 1.7 mrg /* Look for DEBUGLINK_NAME in /usr/lib/debug. */ 1048 1.1 mrg 1049 1.7 mrg ddescriptor = elf_try_debugfile (state, "/usr/lib/debug/", 1050 1.7 mrg strlen ("/usr/lib/debug/"), prefix, 1051 1.7 mrg prefix_len, debuglink_name, 1052 1.7 mrg error_callback, data); 1053 1.7 mrg if (ddescriptor >= 0) 1054 1.7 mrg ret = ddescriptor; 1055 1.1 mrg 1056 1.7 mrg done: 1057 1.7 mrg if (alc != NULL && alc_len > 0) 1058 1.7 mrg backtrace_free (state, alc, alc_len, error_callback, data); 1059 1.7 mrg return ret; 1060 1.7 mrg } 1061 1.1 mrg 1062 1.7 mrg /* Open a separate debug info file, using the debuglink section data 1063 1.7 mrg to find it. Returns an open file descriptor, or -1. */ 1064 1.1 mrg 1065 1.7 mrg static int 1066 1.7 mrg elf_open_debugfile_by_debuglink (struct backtrace_state *state, 1067 1.7 mrg const char *filename, 1068 1.7 mrg const char *debuglink_name, 1069 1.7 mrg uint32_t debuglink_crc, 1070 1.7 mrg backtrace_error_callback error_callback, 1071 1.7 mrg void *data) 1072 1.7 mrg { 1073 1.7 mrg int ddescriptor; 1074 1.1 mrg 1075 1.7 mrg ddescriptor = elf_find_debugfile_by_debuglink (state, filename, 1076 1.7 mrg debuglink_name, 1077 1.7 mrg error_callback, data); 1078 1.7 mrg if (ddescriptor < 0) 1079 1.7 mrg return -1; 1080 1.1 mrg 1081 1.7 mrg if (debuglink_crc != 0) 1082 1.1 mrg { 1083 1.7 mrg uint32_t got_crc; 1084 1.7 mrg 1085 1.7 mrg got_crc = elf_crc32_file (state, ddescriptor, error_callback, data); 1086 1.7 mrg if (got_crc != debuglink_crc) 1087 1.7 mrg { 1088 1.7 mrg backtrace_close (ddescriptor, error_callback, data); 1089 1.7 mrg return -1; 1090 1.7 mrg } 1091 1.7 mrg } 1092 1.7 mrg 1093 1.7 mrg return ddescriptor; 1094 1.7 mrg } 1095 1.7 mrg 1096 1.7 mrg /* A function useful for setting a breakpoint for an inflation failure 1097 1.7 mrg when this code is compiled with -g. */ 1098 1.7 mrg 1099 1.7 mrg static void 1100 1.10 mrg elf_uncompress_failed(void) 1101 1.7 mrg { 1102 1.7 mrg } 1103 1.7 mrg 1104 1.7 mrg /* *PVAL is the current value being read from the stream, and *PBITS 1105 1.7 mrg is the number of valid bits. Ensure that *PVAL holds at least 15 1106 1.7 mrg bits by reading additional bits from *PPIN, up to PINEND, as 1107 1.7 mrg needed. Updates *PPIN, *PVAL and *PBITS. Returns 1 on success, 0 1108 1.7 mrg on error. */ 1109 1.7 mrg 1110 1.7 mrg static int 1111 1.7 mrg elf_zlib_fetch (const unsigned char **ppin, const unsigned char *pinend, 1112 1.7 mrg uint64_t *pval, unsigned int *pbits) 1113 1.7 mrg { 1114 1.7 mrg unsigned int bits; 1115 1.7 mrg const unsigned char *pin; 1116 1.7 mrg uint64_t val; 1117 1.7 mrg uint32_t next; 1118 1.7 mrg 1119 1.7 mrg bits = *pbits; 1120 1.7 mrg if (bits >= 15) 1121 1.7 mrg return 1; 1122 1.7 mrg pin = *ppin; 1123 1.7 mrg val = *pval; 1124 1.7 mrg 1125 1.7 mrg if (unlikely (pinend - pin < 4)) 1126 1.7 mrg { 1127 1.10 mrg elf_uncompress_failed (); 1128 1.7 mrg return 0; 1129 1.7 mrg } 1130 1.7 mrg 1131 1.7 mrg #if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) \ 1132 1.7 mrg && defined(__ORDER_BIG_ENDIAN__) \ 1133 1.7 mrg && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ \ 1134 1.7 mrg || __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) 1135 1.7 mrg /* We've ensured that PIN is aligned. */ 1136 1.7 mrg next = *(const uint32_t *)pin; 1137 1.7 mrg 1138 1.7 mrg #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 1139 1.7 mrg next = __builtin_bswap32 (next); 1140 1.7 mrg #endif 1141 1.7 mrg #else 1142 1.7 mrg next = pin[0] | (pin[1] << 8) | (pin[2] << 16) | (pin[3] << 24); 1143 1.7 mrg #endif 1144 1.7 mrg 1145 1.7 mrg val |= (uint64_t)next << bits; 1146 1.7 mrg bits += 32; 1147 1.7 mrg pin += 4; 1148 1.7 mrg 1149 1.7 mrg /* We will need the next four bytes soon. */ 1150 1.7 mrg __builtin_prefetch (pin, 0, 0); 1151 1.7 mrg 1152 1.7 mrg *ppin = pin; 1153 1.7 mrg *pval = val; 1154 1.7 mrg *pbits = bits; 1155 1.7 mrg return 1; 1156 1.7 mrg } 1157 1.7 mrg 1158 1.7 mrg /* Huffman code tables, like the rest of the zlib format, are defined 1159 1.7 mrg by RFC 1951. We store a Huffman code table as a series of tables 1160 1.7 mrg stored sequentially in memory. Each entry in a table is 16 bits. 1161 1.7 mrg The first, main, table has 256 entries. It is followed by a set of 1162 1.7 mrg secondary tables of length 2 to 128 entries. The maximum length of 1163 1.7 mrg a code sequence in the deflate format is 15 bits, so that is all we 1164 1.7 mrg need. Each secondary table has an index, which is the offset of 1165 1.7 mrg the table in the overall memory storage. 1166 1.7 mrg 1167 1.7 mrg The deflate format says that all codes of a given bit length are 1168 1.7 mrg lexicographically consecutive. Perhaps we could have 130 values 1169 1.7 mrg that require a 15-bit code, perhaps requiring three secondary 1170 1.7 mrg tables of size 128. I don't know if this is actually possible, but 1171 1.7 mrg it suggests that the maximum size required for secondary tables is 1172 1.7 mrg 3 * 128 + 3 * 64 ... == 768. The zlib enough program reports 660 1173 1.7 mrg as the maximum. We permit 768, since in addition to the 256 for 1174 1.7 mrg the primary table, with two bytes per entry, and with the two 1175 1.7 mrg tables we need, that gives us a page. 1176 1.7 mrg 1177 1.7 mrg A single table entry needs to store a value or (for the main table 1178 1.7 mrg only) the index and size of a secondary table. Values range from 0 1179 1.7 mrg to 285, inclusive. Secondary table indexes, per above, range from 1180 1.7 mrg 0 to 510. For a value we need to store the number of bits we need 1181 1.7 mrg to determine that value (one value may appear multiple times in the 1182 1.7 mrg table), which is 1 to 8. For a secondary table we need to store 1183 1.7 mrg the number of bits used to index into the table, which is 1 to 7. 1184 1.7 mrg And of course we need 1 bit to decide whether we have a value or a 1185 1.7 mrg secondary table index. So each entry needs 9 bits for value/table 1186 1.7 mrg index, 3 bits for size, 1 bit what it is. For simplicity we use 16 1187 1.7 mrg bits per entry. */ 1188 1.7 mrg 1189 1.7 mrg /* Number of entries we allocate to for one code table. We get a page 1190 1.7 mrg for the two code tables we need. */ 1191 1.7 mrg 1192 1.7 mrg #define HUFFMAN_TABLE_SIZE (1024) 1193 1.7 mrg 1194 1.7 mrg /* Bit masks and shifts for the values in the table. */ 1195 1.7 mrg 1196 1.7 mrg #define HUFFMAN_VALUE_MASK 0x01ff 1197 1.7 mrg #define HUFFMAN_BITS_SHIFT 9 1198 1.7 mrg #define HUFFMAN_BITS_MASK 0x7 1199 1.7 mrg #define HUFFMAN_SECONDARY_SHIFT 12 1200 1.7 mrg 1201 1.7 mrg /* For working memory while inflating we need two code tables, we need 1202 1.7 mrg an array of code lengths (max value 15, so we use unsigned char), 1203 1.7 mrg and an array of unsigned shorts used while building a table. The 1204 1.7 mrg latter two arrays must be large enough to hold the maximum number 1205 1.7 mrg of code lengths, which RFC 1951 defines as 286 + 30. */ 1206 1.7 mrg 1207 1.7 mrg #define ZDEBUG_TABLE_SIZE \ 1208 1.7 mrg (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \ 1209 1.7 mrg + (286 + 30) * sizeof (uint16_t) \ 1210 1.7 mrg + (286 + 30) * sizeof (unsigned char)) 1211 1.7 mrg 1212 1.7 mrg #define ZDEBUG_TABLE_CODELEN_OFFSET \ 1213 1.7 mrg (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \ 1214 1.7 mrg + (286 + 30) * sizeof (uint16_t)) 1215 1.7 mrg 1216 1.7 mrg #define ZDEBUG_TABLE_WORK_OFFSET \ 1217 1.7 mrg (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t)) 1218 1.7 mrg 1219 1.7 mrg #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE 1220 1.7 mrg 1221 1.7 mrg /* Used by the main function that generates the fixed table to learn 1222 1.7 mrg the table size. */ 1223 1.7 mrg static size_t final_next_secondary; 1224 1.7 mrg 1225 1.7 mrg #endif 1226 1.7 mrg 1227 1.7 mrg /* Build a Huffman code table from an array of lengths in CODES of 1228 1.7 mrg length CODES_LEN. The table is stored into *TABLE. ZDEBUG_TABLE 1229 1.7 mrg is the same as for elf_zlib_inflate, used to find some work space. 1230 1.7 mrg Returns 1 on success, 0 on error. */ 1231 1.7 mrg 1232 1.7 mrg static int 1233 1.7 mrg elf_zlib_inflate_table (unsigned char *codes, size_t codes_len, 1234 1.7 mrg uint16_t *zdebug_table, uint16_t *table) 1235 1.7 mrg { 1236 1.7 mrg uint16_t count[16]; 1237 1.7 mrg uint16_t start[16]; 1238 1.7 mrg uint16_t prev[16]; 1239 1.7 mrg uint16_t firstcode[7]; 1240 1.7 mrg uint16_t *next; 1241 1.7 mrg size_t i; 1242 1.7 mrg size_t j; 1243 1.7 mrg unsigned int code; 1244 1.7 mrg size_t next_secondary; 1245 1.7 mrg 1246 1.7 mrg /* Count the number of code of each length. Set NEXT[val] to be the 1247 1.7 mrg next value after VAL with the same bit length. */ 1248 1.7 mrg 1249 1.7 mrg next = (uint16_t *) (((unsigned char *) zdebug_table) 1250 1.7 mrg + ZDEBUG_TABLE_WORK_OFFSET); 1251 1.7 mrg 1252 1.7 mrg memset (&count[0], 0, 16 * sizeof (uint16_t)); 1253 1.7 mrg for (i = 0; i < codes_len; ++i) 1254 1.7 mrg { 1255 1.7 mrg if (unlikely (codes[i] >= 16)) 1256 1.7 mrg { 1257 1.10 mrg elf_uncompress_failed (); 1258 1.7 mrg return 0; 1259 1.7 mrg } 1260 1.7 mrg 1261 1.7 mrg if (count[codes[i]] == 0) 1262 1.7 mrg { 1263 1.7 mrg start[codes[i]] = i; 1264 1.7 mrg prev[codes[i]] = i; 1265 1.7 mrg } 1266 1.7 mrg else 1267 1.7 mrg { 1268 1.7 mrg next[prev[codes[i]]] = i; 1269 1.7 mrg prev[codes[i]] = i; 1270 1.7 mrg } 1271 1.7 mrg 1272 1.7 mrg ++count[codes[i]]; 1273 1.7 mrg } 1274 1.7 mrg 1275 1.7 mrg /* For each length, fill in the table for the codes of that 1276 1.7 mrg length. */ 1277 1.7 mrg 1278 1.7 mrg memset (table, 0, HUFFMAN_TABLE_SIZE * sizeof (uint16_t)); 1279 1.7 mrg 1280 1.7 mrg /* Handle the values that do not require a secondary table. */ 1281 1.7 mrg 1282 1.7 mrg code = 0; 1283 1.7 mrg for (j = 1; j <= 8; ++j) 1284 1.7 mrg { 1285 1.7 mrg unsigned int jcnt; 1286 1.7 mrg unsigned int val; 1287 1.7 mrg 1288 1.7 mrg jcnt = count[j]; 1289 1.7 mrg if (jcnt == 0) 1290 1.7 mrg continue; 1291 1.7 mrg 1292 1.7 mrg if (unlikely (jcnt > (1U << j))) 1293 1.7 mrg { 1294 1.10 mrg elf_uncompress_failed (); 1295 1.7 mrg return 0; 1296 1.7 mrg } 1297 1.7 mrg 1298 1.7 mrg /* There are JCNT values that have this length, the values 1299 1.7 mrg starting from START[j] continuing through NEXT[VAL]. Those 1300 1.7 mrg values are assigned consecutive values starting at CODE. */ 1301 1.7 mrg 1302 1.7 mrg val = start[j]; 1303 1.7 mrg for (i = 0; i < jcnt; ++i) 1304 1.7 mrg { 1305 1.7 mrg uint16_t tval; 1306 1.7 mrg size_t ind; 1307 1.7 mrg unsigned int incr; 1308 1.7 mrg 1309 1.7 mrg /* In the compressed bit stream, the value VAL is encoded as 1310 1.7 mrg J bits with the value C. */ 1311 1.7 mrg 1312 1.7 mrg if (unlikely ((val & ~HUFFMAN_VALUE_MASK) != 0)) 1313 1.7 mrg { 1314 1.10 mrg elf_uncompress_failed (); 1315 1.7 mrg return 0; 1316 1.7 mrg } 1317 1.7 mrg 1318 1.7 mrg tval = val | ((j - 1) << HUFFMAN_BITS_SHIFT); 1319 1.7 mrg 1320 1.7 mrg /* The table lookup uses 8 bits. If J is less than 8, we 1321 1.7 mrg don't know what the other bits will be. We need to fill 1322 1.7 mrg in all possibilities in the table. Since the Huffman 1323 1.7 mrg code is unambiguous, those entries can't be used for any 1324 1.7 mrg other code. */ 1325 1.7 mrg 1326 1.7 mrg for (ind = code; ind < 0x100; ind += 1 << j) 1327 1.7 mrg { 1328 1.7 mrg if (unlikely (table[ind] != 0)) 1329 1.7 mrg { 1330 1.10 mrg elf_uncompress_failed (); 1331 1.7 mrg return 0; 1332 1.7 mrg } 1333 1.7 mrg table[ind] = tval; 1334 1.7 mrg } 1335 1.7 mrg 1336 1.7 mrg /* Advance to the next value with this length. */ 1337 1.7 mrg if (i + 1 < jcnt) 1338 1.7 mrg val = next[val]; 1339 1.7 mrg 1340 1.7 mrg /* The Huffman codes are stored in the bitstream with the 1341 1.7 mrg most significant bit first, as is required to make them 1342 1.7 mrg unambiguous. The effect is that when we read them from 1343 1.7 mrg the bitstream we see the bit sequence in reverse order: 1344 1.7 mrg the most significant bit of the Huffman code is the least 1345 1.7 mrg significant bit of the value we read from the bitstream. 1346 1.7 mrg That means that to make our table lookups work, we need 1347 1.7 mrg to reverse the bits of CODE. Since reversing bits is 1348 1.7 mrg tedious and in general requires using a table, we instead 1349 1.7 mrg increment CODE in reverse order. That is, if the number 1350 1.7 mrg of bits we are currently using, here named J, is 3, we 1351 1.7 mrg count as 000, 100, 010, 110, 001, 101, 011, 111, which is 1352 1.7 mrg to say the numbers from 0 to 7 but with the bits 1353 1.7 mrg reversed. Going to more bits, aka incrementing J, 1354 1.7 mrg effectively just adds more zero bits as the beginning, 1355 1.7 mrg and as such does not change the numeric value of CODE. 1356 1.7 mrg 1357 1.7 mrg To increment CODE of length J in reverse order, find the 1358 1.7 mrg most significant zero bit and set it to one while 1359 1.7 mrg clearing all higher bits. In other words, add 1 modulo 1360 1.7 mrg 2^J, only reversed. */ 1361 1.7 mrg 1362 1.7 mrg incr = 1U << (j - 1); 1363 1.7 mrg while ((code & incr) != 0) 1364 1.7 mrg incr >>= 1; 1365 1.7 mrg if (incr == 0) 1366 1.7 mrg code = 0; 1367 1.7 mrg else 1368 1.7 mrg { 1369 1.7 mrg code &= incr - 1; 1370 1.7 mrg code += incr; 1371 1.7 mrg } 1372 1.7 mrg } 1373 1.7 mrg } 1374 1.7 mrg 1375 1.7 mrg /* Handle the values that require a secondary table. */ 1376 1.7 mrg 1377 1.7 mrg /* Set FIRSTCODE, the number at which the codes start, for each 1378 1.7 mrg length. */ 1379 1.7 mrg 1380 1.7 mrg for (j = 9; j < 16; j++) 1381 1.7 mrg { 1382 1.7 mrg unsigned int jcnt; 1383 1.7 mrg unsigned int k; 1384 1.7 mrg 1385 1.7 mrg jcnt = count[j]; 1386 1.7 mrg if (jcnt == 0) 1387 1.7 mrg continue; 1388 1.7 mrg 1389 1.7 mrg /* There are JCNT values that have this length, the values 1390 1.7 mrg starting from START[j]. Those values are assigned 1391 1.7 mrg consecutive values starting at CODE. */ 1392 1.7 mrg 1393 1.7 mrg firstcode[j - 9] = code; 1394 1.7 mrg 1395 1.7 mrg /* Reverse add JCNT to CODE modulo 2^J. */ 1396 1.7 mrg for (k = 0; k < j; ++k) 1397 1.7 mrg { 1398 1.7 mrg if ((jcnt & (1U << k)) != 0) 1399 1.7 mrg { 1400 1.7 mrg unsigned int m; 1401 1.7 mrg unsigned int bit; 1402 1.7 mrg 1403 1.7 mrg bit = 1U << (j - k - 1); 1404 1.7 mrg for (m = 0; m < j - k; ++m, bit >>= 1) 1405 1.7 mrg { 1406 1.7 mrg if ((code & bit) == 0) 1407 1.7 mrg { 1408 1.7 mrg code += bit; 1409 1.7 mrg break; 1410 1.7 mrg } 1411 1.7 mrg code &= ~bit; 1412 1.7 mrg } 1413 1.7 mrg jcnt &= ~(1U << k); 1414 1.7 mrg } 1415 1.7 mrg } 1416 1.7 mrg if (unlikely (jcnt != 0)) 1417 1.7 mrg { 1418 1.10 mrg elf_uncompress_failed (); 1419 1.7 mrg return 0; 1420 1.7 mrg } 1421 1.7 mrg } 1422 1.7 mrg 1423 1.7 mrg /* For J from 9 to 15, inclusive, we store COUNT[J] consecutive 1424 1.7 mrg values starting at START[J] with consecutive codes starting at 1425 1.7 mrg FIRSTCODE[J - 9]. In the primary table we need to point to the 1426 1.7 mrg secondary table, and the secondary table will be indexed by J - 9 1427 1.7 mrg bits. We count down from 15 so that we install the larger 1428 1.7 mrg secondary tables first, as the smaller ones may be embedded in 1429 1.7 mrg the larger ones. */ 1430 1.7 mrg 1431 1.7 mrg next_secondary = 0; /* Index of next secondary table (after primary). */ 1432 1.7 mrg for (j = 15; j >= 9; j--) 1433 1.7 mrg { 1434 1.7 mrg unsigned int jcnt; 1435 1.7 mrg unsigned int val; 1436 1.7 mrg size_t primary; /* Current primary index. */ 1437 1.7 mrg size_t secondary; /* Offset to current secondary table. */ 1438 1.7 mrg size_t secondary_bits; /* Bit size of current secondary table. */ 1439 1.7 mrg 1440 1.7 mrg jcnt = count[j]; 1441 1.7 mrg if (jcnt == 0) 1442 1.7 mrg continue; 1443 1.7 mrg 1444 1.7 mrg val = start[j]; 1445 1.7 mrg code = firstcode[j - 9]; 1446 1.7 mrg primary = 0x100; 1447 1.7 mrg secondary = 0; 1448 1.7 mrg secondary_bits = 0; 1449 1.7 mrg for (i = 0; i < jcnt; ++i) 1450 1.7 mrg { 1451 1.7 mrg uint16_t tval; 1452 1.7 mrg size_t ind; 1453 1.7 mrg unsigned int incr; 1454 1.7 mrg 1455 1.7 mrg if ((code & 0xff) != primary) 1456 1.7 mrg { 1457 1.7 mrg uint16_t tprimary; 1458 1.7 mrg 1459 1.7 mrg /* Fill in a new primary table entry. */ 1460 1.7 mrg 1461 1.7 mrg primary = code & 0xff; 1462 1.7 mrg 1463 1.7 mrg tprimary = table[primary]; 1464 1.7 mrg if (tprimary == 0) 1465 1.7 mrg { 1466 1.7 mrg /* Start a new secondary table. */ 1467 1.7 mrg 1468 1.7 mrg if (unlikely ((next_secondary & HUFFMAN_VALUE_MASK) 1469 1.7 mrg != next_secondary)) 1470 1.7 mrg { 1471 1.10 mrg elf_uncompress_failed (); 1472 1.7 mrg return 0; 1473 1.7 mrg } 1474 1.7 mrg 1475 1.7 mrg secondary = next_secondary; 1476 1.7 mrg secondary_bits = j - 8; 1477 1.7 mrg next_secondary += 1 << secondary_bits; 1478 1.7 mrg table[primary] = (secondary 1479 1.7 mrg + ((j - 8) << HUFFMAN_BITS_SHIFT) 1480 1.7 mrg + (1U << HUFFMAN_SECONDARY_SHIFT)); 1481 1.7 mrg } 1482 1.7 mrg else 1483 1.7 mrg { 1484 1.7 mrg /* There is an existing entry. It had better be a 1485 1.7 mrg secondary table with enough bits. */ 1486 1.7 mrg if (unlikely ((tprimary & (1U << HUFFMAN_SECONDARY_SHIFT)) 1487 1.7 mrg == 0)) 1488 1.7 mrg { 1489 1.10 mrg elf_uncompress_failed (); 1490 1.7 mrg return 0; 1491 1.7 mrg } 1492 1.7 mrg secondary = tprimary & HUFFMAN_VALUE_MASK; 1493 1.7 mrg secondary_bits = ((tprimary >> HUFFMAN_BITS_SHIFT) 1494 1.7 mrg & HUFFMAN_BITS_MASK); 1495 1.7 mrg if (unlikely (secondary_bits < j - 8)) 1496 1.7 mrg { 1497 1.10 mrg elf_uncompress_failed (); 1498 1.7 mrg return 0; 1499 1.7 mrg } 1500 1.7 mrg } 1501 1.7 mrg } 1502 1.7 mrg 1503 1.7 mrg /* Fill in secondary table entries. */ 1504 1.7 mrg 1505 1.7 mrg tval = val | ((j - 8) << HUFFMAN_BITS_SHIFT); 1506 1.7 mrg 1507 1.7 mrg for (ind = code >> 8; 1508 1.7 mrg ind < (1U << secondary_bits); 1509 1.7 mrg ind += 1U << (j - 8)) 1510 1.7 mrg { 1511 1.7 mrg if (unlikely (table[secondary + 0x100 + ind] != 0)) 1512 1.7 mrg { 1513 1.10 mrg elf_uncompress_failed (); 1514 1.7 mrg return 0; 1515 1.7 mrg } 1516 1.7 mrg table[secondary + 0x100 + ind] = tval; 1517 1.7 mrg } 1518 1.7 mrg 1519 1.7 mrg if (i + 1 < jcnt) 1520 1.7 mrg val = next[val]; 1521 1.7 mrg 1522 1.7 mrg incr = 1U << (j - 1); 1523 1.7 mrg while ((code & incr) != 0) 1524 1.7 mrg incr >>= 1; 1525 1.7 mrg if (incr == 0) 1526 1.7 mrg code = 0; 1527 1.7 mrg else 1528 1.7 mrg { 1529 1.7 mrg code &= incr - 1; 1530 1.7 mrg code += incr; 1531 1.7 mrg } 1532 1.7 mrg } 1533 1.7 mrg } 1534 1.7 mrg 1535 1.7 mrg #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE 1536 1.7 mrg final_next_secondary = next_secondary; 1537 1.7 mrg #endif 1538 1.7 mrg 1539 1.7 mrg return 1; 1540 1.7 mrg } 1541 1.7 mrg 1542 1.7 mrg #ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE 1543 1.7 mrg 1544 1.7 mrg /* Used to generate the fixed Huffman table for block type 1. */ 1545 1.7 mrg 1546 1.7 mrg #include <stdio.h> 1547 1.7 mrg 1548 1.7 mrg static uint16_t table[ZDEBUG_TABLE_SIZE]; 1549 1.7 mrg static unsigned char codes[288]; 1550 1.7 mrg 1551 1.7 mrg int 1552 1.7 mrg main () 1553 1.7 mrg { 1554 1.7 mrg size_t i; 1555 1.7 mrg 1556 1.7 mrg for (i = 0; i <= 143; ++i) 1557 1.7 mrg codes[i] = 8; 1558 1.7 mrg for (i = 144; i <= 255; ++i) 1559 1.7 mrg codes[i] = 9; 1560 1.7 mrg for (i = 256; i <= 279; ++i) 1561 1.7 mrg codes[i] = 7; 1562 1.7 mrg for (i = 280; i <= 287; ++i) 1563 1.7 mrg codes[i] = 8; 1564 1.7 mrg if (!elf_zlib_inflate_table (&codes[0], 288, &table[0], &table[0])) 1565 1.7 mrg { 1566 1.7 mrg fprintf (stderr, "elf_zlib_inflate_table failed\n"); 1567 1.7 mrg exit (EXIT_FAILURE); 1568 1.7 mrg } 1569 1.7 mrg 1570 1.7 mrg printf ("static const uint16_t elf_zlib_default_table[%#zx] =\n", 1571 1.7 mrg final_next_secondary + 0x100); 1572 1.7 mrg printf ("{\n"); 1573 1.7 mrg for (i = 0; i < final_next_secondary + 0x100; i += 8) 1574 1.7 mrg { 1575 1.7 mrg size_t j; 1576 1.7 mrg 1577 1.7 mrg printf (" "); 1578 1.7 mrg for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j) 1579 1.7 mrg printf (" %#x,", table[j]); 1580 1.7 mrg printf ("\n"); 1581 1.7 mrg } 1582 1.7 mrg printf ("};\n"); 1583 1.7 mrg printf ("\n"); 1584 1.7 mrg 1585 1.7 mrg for (i = 0; i < 32; ++i) 1586 1.7 mrg codes[i] = 5; 1587 1.7 mrg if (!elf_zlib_inflate_table (&codes[0], 32, &table[0], &table[0])) 1588 1.7 mrg { 1589 1.7 mrg fprintf (stderr, "elf_zlib_inflate_table failed\n"); 1590 1.7 mrg exit (EXIT_FAILURE); 1591 1.7 mrg } 1592 1.7 mrg 1593 1.7 mrg printf ("static const uint16_t elf_zlib_default_dist_table[%#zx] =\n", 1594 1.7 mrg final_next_secondary + 0x100); 1595 1.7 mrg printf ("{\n"); 1596 1.7 mrg for (i = 0; i < final_next_secondary + 0x100; i += 8) 1597 1.7 mrg { 1598 1.7 mrg size_t j; 1599 1.7 mrg 1600 1.7 mrg printf (" "); 1601 1.7 mrg for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j) 1602 1.7 mrg printf (" %#x,", table[j]); 1603 1.7 mrg printf ("\n"); 1604 1.7 mrg } 1605 1.7 mrg printf ("};\n"); 1606 1.7 mrg 1607 1.7 mrg return 0; 1608 1.7 mrg } 1609 1.7 mrg 1610 1.7 mrg #endif 1611 1.7 mrg 1612 1.7 mrg /* The fixed tables generated by the #ifdef'ed out main function 1613 1.7 mrg above. */ 1614 1.7 mrg 1615 1.7 mrg static const uint16_t elf_zlib_default_table[0x170] = 1616 1.7 mrg { 1617 1.7 mrg 0xd00, 0xe50, 0xe10, 0xf18, 0xd10, 0xe70, 0xe30, 0x1230, 1618 1.7 mrg 0xd08, 0xe60, 0xe20, 0x1210, 0xe00, 0xe80, 0xe40, 0x1250, 1619 1.7 mrg 0xd04, 0xe58, 0xe18, 0x1200, 0xd14, 0xe78, 0xe38, 0x1240, 1620 1.7 mrg 0xd0c, 0xe68, 0xe28, 0x1220, 0xe08, 0xe88, 0xe48, 0x1260, 1621 1.7 mrg 0xd02, 0xe54, 0xe14, 0xf1c, 0xd12, 0xe74, 0xe34, 0x1238, 1622 1.7 mrg 0xd0a, 0xe64, 0xe24, 0x1218, 0xe04, 0xe84, 0xe44, 0x1258, 1623 1.7 mrg 0xd06, 0xe5c, 0xe1c, 0x1208, 0xd16, 0xe7c, 0xe3c, 0x1248, 1624 1.7 mrg 0xd0e, 0xe6c, 0xe2c, 0x1228, 0xe0c, 0xe8c, 0xe4c, 0x1268, 1625 1.7 mrg 0xd01, 0xe52, 0xe12, 0xf1a, 0xd11, 0xe72, 0xe32, 0x1234, 1626 1.7 mrg 0xd09, 0xe62, 0xe22, 0x1214, 0xe02, 0xe82, 0xe42, 0x1254, 1627 1.7 mrg 0xd05, 0xe5a, 0xe1a, 0x1204, 0xd15, 0xe7a, 0xe3a, 0x1244, 1628 1.7 mrg 0xd0d, 0xe6a, 0xe2a, 0x1224, 0xe0a, 0xe8a, 0xe4a, 0x1264, 1629 1.7 mrg 0xd03, 0xe56, 0xe16, 0xf1e, 0xd13, 0xe76, 0xe36, 0x123c, 1630 1.7 mrg 0xd0b, 0xe66, 0xe26, 0x121c, 0xe06, 0xe86, 0xe46, 0x125c, 1631 1.7 mrg 0xd07, 0xe5e, 0xe1e, 0x120c, 0xd17, 0xe7e, 0xe3e, 0x124c, 1632 1.7 mrg 0xd0f, 0xe6e, 0xe2e, 0x122c, 0xe0e, 0xe8e, 0xe4e, 0x126c, 1633 1.7 mrg 0xd00, 0xe51, 0xe11, 0xf19, 0xd10, 0xe71, 0xe31, 0x1232, 1634 1.7 mrg 0xd08, 0xe61, 0xe21, 0x1212, 0xe01, 0xe81, 0xe41, 0x1252, 1635 1.7 mrg 0xd04, 0xe59, 0xe19, 0x1202, 0xd14, 0xe79, 0xe39, 0x1242, 1636 1.7 mrg 0xd0c, 0xe69, 0xe29, 0x1222, 0xe09, 0xe89, 0xe49, 0x1262, 1637 1.7 mrg 0xd02, 0xe55, 0xe15, 0xf1d, 0xd12, 0xe75, 0xe35, 0x123a, 1638 1.7 mrg 0xd0a, 0xe65, 0xe25, 0x121a, 0xe05, 0xe85, 0xe45, 0x125a, 1639 1.7 mrg 0xd06, 0xe5d, 0xe1d, 0x120a, 0xd16, 0xe7d, 0xe3d, 0x124a, 1640 1.7 mrg 0xd0e, 0xe6d, 0xe2d, 0x122a, 0xe0d, 0xe8d, 0xe4d, 0x126a, 1641 1.7 mrg 0xd01, 0xe53, 0xe13, 0xf1b, 0xd11, 0xe73, 0xe33, 0x1236, 1642 1.7 mrg 0xd09, 0xe63, 0xe23, 0x1216, 0xe03, 0xe83, 0xe43, 0x1256, 1643 1.7 mrg 0xd05, 0xe5b, 0xe1b, 0x1206, 0xd15, 0xe7b, 0xe3b, 0x1246, 1644 1.7 mrg 0xd0d, 0xe6b, 0xe2b, 0x1226, 0xe0b, 0xe8b, 0xe4b, 0x1266, 1645 1.7 mrg 0xd03, 0xe57, 0xe17, 0xf1f, 0xd13, 0xe77, 0xe37, 0x123e, 1646 1.7 mrg 0xd0b, 0xe67, 0xe27, 0x121e, 0xe07, 0xe87, 0xe47, 0x125e, 1647 1.7 mrg 0xd07, 0xe5f, 0xe1f, 0x120e, 0xd17, 0xe7f, 0xe3f, 0x124e, 1648 1.7 mrg 0xd0f, 0xe6f, 0xe2f, 0x122e, 0xe0f, 0xe8f, 0xe4f, 0x126e, 1649 1.7 mrg 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 1650 1.7 mrg 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f, 1651 1.7 mrg 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, 1652 1.7 mrg 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af, 1653 1.7 mrg 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, 1654 1.7 mrg 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf, 1655 1.7 mrg 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, 1656 1.7 mrg 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf, 1657 1.7 mrg 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, 1658 1.7 mrg 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df, 1659 1.7 mrg 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 1660 1.7 mrg 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 1661 1.7 mrg 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 1662 1.7 mrg 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff, 1663 1.7 mrg }; 1664 1.7 mrg 1665 1.7 mrg static const uint16_t elf_zlib_default_dist_table[0x100] = 1666 1.7 mrg { 1667 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1668 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1669 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1670 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1671 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1672 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1673 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1674 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1675 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1676 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1677 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1678 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1679 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1680 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1681 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1682 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1683 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1684 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1685 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1686 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1687 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1688 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1689 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1690 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1691 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1692 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1693 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1694 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1695 1.7 mrg 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c, 1696 1.7 mrg 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e, 1697 1.7 mrg 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d, 1698 1.7 mrg 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f, 1699 1.7 mrg }; 1700 1.7 mrg 1701 1.7 mrg /* Inflate a zlib stream from PIN/SIN to POUT/SOUT. Return 1 on 1702 1.7 mrg success, 0 on some error parsing the stream. */ 1703 1.7 mrg 1704 1.7 mrg static int 1705 1.7 mrg elf_zlib_inflate (const unsigned char *pin, size_t sin, uint16_t *zdebug_table, 1706 1.7 mrg unsigned char *pout, size_t sout) 1707 1.7 mrg { 1708 1.7 mrg unsigned char *porigout; 1709 1.7 mrg const unsigned char *pinend; 1710 1.7 mrg unsigned char *poutend; 1711 1.7 mrg 1712 1.7 mrg /* We can apparently see multiple zlib streams concatenated 1713 1.7 mrg together, so keep going as long as there is something to read. 1714 1.7 mrg The last 4 bytes are the checksum. */ 1715 1.7 mrg porigout = pout; 1716 1.7 mrg pinend = pin + sin; 1717 1.7 mrg poutend = pout + sout; 1718 1.7 mrg while ((pinend - pin) > 4) 1719 1.7 mrg { 1720 1.7 mrg uint64_t val; 1721 1.7 mrg unsigned int bits; 1722 1.7 mrg int last; 1723 1.7 mrg 1724 1.7 mrg /* Read the two byte zlib header. */ 1725 1.7 mrg 1726 1.7 mrg if (unlikely ((pin[0] & 0xf) != 8)) /* 8 is zlib encoding. */ 1727 1.7 mrg { 1728 1.7 mrg /* Unknown compression method. */ 1729 1.10 mrg elf_uncompress_failed (); 1730 1.7 mrg return 0; 1731 1.7 mrg } 1732 1.7 mrg if (unlikely ((pin[0] >> 4) > 7)) 1733 1.7 mrg { 1734 1.7 mrg /* Window size too large. Other than this check, we don't 1735 1.7 mrg care about the window size. */ 1736 1.10 mrg elf_uncompress_failed (); 1737 1.7 mrg return 0; 1738 1.7 mrg } 1739 1.7 mrg if (unlikely ((pin[1] & 0x20) != 0)) 1740 1.7 mrg { 1741 1.7 mrg /* Stream expects a predefined dictionary, but we have no 1742 1.7 mrg dictionary. */ 1743 1.10 mrg elf_uncompress_failed (); 1744 1.7 mrg return 0; 1745 1.7 mrg } 1746 1.7 mrg val = (pin[0] << 8) | pin[1]; 1747 1.7 mrg if (unlikely (val % 31 != 0)) 1748 1.7 mrg { 1749 1.7 mrg /* Header check failure. */ 1750 1.10 mrg elf_uncompress_failed (); 1751 1.7 mrg return 0; 1752 1.7 mrg } 1753 1.7 mrg pin += 2; 1754 1.7 mrg 1755 1.7 mrg /* Align PIN to a 32-bit boundary. */ 1756 1.7 mrg 1757 1.7 mrg val = 0; 1758 1.7 mrg bits = 0; 1759 1.7 mrg while ((((uintptr_t) pin) & 3) != 0) 1760 1.7 mrg { 1761 1.7 mrg val |= (uint64_t)*pin << bits; 1762 1.7 mrg bits += 8; 1763 1.7 mrg ++pin; 1764 1.7 mrg } 1765 1.7 mrg 1766 1.7 mrg /* Read blocks until one is marked last. */ 1767 1.7 mrg 1768 1.7 mrg last = 0; 1769 1.7 mrg 1770 1.7 mrg while (!last) 1771 1.7 mrg { 1772 1.7 mrg unsigned int type; 1773 1.7 mrg const uint16_t *tlit; 1774 1.7 mrg const uint16_t *tdist; 1775 1.7 mrg 1776 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 1777 1.7 mrg return 0; 1778 1.7 mrg 1779 1.7 mrg last = val & 1; 1780 1.7 mrg type = (val >> 1) & 3; 1781 1.7 mrg val >>= 3; 1782 1.7 mrg bits -= 3; 1783 1.7 mrg 1784 1.7 mrg if (unlikely (type == 3)) 1785 1.7 mrg { 1786 1.7 mrg /* Invalid block type. */ 1787 1.10 mrg elf_uncompress_failed (); 1788 1.7 mrg return 0; 1789 1.7 mrg } 1790 1.7 mrg 1791 1.7 mrg if (type == 0) 1792 1.7 mrg { 1793 1.7 mrg uint16_t len; 1794 1.7 mrg uint16_t lenc; 1795 1.7 mrg 1796 1.7 mrg /* An uncompressed block. */ 1797 1.7 mrg 1798 1.7 mrg /* If we've read ahead more than a byte, back up. */ 1799 1.10 mrg while (bits >= 8) 1800 1.7 mrg { 1801 1.7 mrg --pin; 1802 1.7 mrg bits -= 8; 1803 1.7 mrg } 1804 1.7 mrg 1805 1.7 mrg val = 0; 1806 1.7 mrg bits = 0; 1807 1.7 mrg if (unlikely ((pinend - pin) < 4)) 1808 1.7 mrg { 1809 1.7 mrg /* Missing length. */ 1810 1.10 mrg elf_uncompress_failed (); 1811 1.7 mrg return 0; 1812 1.7 mrg } 1813 1.7 mrg len = pin[0] | (pin[1] << 8); 1814 1.7 mrg lenc = pin[2] | (pin[3] << 8); 1815 1.7 mrg pin += 4; 1816 1.7 mrg lenc = ~lenc; 1817 1.7 mrg if (unlikely (len != lenc)) 1818 1.7 mrg { 1819 1.7 mrg /* Corrupt data. */ 1820 1.10 mrg elf_uncompress_failed (); 1821 1.7 mrg return 0; 1822 1.7 mrg } 1823 1.7 mrg if (unlikely (len > (unsigned int) (pinend - pin) 1824 1.7 mrg || len > (unsigned int) (poutend - pout))) 1825 1.7 mrg { 1826 1.7 mrg /* Not enough space in buffers. */ 1827 1.10 mrg elf_uncompress_failed (); 1828 1.7 mrg return 0; 1829 1.7 mrg } 1830 1.7 mrg memcpy (pout, pin, len); 1831 1.7 mrg pout += len; 1832 1.7 mrg pin += len; 1833 1.7 mrg 1834 1.7 mrg /* Align PIN. */ 1835 1.7 mrg while ((((uintptr_t) pin) & 3) != 0) 1836 1.7 mrg { 1837 1.7 mrg val |= (uint64_t)*pin << bits; 1838 1.7 mrg bits += 8; 1839 1.7 mrg ++pin; 1840 1.7 mrg } 1841 1.7 mrg 1842 1.7 mrg /* Go around to read the next block. */ 1843 1.7 mrg continue; 1844 1.7 mrg } 1845 1.7 mrg 1846 1.7 mrg if (type == 1) 1847 1.7 mrg { 1848 1.7 mrg tlit = elf_zlib_default_table; 1849 1.7 mrg tdist = elf_zlib_default_dist_table; 1850 1.7 mrg } 1851 1.7 mrg else 1852 1.7 mrg { 1853 1.7 mrg unsigned int nlit; 1854 1.7 mrg unsigned int ndist; 1855 1.7 mrg unsigned int nclen; 1856 1.7 mrg unsigned char codebits[19]; 1857 1.7 mrg unsigned char *plenbase; 1858 1.7 mrg unsigned char *plen; 1859 1.7 mrg unsigned char *plenend; 1860 1.7 mrg 1861 1.7 mrg /* Read a Huffman encoding table. The various magic 1862 1.7 mrg numbers here are from RFC 1951. */ 1863 1.7 mrg 1864 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 1865 1.7 mrg return 0; 1866 1.7 mrg 1867 1.7 mrg nlit = (val & 0x1f) + 257; 1868 1.7 mrg val >>= 5; 1869 1.7 mrg ndist = (val & 0x1f) + 1; 1870 1.7 mrg val >>= 5; 1871 1.7 mrg nclen = (val & 0xf) + 4; 1872 1.7 mrg val >>= 4; 1873 1.7 mrg bits -= 14; 1874 1.7 mrg if (unlikely (nlit > 286 || ndist > 30)) 1875 1.7 mrg { 1876 1.7 mrg /* Values out of range. */ 1877 1.10 mrg elf_uncompress_failed (); 1878 1.7 mrg return 0; 1879 1.7 mrg } 1880 1.7 mrg 1881 1.7 mrg /* Read and build the table used to compress the 1882 1.7 mrg literal, length, and distance codes. */ 1883 1.7 mrg 1884 1.7 mrg memset(&codebits[0], 0, 19); 1885 1.7 mrg 1886 1.7 mrg /* There are always at least 4 elements in the 1887 1.7 mrg table. */ 1888 1.7 mrg 1889 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 1890 1.7 mrg return 0; 1891 1.7 mrg 1892 1.7 mrg codebits[16] = val & 7; 1893 1.7 mrg codebits[17] = (val >> 3) & 7; 1894 1.7 mrg codebits[18] = (val >> 6) & 7; 1895 1.7 mrg codebits[0] = (val >> 9) & 7; 1896 1.7 mrg val >>= 12; 1897 1.7 mrg bits -= 12; 1898 1.7 mrg 1899 1.7 mrg if (nclen == 4) 1900 1.7 mrg goto codebitsdone; 1901 1.7 mrg 1902 1.7 mrg codebits[8] = val & 7; 1903 1.7 mrg val >>= 3; 1904 1.7 mrg bits -= 3; 1905 1.7 mrg 1906 1.7 mrg if (nclen == 5) 1907 1.7 mrg goto codebitsdone; 1908 1.7 mrg 1909 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 1910 1.7 mrg return 0; 1911 1.7 mrg 1912 1.7 mrg codebits[7] = val & 7; 1913 1.7 mrg val >>= 3; 1914 1.7 mrg bits -= 3; 1915 1.7 mrg 1916 1.7 mrg if (nclen == 6) 1917 1.7 mrg goto codebitsdone; 1918 1.7 mrg 1919 1.7 mrg codebits[9] = val & 7; 1920 1.7 mrg val >>= 3; 1921 1.7 mrg bits -= 3; 1922 1.7 mrg 1923 1.7 mrg if (nclen == 7) 1924 1.7 mrg goto codebitsdone; 1925 1.7 mrg 1926 1.7 mrg codebits[6] = val & 7; 1927 1.7 mrg val >>= 3; 1928 1.7 mrg bits -= 3; 1929 1.7 mrg 1930 1.7 mrg if (nclen == 8) 1931 1.7 mrg goto codebitsdone; 1932 1.7 mrg 1933 1.7 mrg codebits[10] = val & 7; 1934 1.7 mrg val >>= 3; 1935 1.7 mrg bits -= 3; 1936 1.7 mrg 1937 1.7 mrg if (nclen == 9) 1938 1.7 mrg goto codebitsdone; 1939 1.7 mrg 1940 1.7 mrg codebits[5] = val & 7; 1941 1.7 mrg val >>= 3; 1942 1.7 mrg bits -= 3; 1943 1.7 mrg 1944 1.7 mrg if (nclen == 10) 1945 1.7 mrg goto codebitsdone; 1946 1.7 mrg 1947 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 1948 1.7 mrg return 0; 1949 1.7 mrg 1950 1.7 mrg codebits[11] = val & 7; 1951 1.7 mrg val >>= 3; 1952 1.7 mrg bits -= 3; 1953 1.7 mrg 1954 1.7 mrg if (nclen == 11) 1955 1.7 mrg goto codebitsdone; 1956 1.7 mrg 1957 1.7 mrg codebits[4] = val & 7; 1958 1.7 mrg val >>= 3; 1959 1.7 mrg bits -= 3; 1960 1.7 mrg 1961 1.7 mrg if (nclen == 12) 1962 1.7 mrg goto codebitsdone; 1963 1.7 mrg 1964 1.7 mrg codebits[12] = val & 7; 1965 1.7 mrg val >>= 3; 1966 1.7 mrg bits -= 3; 1967 1.7 mrg 1968 1.7 mrg if (nclen == 13) 1969 1.7 mrg goto codebitsdone; 1970 1.7 mrg 1971 1.7 mrg codebits[3] = val & 7; 1972 1.7 mrg val >>= 3; 1973 1.7 mrg bits -= 3; 1974 1.7 mrg 1975 1.7 mrg if (nclen == 14) 1976 1.7 mrg goto codebitsdone; 1977 1.7 mrg 1978 1.7 mrg codebits[13] = val & 7; 1979 1.7 mrg val >>= 3; 1980 1.7 mrg bits -= 3; 1981 1.7 mrg 1982 1.7 mrg if (nclen == 15) 1983 1.7 mrg goto codebitsdone; 1984 1.7 mrg 1985 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 1986 1.7 mrg return 0; 1987 1.7 mrg 1988 1.7 mrg codebits[2] = val & 7; 1989 1.7 mrg val >>= 3; 1990 1.7 mrg bits -= 3; 1991 1.7 mrg 1992 1.7 mrg if (nclen == 16) 1993 1.7 mrg goto codebitsdone; 1994 1.7 mrg 1995 1.7 mrg codebits[14] = val & 7; 1996 1.7 mrg val >>= 3; 1997 1.7 mrg bits -= 3; 1998 1.7 mrg 1999 1.7 mrg if (nclen == 17) 2000 1.7 mrg goto codebitsdone; 2001 1.7 mrg 2002 1.7 mrg codebits[1] = val & 7; 2003 1.7 mrg val >>= 3; 2004 1.7 mrg bits -= 3; 2005 1.7 mrg 2006 1.7 mrg if (nclen == 18) 2007 1.7 mrg goto codebitsdone; 2008 1.7 mrg 2009 1.7 mrg codebits[15] = val & 7; 2010 1.7 mrg val >>= 3; 2011 1.7 mrg bits -= 3; 2012 1.7 mrg 2013 1.7 mrg codebitsdone: 2014 1.7 mrg 2015 1.7 mrg if (!elf_zlib_inflate_table (codebits, 19, zdebug_table, 2016 1.7 mrg zdebug_table)) 2017 1.7 mrg return 0; 2018 1.7 mrg 2019 1.7 mrg /* Read the compressed bit lengths of the literal, 2020 1.7 mrg length, and distance codes. We have allocated space 2021 1.7 mrg at the end of zdebug_table to hold them. */ 2022 1.7 mrg 2023 1.7 mrg plenbase = (((unsigned char *) zdebug_table) 2024 1.7 mrg + ZDEBUG_TABLE_CODELEN_OFFSET); 2025 1.7 mrg plen = plenbase; 2026 1.7 mrg plenend = plen + nlit + ndist; 2027 1.7 mrg while (plen < plenend) 2028 1.7 mrg { 2029 1.7 mrg uint16_t t; 2030 1.7 mrg unsigned int b; 2031 1.7 mrg uint16_t v; 2032 1.7 mrg 2033 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 2034 1.7 mrg return 0; 2035 1.7 mrg 2036 1.7 mrg t = zdebug_table[val & 0xff]; 2037 1.7 mrg 2038 1.7 mrg /* The compression here uses bit lengths up to 7, so 2039 1.7 mrg a secondary table is never necessary. */ 2040 1.7 mrg if (unlikely ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) != 0)) 2041 1.7 mrg { 2042 1.10 mrg elf_uncompress_failed (); 2043 1.7 mrg return 0; 2044 1.7 mrg } 2045 1.7 mrg 2046 1.7 mrg b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; 2047 1.7 mrg val >>= b + 1; 2048 1.7 mrg bits -= b + 1; 2049 1.7 mrg 2050 1.7 mrg v = t & HUFFMAN_VALUE_MASK; 2051 1.7 mrg if (v < 16) 2052 1.7 mrg *plen++ = v; 2053 1.7 mrg else if (v == 16) 2054 1.7 mrg { 2055 1.7 mrg unsigned int c; 2056 1.7 mrg unsigned int prev; 2057 1.7 mrg 2058 1.7 mrg /* Copy previous entry 3 to 6 times. */ 2059 1.7 mrg 2060 1.7 mrg if (unlikely (plen == plenbase)) 2061 1.7 mrg { 2062 1.10 mrg elf_uncompress_failed (); 2063 1.7 mrg return 0; 2064 1.7 mrg } 2065 1.7 mrg 2066 1.7 mrg /* We used up to 7 bits since the last 2067 1.7 mrg elf_zlib_fetch, so we have at least 8 bits 2068 1.7 mrg available here. */ 2069 1.7 mrg 2070 1.7 mrg c = 3 + (val & 0x3); 2071 1.7 mrg val >>= 2; 2072 1.7 mrg bits -= 2; 2073 1.7 mrg if (unlikely ((unsigned int) (plenend - plen) < c)) 2074 1.7 mrg { 2075 1.10 mrg elf_uncompress_failed (); 2076 1.7 mrg return 0; 2077 1.7 mrg } 2078 1.7 mrg 2079 1.7 mrg prev = plen[-1]; 2080 1.7 mrg switch (c) 2081 1.7 mrg { 2082 1.7 mrg case 6: 2083 1.7 mrg *plen++ = prev; 2084 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2085 1.7 mrg case 5: 2086 1.7 mrg *plen++ = prev; 2087 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2088 1.7 mrg case 4: 2089 1.7 mrg *plen++ = prev; 2090 1.7 mrg } 2091 1.7 mrg *plen++ = prev; 2092 1.7 mrg *plen++ = prev; 2093 1.7 mrg *plen++ = prev; 2094 1.7 mrg } 2095 1.7 mrg else if (v == 17) 2096 1.7 mrg { 2097 1.7 mrg unsigned int c; 2098 1.7 mrg 2099 1.7 mrg /* Store zero 3 to 10 times. */ 2100 1.7 mrg 2101 1.7 mrg /* We used up to 7 bits since the last 2102 1.7 mrg elf_zlib_fetch, so we have at least 8 bits 2103 1.7 mrg available here. */ 2104 1.7 mrg 2105 1.7 mrg c = 3 + (val & 0x7); 2106 1.7 mrg val >>= 3; 2107 1.7 mrg bits -= 3; 2108 1.7 mrg if (unlikely ((unsigned int) (plenend - plen) < c)) 2109 1.7 mrg { 2110 1.10 mrg elf_uncompress_failed (); 2111 1.7 mrg return 0; 2112 1.7 mrg } 2113 1.7 mrg 2114 1.7 mrg switch (c) 2115 1.7 mrg { 2116 1.7 mrg case 10: 2117 1.7 mrg *plen++ = 0; 2118 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2119 1.7 mrg case 9: 2120 1.7 mrg *plen++ = 0; 2121 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2122 1.7 mrg case 8: 2123 1.7 mrg *plen++ = 0; 2124 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2125 1.7 mrg case 7: 2126 1.7 mrg *plen++ = 0; 2127 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2128 1.7 mrg case 6: 2129 1.7 mrg *plen++ = 0; 2130 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2131 1.7 mrg case 5: 2132 1.7 mrg *plen++ = 0; 2133 1.10 mrg ATTRIBUTE_FALLTHROUGH; 2134 1.7 mrg case 4: 2135 1.7 mrg *plen++ = 0; 2136 1.7 mrg } 2137 1.7 mrg *plen++ = 0; 2138 1.7 mrg *plen++ = 0; 2139 1.7 mrg *plen++ = 0; 2140 1.7 mrg } 2141 1.7 mrg else if (v == 18) 2142 1.7 mrg { 2143 1.7 mrg unsigned int c; 2144 1.7 mrg 2145 1.7 mrg /* Store zero 11 to 138 times. */ 2146 1.7 mrg 2147 1.7 mrg /* We used up to 7 bits since the last 2148 1.7 mrg elf_zlib_fetch, so we have at least 8 bits 2149 1.7 mrg available here. */ 2150 1.7 mrg 2151 1.7 mrg c = 11 + (val & 0x7f); 2152 1.7 mrg val >>= 7; 2153 1.7 mrg bits -= 7; 2154 1.7 mrg if (unlikely ((unsigned int) (plenend - plen) < c)) 2155 1.7 mrg { 2156 1.10 mrg elf_uncompress_failed (); 2157 1.7 mrg return 0; 2158 1.7 mrg } 2159 1.7 mrg 2160 1.7 mrg memset (plen, 0, c); 2161 1.7 mrg plen += c; 2162 1.7 mrg } 2163 1.7 mrg else 2164 1.7 mrg { 2165 1.10 mrg elf_uncompress_failed (); 2166 1.7 mrg return 0; 2167 1.7 mrg } 2168 1.7 mrg } 2169 1.7 mrg 2170 1.7 mrg /* Make sure that the stop code can appear. */ 2171 1.7 mrg 2172 1.7 mrg plen = plenbase; 2173 1.7 mrg if (unlikely (plen[256] == 0)) 2174 1.7 mrg { 2175 1.10 mrg elf_uncompress_failed (); 2176 1.7 mrg return 0; 2177 1.7 mrg } 2178 1.7 mrg 2179 1.7 mrg /* Build the decompression tables. */ 2180 1.7 mrg 2181 1.7 mrg if (!elf_zlib_inflate_table (plen, nlit, zdebug_table, 2182 1.7 mrg zdebug_table)) 2183 1.7 mrg return 0; 2184 1.7 mrg if (!elf_zlib_inflate_table (plen + nlit, ndist, zdebug_table, 2185 1.7 mrg zdebug_table + HUFFMAN_TABLE_SIZE)) 2186 1.7 mrg return 0; 2187 1.7 mrg tlit = zdebug_table; 2188 1.7 mrg tdist = zdebug_table + HUFFMAN_TABLE_SIZE; 2189 1.7 mrg } 2190 1.7 mrg 2191 1.7 mrg /* Inflate values until the end of the block. This is the 2192 1.7 mrg main loop of the inflation code. */ 2193 1.7 mrg 2194 1.7 mrg while (1) 2195 1.7 mrg { 2196 1.7 mrg uint16_t t; 2197 1.7 mrg unsigned int b; 2198 1.7 mrg uint16_t v; 2199 1.7 mrg unsigned int lit; 2200 1.7 mrg 2201 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 2202 1.7 mrg return 0; 2203 1.7 mrg 2204 1.7 mrg t = tlit[val & 0xff]; 2205 1.7 mrg b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; 2206 1.7 mrg v = t & HUFFMAN_VALUE_MASK; 2207 1.7 mrg 2208 1.7 mrg if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0) 2209 1.7 mrg { 2210 1.7 mrg lit = v; 2211 1.7 mrg val >>= b + 1; 2212 1.7 mrg bits -= b + 1; 2213 1.7 mrg } 2214 1.7 mrg else 2215 1.7 mrg { 2216 1.7 mrg t = tlit[v + 0x100 + ((val >> 8) & ((1U << b) - 1))]; 2217 1.7 mrg b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; 2218 1.7 mrg lit = t & HUFFMAN_VALUE_MASK; 2219 1.7 mrg val >>= b + 8; 2220 1.7 mrg bits -= b + 8; 2221 1.7 mrg } 2222 1.7 mrg 2223 1.7 mrg if (lit < 256) 2224 1.7 mrg { 2225 1.7 mrg if (unlikely (pout == poutend)) 2226 1.7 mrg { 2227 1.10 mrg elf_uncompress_failed (); 2228 1.7 mrg return 0; 2229 1.7 mrg } 2230 1.7 mrg 2231 1.7 mrg *pout++ = lit; 2232 1.7 mrg 2233 1.7 mrg /* We will need to write the next byte soon. We ask 2234 1.7 mrg for high temporal locality because we will write 2235 1.7 mrg to the whole cache line soon. */ 2236 1.7 mrg __builtin_prefetch (pout, 1, 3); 2237 1.7 mrg } 2238 1.7 mrg else if (lit == 256) 2239 1.7 mrg { 2240 1.7 mrg /* The end of the block. */ 2241 1.7 mrg break; 2242 1.7 mrg } 2243 1.7 mrg else 2244 1.7 mrg { 2245 1.7 mrg unsigned int dist; 2246 1.7 mrg unsigned int len; 2247 1.7 mrg 2248 1.7 mrg /* Convert lit into a length. */ 2249 1.7 mrg 2250 1.7 mrg if (lit < 265) 2251 1.7 mrg len = lit - 257 + 3; 2252 1.7 mrg else if (lit == 285) 2253 1.7 mrg len = 258; 2254 1.7 mrg else if (unlikely (lit > 285)) 2255 1.7 mrg { 2256 1.10 mrg elf_uncompress_failed (); 2257 1.7 mrg return 0; 2258 1.7 mrg } 2259 1.7 mrg else 2260 1.7 mrg { 2261 1.7 mrg unsigned int extra; 2262 1.7 mrg 2263 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 2264 1.7 mrg return 0; 2265 1.7 mrg 2266 1.7 mrg /* This is an expression for the table of length 2267 1.7 mrg codes in RFC 1951 3.2.5. */ 2268 1.7 mrg lit -= 265; 2269 1.7 mrg extra = (lit >> 2) + 1; 2270 1.7 mrg len = (lit & 3) << extra; 2271 1.7 mrg len += 11; 2272 1.7 mrg len += ((1U << (extra - 1)) - 1) << 3; 2273 1.7 mrg len += val & ((1U << extra) - 1); 2274 1.7 mrg val >>= extra; 2275 1.7 mrg bits -= extra; 2276 1.7 mrg } 2277 1.7 mrg 2278 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 2279 1.7 mrg return 0; 2280 1.7 mrg 2281 1.7 mrg t = tdist[val & 0xff]; 2282 1.7 mrg b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; 2283 1.7 mrg v = t & HUFFMAN_VALUE_MASK; 2284 1.7 mrg 2285 1.7 mrg if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0) 2286 1.7 mrg { 2287 1.7 mrg dist = v; 2288 1.7 mrg val >>= b + 1; 2289 1.7 mrg bits -= b + 1; 2290 1.7 mrg } 2291 1.7 mrg else 2292 1.7 mrg { 2293 1.7 mrg t = tdist[v + 0x100 + ((val >> 8) & ((1U << b) - 1))]; 2294 1.7 mrg b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK; 2295 1.7 mrg dist = t & HUFFMAN_VALUE_MASK; 2296 1.7 mrg val >>= b + 8; 2297 1.7 mrg bits -= b + 8; 2298 1.7 mrg } 2299 1.7 mrg 2300 1.7 mrg /* Convert dist to a distance. */ 2301 1.7 mrg 2302 1.7 mrg if (dist == 0) 2303 1.7 mrg { 2304 1.7 mrg /* A distance of 1. A common case, meaning 2305 1.7 mrg repeat the last character LEN times. */ 2306 1.7 mrg 2307 1.7 mrg if (unlikely (pout == porigout)) 2308 1.7 mrg { 2309 1.10 mrg elf_uncompress_failed (); 2310 1.7 mrg return 0; 2311 1.7 mrg } 2312 1.7 mrg 2313 1.7 mrg if (unlikely ((unsigned int) (poutend - pout) < len)) 2314 1.7 mrg { 2315 1.10 mrg elf_uncompress_failed (); 2316 1.7 mrg return 0; 2317 1.7 mrg } 2318 1.7 mrg 2319 1.7 mrg memset (pout, pout[-1], len); 2320 1.7 mrg pout += len; 2321 1.7 mrg } 2322 1.7 mrg else if (unlikely (dist > 29)) 2323 1.7 mrg { 2324 1.10 mrg elf_uncompress_failed (); 2325 1.7 mrg return 0; 2326 1.7 mrg } 2327 1.7 mrg else 2328 1.7 mrg { 2329 1.7 mrg if (dist < 4) 2330 1.7 mrg dist = dist + 1; 2331 1.7 mrg else 2332 1.7 mrg { 2333 1.7 mrg unsigned int extra; 2334 1.7 mrg 2335 1.7 mrg if (!elf_zlib_fetch (&pin, pinend, &val, &bits)) 2336 1.7 mrg return 0; 2337 1.7 mrg 2338 1.7 mrg /* This is an expression for the table of 2339 1.7 mrg distance codes in RFC 1951 3.2.5. */ 2340 1.7 mrg dist -= 4; 2341 1.7 mrg extra = (dist >> 1) + 1; 2342 1.7 mrg dist = (dist & 1) << extra; 2343 1.7 mrg dist += 5; 2344 1.7 mrg dist += ((1U << (extra - 1)) - 1) << 2; 2345 1.7 mrg dist += val & ((1U << extra) - 1); 2346 1.7 mrg val >>= extra; 2347 1.7 mrg bits -= extra; 2348 1.7 mrg } 2349 1.7 mrg 2350 1.7 mrg /* Go back dist bytes, and copy len bytes from 2351 1.7 mrg there. */ 2352 1.7 mrg 2353 1.7 mrg if (unlikely ((unsigned int) (pout - porigout) < dist)) 2354 1.7 mrg { 2355 1.10 mrg elf_uncompress_failed (); 2356 1.7 mrg return 0; 2357 1.7 mrg } 2358 1.7 mrg 2359 1.7 mrg if (unlikely ((unsigned int) (poutend - pout) < len)) 2360 1.7 mrg { 2361 1.10 mrg elf_uncompress_failed (); 2362 1.7 mrg return 0; 2363 1.7 mrg } 2364 1.7 mrg 2365 1.7 mrg if (dist >= len) 2366 1.7 mrg { 2367 1.7 mrg memcpy (pout, pout - dist, len); 2368 1.7 mrg pout += len; 2369 1.7 mrg } 2370 1.7 mrg else 2371 1.7 mrg { 2372 1.7 mrg while (len > 0) 2373 1.7 mrg { 2374 1.7 mrg unsigned int copy; 2375 1.7 mrg 2376 1.7 mrg copy = len < dist ? len : dist; 2377 1.7 mrg memcpy (pout, pout - dist, copy); 2378 1.7 mrg len -= copy; 2379 1.7 mrg pout += copy; 2380 1.7 mrg } 2381 1.7 mrg } 2382 1.7 mrg } 2383 1.7 mrg } 2384 1.7 mrg } 2385 1.7 mrg } 2386 1.7 mrg } 2387 1.7 mrg 2388 1.7 mrg /* We should have filled the output buffer. */ 2389 1.7 mrg if (unlikely (pout != poutend)) 2390 1.7 mrg { 2391 1.10 mrg elf_uncompress_failed (); 2392 1.7 mrg return 0; 2393 1.7 mrg } 2394 1.7 mrg 2395 1.7 mrg return 1; 2396 1.7 mrg } 2397 1.7 mrg 2398 1.7 mrg /* Verify the zlib checksum. The checksum is in the 4 bytes at 2399 1.7 mrg CHECKBYTES, and the uncompressed data is at UNCOMPRESSED / 2400 1.7 mrg UNCOMPRESSED_SIZE. Returns 1 on success, 0 on failure. */ 2401 1.7 mrg 2402 1.7 mrg static int 2403 1.7 mrg elf_zlib_verify_checksum (const unsigned char *checkbytes, 2404 1.7 mrg const unsigned char *uncompressed, 2405 1.7 mrg size_t uncompressed_size) 2406 1.7 mrg { 2407 1.7 mrg unsigned int i; 2408 1.7 mrg unsigned int cksum; 2409 1.7 mrg const unsigned char *p; 2410 1.7 mrg uint32_t s1; 2411 1.7 mrg uint32_t s2; 2412 1.7 mrg size_t hsz; 2413 1.7 mrg 2414 1.7 mrg cksum = 0; 2415 1.7 mrg for (i = 0; i < 4; i++) 2416 1.7 mrg cksum = (cksum << 8) | checkbytes[i]; 2417 1.7 mrg 2418 1.7 mrg s1 = 1; 2419 1.7 mrg s2 = 0; 2420 1.7 mrg 2421 1.7 mrg /* Minimize modulo operations. */ 2422 1.7 mrg 2423 1.7 mrg p = uncompressed; 2424 1.7 mrg hsz = uncompressed_size; 2425 1.7 mrg while (hsz >= 5552) 2426 1.7 mrg { 2427 1.7 mrg for (i = 0; i < 5552; i += 16) 2428 1.7 mrg { 2429 1.7 mrg /* Manually unroll loop 16 times. */ 2430 1.7 mrg s1 = s1 + *p++; 2431 1.7 mrg s2 = s2 + s1; 2432 1.7 mrg s1 = s1 + *p++; 2433 1.7 mrg s2 = s2 + s1; 2434 1.7 mrg s1 = s1 + *p++; 2435 1.7 mrg s2 = s2 + s1; 2436 1.7 mrg s1 = s1 + *p++; 2437 1.7 mrg s2 = s2 + s1; 2438 1.7 mrg s1 = s1 + *p++; 2439 1.7 mrg s2 = s2 + s1; 2440 1.7 mrg s1 = s1 + *p++; 2441 1.7 mrg s2 = s2 + s1; 2442 1.7 mrg s1 = s1 + *p++; 2443 1.7 mrg s2 = s2 + s1; 2444 1.7 mrg s1 = s1 + *p++; 2445 1.7 mrg s2 = s2 + s1; 2446 1.7 mrg s1 = s1 + *p++; 2447 1.7 mrg s2 = s2 + s1; 2448 1.7 mrg s1 = s1 + *p++; 2449 1.7 mrg s2 = s2 + s1; 2450 1.7 mrg s1 = s1 + *p++; 2451 1.7 mrg s2 = s2 + s1; 2452 1.7 mrg s1 = s1 + *p++; 2453 1.7 mrg s2 = s2 + s1; 2454 1.7 mrg s1 = s1 + *p++; 2455 1.7 mrg s2 = s2 + s1; 2456 1.7 mrg s1 = s1 + *p++; 2457 1.7 mrg s2 = s2 + s1; 2458 1.7 mrg s1 = s1 + *p++; 2459 1.7 mrg s2 = s2 + s1; 2460 1.7 mrg s1 = s1 + *p++; 2461 1.7 mrg s2 = s2 + s1; 2462 1.7 mrg } 2463 1.7 mrg hsz -= 5552; 2464 1.7 mrg s1 %= 65521; 2465 1.7 mrg s2 %= 65521; 2466 1.7 mrg } 2467 1.7 mrg 2468 1.7 mrg while (hsz >= 16) 2469 1.7 mrg { 2470 1.7 mrg /* Manually unroll loop 16 times. */ 2471 1.7 mrg s1 = s1 + *p++; 2472 1.7 mrg s2 = s2 + s1; 2473 1.7 mrg s1 = s1 + *p++; 2474 1.7 mrg s2 = s2 + s1; 2475 1.7 mrg s1 = s1 + *p++; 2476 1.7 mrg s2 = s2 + s1; 2477 1.7 mrg s1 = s1 + *p++; 2478 1.7 mrg s2 = s2 + s1; 2479 1.7 mrg s1 = s1 + *p++; 2480 1.7 mrg s2 = s2 + s1; 2481 1.7 mrg s1 = s1 + *p++; 2482 1.7 mrg s2 = s2 + s1; 2483 1.7 mrg s1 = s1 + *p++; 2484 1.7 mrg s2 = s2 + s1; 2485 1.7 mrg s1 = s1 + *p++; 2486 1.7 mrg s2 = s2 + s1; 2487 1.7 mrg s1 = s1 + *p++; 2488 1.7 mrg s2 = s2 + s1; 2489 1.7 mrg s1 = s1 + *p++; 2490 1.7 mrg s2 = s2 + s1; 2491 1.7 mrg s1 = s1 + *p++; 2492 1.7 mrg s2 = s2 + s1; 2493 1.7 mrg s1 = s1 + *p++; 2494 1.7 mrg s2 = s2 + s1; 2495 1.7 mrg s1 = s1 + *p++; 2496 1.7 mrg s2 = s2 + s1; 2497 1.7 mrg s1 = s1 + *p++; 2498 1.7 mrg s2 = s2 + s1; 2499 1.7 mrg s1 = s1 + *p++; 2500 1.7 mrg s2 = s2 + s1; 2501 1.7 mrg s1 = s1 + *p++; 2502 1.7 mrg s2 = s2 + s1; 2503 1.7 mrg 2504 1.7 mrg hsz -= 16; 2505 1.7 mrg } 2506 1.7 mrg 2507 1.7 mrg for (i = 0; i < hsz; ++i) 2508 1.7 mrg { 2509 1.7 mrg s1 = s1 + *p++; 2510 1.7 mrg s2 = s2 + s1; 2511 1.7 mrg } 2512 1.7 mrg 2513 1.7 mrg s1 %= 65521; 2514 1.7 mrg s2 %= 65521; 2515 1.7 mrg 2516 1.7 mrg if (unlikely ((s2 << 16) + s1 != cksum)) 2517 1.7 mrg { 2518 1.10 mrg elf_uncompress_failed (); 2519 1.7 mrg return 0; 2520 1.7 mrg } 2521 1.7 mrg 2522 1.7 mrg return 1; 2523 1.7 mrg } 2524 1.7 mrg 2525 1.7 mrg /* Inflate a zlib stream from PIN/SIN to POUT/SOUT, and verify the 2526 1.7 mrg checksum. Return 1 on success, 0 on error. */ 2527 1.7 mrg 2528 1.7 mrg static int 2529 1.7 mrg elf_zlib_inflate_and_verify (const unsigned char *pin, size_t sin, 2530 1.7 mrg uint16_t *zdebug_table, unsigned char *pout, 2531 1.7 mrg size_t sout) 2532 1.7 mrg { 2533 1.7 mrg if (!elf_zlib_inflate (pin, sin, zdebug_table, pout, sout)) 2534 1.7 mrg return 0; 2535 1.7 mrg if (!elf_zlib_verify_checksum (pin + sin - 4, pout, sout)) 2536 1.7 mrg return 0; 2537 1.7 mrg return 1; 2538 1.7 mrg } 2539 1.7 mrg 2540 1.7 mrg /* Uncompress the old compressed debug format, the one emitted by 2541 1.7 mrg --compress-debug-sections=zlib-gnu. The compressed data is in 2542 1.7 mrg COMPRESSED / COMPRESSED_SIZE, and the function writes to 2543 1.7 mrg *UNCOMPRESSED / *UNCOMPRESSED_SIZE. ZDEBUG_TABLE is work space to 2544 1.7 mrg hold Huffman tables. Returns 0 on error, 1 on successful 2545 1.7 mrg decompression or if something goes wrong. In general we try to 2546 1.7 mrg carry on, by returning 1, even if we can't decompress. */ 2547 1.7 mrg 2548 1.7 mrg static int 2549 1.7 mrg elf_uncompress_zdebug (struct backtrace_state *state, 2550 1.7 mrg const unsigned char *compressed, size_t compressed_size, 2551 1.7 mrg uint16_t *zdebug_table, 2552 1.7 mrg backtrace_error_callback error_callback, void *data, 2553 1.7 mrg unsigned char **uncompressed, size_t *uncompressed_size) 2554 1.7 mrg { 2555 1.7 mrg size_t sz; 2556 1.7 mrg size_t i; 2557 1.7 mrg unsigned char *po; 2558 1.7 mrg 2559 1.7 mrg *uncompressed = NULL; 2560 1.7 mrg *uncompressed_size = 0; 2561 1.7 mrg 2562 1.7 mrg /* The format starts with the four bytes ZLIB, followed by the 8 2563 1.7 mrg byte length of the uncompressed data in big-endian order, 2564 1.7 mrg followed by a zlib stream. */ 2565 1.7 mrg 2566 1.7 mrg if (compressed_size < 12 || memcmp (compressed, "ZLIB", 4) != 0) 2567 1.7 mrg return 1; 2568 1.7 mrg 2569 1.7 mrg sz = 0; 2570 1.7 mrg for (i = 0; i < 8; i++) 2571 1.7 mrg sz = (sz << 8) | compressed[i + 4]; 2572 1.7 mrg 2573 1.7 mrg if (*uncompressed != NULL && *uncompressed_size >= sz) 2574 1.7 mrg po = *uncompressed; 2575 1.7 mrg else 2576 1.7 mrg { 2577 1.7 mrg po = (unsigned char *) backtrace_alloc (state, sz, error_callback, data); 2578 1.7 mrg if (po == NULL) 2579 1.7 mrg return 0; 2580 1.7 mrg } 2581 1.7 mrg 2582 1.7 mrg if (!elf_zlib_inflate_and_verify (compressed + 12, compressed_size - 12, 2583 1.7 mrg zdebug_table, po, sz)) 2584 1.7 mrg return 1; 2585 1.7 mrg 2586 1.7 mrg *uncompressed = po; 2587 1.7 mrg *uncompressed_size = sz; 2588 1.7 mrg 2589 1.7 mrg return 1; 2590 1.7 mrg } 2591 1.7 mrg 2592 1.7 mrg /* Uncompress the new compressed debug format, the official standard 2593 1.7 mrg ELF approach emitted by --compress-debug-sections=zlib-gabi. The 2594 1.7 mrg compressed data is in COMPRESSED / COMPRESSED_SIZE, and the 2595 1.7 mrg function writes to *UNCOMPRESSED / *UNCOMPRESSED_SIZE. 2596 1.7 mrg ZDEBUG_TABLE is work space as for elf_uncompress_zdebug. Returns 0 2597 1.7 mrg on error, 1 on successful decompression or if something goes wrong. 2598 1.7 mrg In general we try to carry on, by returning 1, even if we can't 2599 1.7 mrg decompress. */ 2600 1.7 mrg 2601 1.7 mrg static int 2602 1.7 mrg elf_uncompress_chdr (struct backtrace_state *state, 2603 1.7 mrg const unsigned char *compressed, size_t compressed_size, 2604 1.7 mrg uint16_t *zdebug_table, 2605 1.7 mrg backtrace_error_callback error_callback, void *data, 2606 1.7 mrg unsigned char **uncompressed, size_t *uncompressed_size) 2607 1.7 mrg { 2608 1.7 mrg const b_elf_chdr *chdr; 2609 1.7 mrg unsigned char *po; 2610 1.7 mrg 2611 1.7 mrg *uncompressed = NULL; 2612 1.7 mrg *uncompressed_size = 0; 2613 1.7 mrg 2614 1.7 mrg /* The format starts with an ELF compression header. */ 2615 1.7 mrg if (compressed_size < sizeof (b_elf_chdr)) 2616 1.7 mrg return 1; 2617 1.7 mrg 2618 1.7 mrg chdr = (const b_elf_chdr *) compressed; 2619 1.7 mrg 2620 1.7 mrg if (chdr->ch_type != ELFCOMPRESS_ZLIB) 2621 1.7 mrg { 2622 1.7 mrg /* Unsupported compression algorithm. */ 2623 1.7 mrg return 1; 2624 1.7 mrg } 2625 1.7 mrg 2626 1.7 mrg if (*uncompressed != NULL && *uncompressed_size >= chdr->ch_size) 2627 1.7 mrg po = *uncompressed; 2628 1.7 mrg else 2629 1.7 mrg { 2630 1.7 mrg po = (unsigned char *) backtrace_alloc (state, chdr->ch_size, 2631 1.7 mrg error_callback, data); 2632 1.7 mrg if (po == NULL) 2633 1.7 mrg return 0; 2634 1.7 mrg } 2635 1.7 mrg 2636 1.7 mrg if (!elf_zlib_inflate_and_verify (compressed + sizeof (b_elf_chdr), 2637 1.7 mrg compressed_size - sizeof (b_elf_chdr), 2638 1.7 mrg zdebug_table, po, chdr->ch_size)) 2639 1.7 mrg return 1; 2640 1.7 mrg 2641 1.7 mrg *uncompressed = po; 2642 1.7 mrg *uncompressed_size = chdr->ch_size; 2643 1.7 mrg 2644 1.7 mrg return 1; 2645 1.7 mrg } 2646 1.7 mrg 2647 1.7 mrg /* This function is a hook for testing the zlib support. It is only 2648 1.7 mrg used by tests. */ 2649 1.7 mrg 2650 1.7 mrg int 2651 1.7 mrg backtrace_uncompress_zdebug (struct backtrace_state *state, 2652 1.7 mrg const unsigned char *compressed, 2653 1.7 mrg size_t compressed_size, 2654 1.7 mrg backtrace_error_callback error_callback, 2655 1.7 mrg void *data, unsigned char **uncompressed, 2656 1.7 mrg size_t *uncompressed_size) 2657 1.7 mrg { 2658 1.7 mrg uint16_t *zdebug_table; 2659 1.7 mrg int ret; 2660 1.7 mrg 2661 1.7 mrg zdebug_table = ((uint16_t *) backtrace_alloc (state, ZDEBUG_TABLE_SIZE, 2662 1.7 mrg error_callback, data)); 2663 1.7 mrg if (zdebug_table == NULL) 2664 1.7 mrg return 0; 2665 1.7 mrg ret = elf_uncompress_zdebug (state, compressed, compressed_size, 2666 1.7 mrg zdebug_table, error_callback, data, 2667 1.7 mrg uncompressed, uncompressed_size); 2668 1.7 mrg backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE, 2669 1.7 mrg error_callback, data); 2670 1.7 mrg return ret; 2671 1.7 mrg } 2672 1.7 mrg 2673 1.10 mrg /* Number of LZMA states. */ 2674 1.10 mrg #define LZMA_STATES (12) 2675 1.10 mrg 2676 1.10 mrg /* Number of LZMA position states. The pb value of the property byte 2677 1.10 mrg is the number of bits to include in these states, and the maximum 2678 1.10 mrg value of pb is 4. */ 2679 1.10 mrg #define LZMA_POS_STATES (16) 2680 1.10 mrg 2681 1.10 mrg /* Number of LZMA distance states. These are used match distances 2682 1.10 mrg with a short match length: up to 4 bytes. */ 2683 1.10 mrg #define LZMA_DIST_STATES (4) 2684 1.10 mrg 2685 1.10 mrg /* Number of LZMA distance slots. LZMA uses six bits to encode larger 2686 1.10 mrg match lengths, so 1 << 6 possible probabilities. */ 2687 1.10 mrg #define LZMA_DIST_SLOTS (64) 2688 1.10 mrg 2689 1.10 mrg /* LZMA distances 0 to 3 are encoded directly, larger values use a 2690 1.10 mrg probability model. */ 2691 1.10 mrg #define LZMA_DIST_MODEL_START (4) 2692 1.10 mrg 2693 1.10 mrg /* The LZMA probability model ends at 14. */ 2694 1.10 mrg #define LZMA_DIST_MODEL_END (14) 2695 1.10 mrg 2696 1.10 mrg /* LZMA distance slots for distances less than 127. */ 2697 1.10 mrg #define LZMA_FULL_DISTANCES (128) 2698 1.10 mrg 2699 1.10 mrg /* LZMA uses four alignment bits. */ 2700 1.10 mrg #define LZMA_ALIGN_SIZE (16) 2701 1.10 mrg 2702 1.10 mrg /* LZMA match length is encoded with 4, 5, or 10 bits, some of which 2703 1.10 mrg are already known. */ 2704 1.10 mrg #define LZMA_LEN_LOW_SYMBOLS (8) 2705 1.10 mrg #define LZMA_LEN_MID_SYMBOLS (8) 2706 1.10 mrg #define LZMA_LEN_HIGH_SYMBOLS (256) 2707 1.10 mrg 2708 1.10 mrg /* LZMA literal encoding. */ 2709 1.10 mrg #define LZMA_LITERAL_CODERS_MAX (16) 2710 1.10 mrg #define LZMA_LITERAL_CODER_SIZE (0x300) 2711 1.10 mrg 2712 1.10 mrg /* LZMA is based on a large set of probabilities, each managed 2713 1.10 mrg independently. Each probability is an 11 bit number that we store 2714 1.10 mrg in a uint16_t. We use a single large array of probabilities. */ 2715 1.10 mrg 2716 1.10 mrg /* Lengths of entries in the LZMA probabilities array. The names used 2717 1.10 mrg here are copied from the Linux kernel implementation. */ 2718 1.10 mrg 2719 1.10 mrg #define LZMA_PROB_IS_MATCH_LEN (LZMA_STATES * LZMA_POS_STATES) 2720 1.10 mrg #define LZMA_PROB_IS_REP_LEN LZMA_STATES 2721 1.10 mrg #define LZMA_PROB_IS_REP0_LEN LZMA_STATES 2722 1.10 mrg #define LZMA_PROB_IS_REP1_LEN LZMA_STATES 2723 1.10 mrg #define LZMA_PROB_IS_REP2_LEN LZMA_STATES 2724 1.10 mrg #define LZMA_PROB_IS_REP0_LONG_LEN (LZMA_STATES * LZMA_POS_STATES) 2725 1.10 mrg #define LZMA_PROB_DIST_SLOT_LEN (LZMA_DIST_STATES * LZMA_DIST_SLOTS) 2726 1.10 mrg #define LZMA_PROB_DIST_SPECIAL_LEN (LZMA_FULL_DISTANCES - LZMA_DIST_MODEL_END) 2727 1.10 mrg #define LZMA_PROB_DIST_ALIGN_LEN LZMA_ALIGN_SIZE 2728 1.10 mrg #define LZMA_PROB_MATCH_LEN_CHOICE_LEN 1 2729 1.10 mrg #define LZMA_PROB_MATCH_LEN_CHOICE2_LEN 1 2730 1.10 mrg #define LZMA_PROB_MATCH_LEN_LOW_LEN (LZMA_POS_STATES * LZMA_LEN_LOW_SYMBOLS) 2731 1.10 mrg #define LZMA_PROB_MATCH_LEN_MID_LEN (LZMA_POS_STATES * LZMA_LEN_MID_SYMBOLS) 2732 1.10 mrg #define LZMA_PROB_MATCH_LEN_HIGH_LEN LZMA_LEN_HIGH_SYMBOLS 2733 1.10 mrg #define LZMA_PROB_REP_LEN_CHOICE_LEN 1 2734 1.10 mrg #define LZMA_PROB_REP_LEN_CHOICE2_LEN 1 2735 1.10 mrg #define LZMA_PROB_REP_LEN_LOW_LEN (LZMA_POS_STATES * LZMA_LEN_LOW_SYMBOLS) 2736 1.10 mrg #define LZMA_PROB_REP_LEN_MID_LEN (LZMA_POS_STATES * LZMA_LEN_MID_SYMBOLS) 2737 1.10 mrg #define LZMA_PROB_REP_LEN_HIGH_LEN LZMA_LEN_HIGH_SYMBOLS 2738 1.10 mrg #define LZMA_PROB_LITERAL_LEN \ 2739 1.10 mrg (LZMA_LITERAL_CODERS_MAX * LZMA_LITERAL_CODER_SIZE) 2740 1.10 mrg 2741 1.10 mrg /* Offsets into the LZMA probabilities array. This is mechanically 2742 1.10 mrg generated from the above lengths. */ 2743 1.10 mrg 2744 1.10 mrg #define LZMA_PROB_IS_MATCH_OFFSET 0 2745 1.10 mrg #define LZMA_PROB_IS_REP_OFFSET \ 2746 1.10 mrg (LZMA_PROB_IS_MATCH_OFFSET + LZMA_PROB_IS_MATCH_LEN) 2747 1.10 mrg #define LZMA_PROB_IS_REP0_OFFSET \ 2748 1.10 mrg (LZMA_PROB_IS_REP_OFFSET + LZMA_PROB_IS_REP_LEN) 2749 1.10 mrg #define LZMA_PROB_IS_REP1_OFFSET \ 2750 1.10 mrg (LZMA_PROB_IS_REP0_OFFSET + LZMA_PROB_IS_REP0_LEN) 2751 1.10 mrg #define LZMA_PROB_IS_REP2_OFFSET \ 2752 1.10 mrg (LZMA_PROB_IS_REP1_OFFSET + LZMA_PROB_IS_REP1_LEN) 2753 1.10 mrg #define LZMA_PROB_IS_REP0_LONG_OFFSET \ 2754 1.10 mrg (LZMA_PROB_IS_REP2_OFFSET + LZMA_PROB_IS_REP2_LEN) 2755 1.10 mrg #define LZMA_PROB_DIST_SLOT_OFFSET \ 2756 1.10 mrg (LZMA_PROB_IS_REP0_LONG_OFFSET + LZMA_PROB_IS_REP0_LONG_LEN) 2757 1.10 mrg #define LZMA_PROB_DIST_SPECIAL_OFFSET \ 2758 1.10 mrg (LZMA_PROB_DIST_SLOT_OFFSET + LZMA_PROB_DIST_SLOT_LEN) 2759 1.10 mrg #define LZMA_PROB_DIST_ALIGN_OFFSET \ 2760 1.10 mrg (LZMA_PROB_DIST_SPECIAL_OFFSET + LZMA_PROB_DIST_SPECIAL_LEN) 2761 1.10 mrg #define LZMA_PROB_MATCH_LEN_CHOICE_OFFSET \ 2762 1.10 mrg (LZMA_PROB_DIST_ALIGN_OFFSET + LZMA_PROB_DIST_ALIGN_LEN) 2763 1.10 mrg #define LZMA_PROB_MATCH_LEN_CHOICE2_OFFSET \ 2764 1.10 mrg (LZMA_PROB_MATCH_LEN_CHOICE_OFFSET + LZMA_PROB_MATCH_LEN_CHOICE_LEN) 2765 1.10 mrg #define LZMA_PROB_MATCH_LEN_LOW_OFFSET \ 2766 1.10 mrg (LZMA_PROB_MATCH_LEN_CHOICE2_OFFSET + LZMA_PROB_MATCH_LEN_CHOICE2_LEN) 2767 1.10 mrg #define LZMA_PROB_MATCH_LEN_MID_OFFSET \ 2768 1.10 mrg (LZMA_PROB_MATCH_LEN_LOW_OFFSET + LZMA_PROB_MATCH_LEN_LOW_LEN) 2769 1.10 mrg #define LZMA_PROB_MATCH_LEN_HIGH_OFFSET \ 2770 1.10 mrg (LZMA_PROB_MATCH_LEN_MID_OFFSET + LZMA_PROB_MATCH_LEN_MID_LEN) 2771 1.10 mrg #define LZMA_PROB_REP_LEN_CHOICE_OFFSET \ 2772 1.10 mrg (LZMA_PROB_MATCH_LEN_HIGH_OFFSET + LZMA_PROB_MATCH_LEN_HIGH_LEN) 2773 1.10 mrg #define LZMA_PROB_REP_LEN_CHOICE2_OFFSET \ 2774 1.10 mrg (LZMA_PROB_REP_LEN_CHOICE_OFFSET + LZMA_PROB_REP_LEN_CHOICE_LEN) 2775 1.10 mrg #define LZMA_PROB_REP_LEN_LOW_OFFSET \ 2776 1.10 mrg (LZMA_PROB_REP_LEN_CHOICE2_OFFSET + LZMA_PROB_REP_LEN_CHOICE2_LEN) 2777 1.10 mrg #define LZMA_PROB_REP_LEN_MID_OFFSET \ 2778 1.10 mrg (LZMA_PROB_REP_LEN_LOW_OFFSET + LZMA_PROB_REP_LEN_LOW_LEN) 2779 1.10 mrg #define LZMA_PROB_REP_LEN_HIGH_OFFSET \ 2780 1.10 mrg (LZMA_PROB_REP_LEN_MID_OFFSET + LZMA_PROB_REP_LEN_MID_LEN) 2781 1.10 mrg #define LZMA_PROB_LITERAL_OFFSET \ 2782 1.10 mrg (LZMA_PROB_REP_LEN_HIGH_OFFSET + LZMA_PROB_REP_LEN_HIGH_LEN) 2783 1.7 mrg 2784 1.10 mrg #define LZMA_PROB_TOTAL_COUNT \ 2785 1.10 mrg (LZMA_PROB_LITERAL_OFFSET + LZMA_PROB_LITERAL_LEN) 2786 1.7 mrg 2787 1.10 mrg /* Check that the number of LZMA probabilities is the same as the 2788 1.10 mrg Linux kernel implementation. */ 2789 1.7 mrg 2790 1.10 mrg #if LZMA_PROB_TOTAL_COUNT != 1846 + (1 << 4) * 0x300 2791 1.10 mrg #error Wrong number of LZMA probabilities 2792 1.10 mrg #endif 2793 1.7 mrg 2794 1.10 mrg /* Expressions for the offset in the LZMA probabilities array of a 2795 1.10 mrg specific probability. */ 2796 1.7 mrg 2797 1.10 mrg #define LZMA_IS_MATCH(state, pos) \ 2798 1.10 mrg (LZMA_PROB_IS_MATCH_OFFSET + (state) * LZMA_POS_STATES + (pos)) 2799 1.10 mrg #define LZMA_IS_REP(state) \ 2800 1.10 mrg (LZMA_PROB_IS_REP_OFFSET + (state)) 2801 1.10 mrg #define LZMA_IS_REP0(state) \ 2802 1.10 mrg (LZMA_PROB_IS_REP0_OFFSET + (state)) 2803 1.10 mrg #define LZMA_IS_REP1(state) \ 2804 1.10 mrg (LZMA_PROB_IS_REP1_OFFSET + (state)) 2805 1.10 mrg #define LZMA_IS_REP2(state) \ 2806 1.10 mrg (LZMA_PROB_IS_REP2_OFFSET + (state)) 2807 1.10 mrg #define LZMA_IS_REP0_LONG(state, pos) \ 2808 1.10 mrg (LZMA_PROB_IS_REP0_LONG_OFFSET + (state) * LZMA_POS_STATES + (pos)) 2809 1.10 mrg #define LZMA_DIST_SLOT(dist, slot) \ 2810 1.10 mrg (LZMA_PROB_DIST_SLOT_OFFSET + (dist) * LZMA_DIST_SLOTS + (slot)) 2811 1.10 mrg #define LZMA_DIST_SPECIAL(dist) \ 2812 1.10 mrg (LZMA_PROB_DIST_SPECIAL_OFFSET + (dist)) 2813 1.10 mrg #define LZMA_DIST_ALIGN(dist) \ 2814 1.10 mrg (LZMA_PROB_DIST_ALIGN_OFFSET + (dist)) 2815 1.10 mrg #define LZMA_MATCH_LEN_CHOICE \ 2816 1.10 mrg LZMA_PROB_MATCH_LEN_CHOICE_OFFSET 2817 1.10 mrg #define LZMA_MATCH_LEN_CHOICE2 \ 2818 1.10 mrg LZMA_PROB_MATCH_LEN_CHOICE2_OFFSET 2819 1.10 mrg #define LZMA_MATCH_LEN_LOW(pos, sym) \ 2820 1.10 mrg (LZMA_PROB_MATCH_LEN_LOW_OFFSET + (pos) * LZMA_LEN_LOW_SYMBOLS + (sym)) 2821 1.10 mrg #define LZMA_MATCH_LEN_MID(pos, sym) \ 2822 1.10 mrg (LZMA_PROB_MATCH_LEN_MID_OFFSET + (pos) * LZMA_LEN_MID_SYMBOLS + (sym)) 2823 1.10 mrg #define LZMA_MATCH_LEN_HIGH(sym) \ 2824 1.10 mrg (LZMA_PROB_MATCH_LEN_HIGH_OFFSET + (sym)) 2825 1.10 mrg #define LZMA_REP_LEN_CHOICE \ 2826 1.10 mrg LZMA_PROB_REP_LEN_CHOICE_OFFSET 2827 1.10 mrg #define LZMA_REP_LEN_CHOICE2 \ 2828 1.10 mrg LZMA_PROB_REP_LEN_CHOICE2_OFFSET 2829 1.10 mrg #define LZMA_REP_LEN_LOW(pos, sym) \ 2830 1.10 mrg (LZMA_PROB_REP_LEN_LOW_OFFSET + (pos) * LZMA_LEN_LOW_SYMBOLS + (sym)) 2831 1.10 mrg #define LZMA_REP_LEN_MID(pos, sym) \ 2832 1.10 mrg (LZMA_PROB_REP_LEN_MID_OFFSET + (pos) * LZMA_LEN_MID_SYMBOLS + (sym)) 2833 1.10 mrg #define LZMA_REP_LEN_HIGH(sym) \ 2834 1.10 mrg (LZMA_PROB_REP_LEN_HIGH_OFFSET + (sym)) 2835 1.10 mrg #define LZMA_LITERAL(code, size) \ 2836 1.10 mrg (LZMA_PROB_LITERAL_OFFSET + (code) * LZMA_LITERAL_CODER_SIZE + (size)) 2837 1.7 mrg 2838 1.10 mrg /* Read an LZMA varint from BUF, reading and updating *POFFSET, 2839 1.10 mrg setting *VAL. Returns 0 on error, 1 on success. */ 2840 1.7 mrg 2841 1.10 mrg static int 2842 1.10 mrg elf_lzma_varint (const unsigned char *compressed, size_t compressed_size, 2843 1.10 mrg size_t *poffset, uint64_t *val) 2844 1.10 mrg { 2845 1.10 mrg size_t off; 2846 1.10 mrg int i; 2847 1.10 mrg uint64_t v; 2848 1.10 mrg unsigned char b; 2849 1.10 mrg 2850 1.10 mrg off = *poffset; 2851 1.10 mrg i = 0; 2852 1.10 mrg v = 0; 2853 1.10 mrg while (1) 2854 1.7 mrg { 2855 1.10 mrg if (unlikely (off >= compressed_size)) 2856 1.10 mrg { 2857 1.10 mrg elf_uncompress_failed (); 2858 1.10 mrg return 0; 2859 1.10 mrg } 2860 1.10 mrg b = compressed[off]; 2861 1.10 mrg v |= (b & 0x7f) << (i * 7); 2862 1.10 mrg ++off; 2863 1.10 mrg if ((b & 0x80) == 0) 2864 1.10 mrg { 2865 1.10 mrg *poffset = off; 2866 1.10 mrg *val = v; 2867 1.10 mrg return 1; 2868 1.10 mrg } 2869 1.10 mrg ++i; 2870 1.10 mrg if (unlikely (i >= 9)) 2871 1.10 mrg { 2872 1.10 mrg elf_uncompress_failed (); 2873 1.10 mrg return 0; 2874 1.10 mrg } 2875 1.7 mrg } 2876 1.10 mrg } 2877 1.10 mrg 2878 1.10 mrg /* Normalize the LZMA range decoder, pulling in an extra input byte if 2879 1.10 mrg needed. */ 2880 1.10 mrg 2881 1.10 mrg static void 2882 1.10 mrg elf_lzma_range_normalize (const unsigned char *compressed, 2883 1.10 mrg size_t compressed_size, size_t *poffset, 2884 1.10 mrg uint32_t *prange, uint32_t *pcode) 2885 1.10 mrg { 2886 1.10 mrg if (*prange < (1U << 24)) 2887 1.10 mrg { 2888 1.10 mrg if (unlikely (*poffset >= compressed_size)) 2889 1.10 mrg { 2890 1.10 mrg /* We assume this will be caught elsewhere. */ 2891 1.10 mrg elf_uncompress_failed (); 2892 1.10 mrg return; 2893 1.10 mrg } 2894 1.10 mrg *prange <<= 8; 2895 1.10 mrg *pcode <<= 8; 2896 1.10 mrg *pcode += compressed[*poffset]; 2897 1.10 mrg ++*poffset; 2898 1.7 mrg } 2899 1.10 mrg } 2900 1.7 mrg 2901 1.10 mrg /* Read and return a single bit from the LZMA stream, reading and 2902 1.10 mrg updating *PROB. Each bit comes from the range coder. */ 2903 1.7 mrg 2904 1.10 mrg static int 2905 1.10 mrg elf_lzma_bit (const unsigned char *compressed, size_t compressed_size, 2906 1.10 mrg uint16_t *prob, size_t *poffset, uint32_t *prange, 2907 1.10 mrg uint32_t *pcode) 2908 1.10 mrg { 2909 1.10 mrg uint32_t bound; 2910 1.10 mrg 2911 1.10 mrg elf_lzma_range_normalize (compressed, compressed_size, poffset, 2912 1.10 mrg prange, pcode); 2913 1.10 mrg bound = (*prange >> 11) * (uint32_t) *prob; 2914 1.10 mrg if (*pcode < bound) 2915 1.7 mrg { 2916 1.10 mrg *prange = bound; 2917 1.10 mrg *prob += ((1U << 11) - *prob) >> 5; 2918 1.10 mrg return 0; 2919 1.7 mrg } 2920 1.10 mrg else 2921 1.7 mrg { 2922 1.10 mrg *prange -= bound; 2923 1.10 mrg *pcode -= bound; 2924 1.10 mrg *prob -= *prob >> 5; 2925 1.10 mrg return 1; 2926 1.7 mrg } 2927 1.10 mrg } 2928 1.7 mrg 2929 1.10 mrg /* Read an integer of size BITS from the LZMA stream, most significant 2930 1.10 mrg bit first. The bits are predicted using PROBS. */ 2931 1.7 mrg 2932 1.10 mrg static uint32_t 2933 1.10 mrg elf_lzma_integer (const unsigned char *compressed, size_t compressed_size, 2934 1.10 mrg uint16_t *probs, uint32_t bits, size_t *poffset, 2935 1.10 mrg uint32_t *prange, uint32_t *pcode) 2936 1.10 mrg { 2937 1.10 mrg uint32_t sym; 2938 1.10 mrg uint32_t i; 2939 1.7 mrg 2940 1.10 mrg sym = 1; 2941 1.10 mrg for (i = 0; i < bits; i++) 2942 1.7 mrg { 2943 1.10 mrg int bit; 2944 1.10 mrg 2945 1.10 mrg bit = elf_lzma_bit (compressed, compressed_size, probs + sym, poffset, 2946 1.10 mrg prange, pcode); 2947 1.10 mrg sym <<= 1; 2948 1.10 mrg sym += bit; 2949 1.10 mrg } 2950 1.10 mrg return sym - (1 << bits); 2951 1.10 mrg } 2952 1.7 mrg 2953 1.10 mrg /* Read an integer of size BITS from the LZMA stream, least 2954 1.10 mrg significant bit first. The bits are predicted using PROBS. */ 2955 1.7 mrg 2956 1.10 mrg static uint32_t 2957 1.10 mrg elf_lzma_reverse_integer (const unsigned char *compressed, 2958 1.10 mrg size_t compressed_size, uint16_t *probs, 2959 1.10 mrg uint32_t bits, size_t *poffset, uint32_t *prange, 2960 1.10 mrg uint32_t *pcode) 2961 1.10 mrg { 2962 1.10 mrg uint32_t sym; 2963 1.10 mrg uint32_t val; 2964 1.10 mrg uint32_t i; 2965 1.10 mrg 2966 1.10 mrg sym = 1; 2967 1.10 mrg val = 0; 2968 1.10 mrg for (i = 0; i < bits; i++) 2969 1.10 mrg { 2970 1.10 mrg int bit; 2971 1.10 mrg 2972 1.10 mrg bit = elf_lzma_bit (compressed, compressed_size, probs + sym, poffset, 2973 1.10 mrg prange, pcode); 2974 1.10 mrg sym <<= 1; 2975 1.10 mrg sym += bit; 2976 1.10 mrg val += bit << i; 2977 1.10 mrg } 2978 1.10 mrg return val; 2979 1.10 mrg } 2980 1.7 mrg 2981 1.10 mrg /* Read a length from the LZMA stream. IS_REP picks either LZMA_MATCH 2982 1.10 mrg or LZMA_REP probabilities. */ 2983 1.7 mrg 2984 1.10 mrg static uint32_t 2985 1.10 mrg elf_lzma_len (const unsigned char *compressed, size_t compressed_size, 2986 1.10 mrg uint16_t *probs, int is_rep, unsigned int pos_state, 2987 1.10 mrg size_t *poffset, uint32_t *prange, uint32_t *pcode) 2988 1.10 mrg { 2989 1.10 mrg uint16_t *probs_choice; 2990 1.10 mrg uint16_t *probs_sym; 2991 1.10 mrg uint32_t bits; 2992 1.10 mrg uint32_t len; 2993 1.10 mrg 2994 1.10 mrg probs_choice = probs + (is_rep 2995 1.10 mrg ? LZMA_REP_LEN_CHOICE 2996 1.10 mrg : LZMA_MATCH_LEN_CHOICE); 2997 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, probs_choice, poffset, 2998 1.10 mrg prange, pcode)) 2999 1.10 mrg { 3000 1.10 mrg probs_choice = probs + (is_rep 3001 1.10 mrg ? LZMA_REP_LEN_CHOICE2 3002 1.10 mrg : LZMA_MATCH_LEN_CHOICE2); 3003 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, probs_choice, 3004 1.10 mrg poffset, prange, pcode)) 3005 1.10 mrg { 3006 1.10 mrg probs_sym = probs + (is_rep 3007 1.10 mrg ? LZMA_REP_LEN_HIGH (0) 3008 1.10 mrg : LZMA_MATCH_LEN_HIGH (0)); 3009 1.10 mrg bits = 8; 3010 1.10 mrg len = 2 + 8 + 8; 3011 1.10 mrg } 3012 1.10 mrg else 3013 1.7 mrg { 3014 1.10 mrg probs_sym = probs + (is_rep 3015 1.10 mrg ? LZMA_REP_LEN_MID (pos_state, 0) 3016 1.10 mrg : LZMA_MATCH_LEN_MID (pos_state, 0)); 3017 1.10 mrg bits = 3; 3018 1.10 mrg len = 2 + 8; 3019 1.7 mrg } 3020 1.10 mrg } 3021 1.10 mrg else 3022 1.10 mrg { 3023 1.10 mrg probs_sym = probs + (is_rep 3024 1.10 mrg ? LZMA_REP_LEN_LOW (pos_state, 0) 3025 1.10 mrg : LZMA_MATCH_LEN_LOW (pos_state, 0)); 3026 1.10 mrg bits = 3; 3027 1.10 mrg len = 2; 3028 1.7 mrg } 3029 1.7 mrg 3030 1.10 mrg len += elf_lzma_integer (compressed, compressed_size, probs_sym, bits, 3031 1.10 mrg poffset, prange, pcode); 3032 1.10 mrg return len; 3033 1.10 mrg } 3034 1.7 mrg 3035 1.10 mrg /* Uncompress one LZMA block from a minidebug file. The compressed 3036 1.10 mrg data is at COMPRESSED + *POFFSET. Update *POFFSET. Store the data 3037 1.10 mrg into the memory at UNCOMPRESSED, size UNCOMPRESSED_SIZE. CHECK is 3038 1.10 mrg the stream flag from the xz header. Return 1 on successful 3039 1.10 mrg decompression. */ 3040 1.7 mrg 3041 1.10 mrg static int 3042 1.10 mrg elf_uncompress_lzma_block (const unsigned char *compressed, 3043 1.10 mrg size_t compressed_size, unsigned char check, 3044 1.10 mrg uint16_t *probs, unsigned char *uncompressed, 3045 1.10 mrg size_t uncompressed_size, size_t *poffset) 3046 1.10 mrg { 3047 1.10 mrg size_t off; 3048 1.10 mrg size_t block_header_offset; 3049 1.10 mrg size_t block_header_size; 3050 1.10 mrg unsigned char block_flags; 3051 1.10 mrg uint64_t header_compressed_size; 3052 1.10 mrg uint64_t header_uncompressed_size; 3053 1.10 mrg unsigned char lzma2_properties; 3054 1.10 mrg uint32_t computed_crc; 3055 1.10 mrg uint32_t stream_crc; 3056 1.10 mrg size_t uncompressed_offset; 3057 1.10 mrg size_t dict_start_offset; 3058 1.10 mrg unsigned int lc; 3059 1.10 mrg unsigned int lp; 3060 1.10 mrg unsigned int pb; 3061 1.10 mrg uint32_t range; 3062 1.10 mrg uint32_t code; 3063 1.10 mrg uint32_t lstate; 3064 1.10 mrg uint32_t dist[4]; 3065 1.7 mrg 3066 1.10 mrg off = *poffset; 3067 1.10 mrg block_header_offset = off; 3068 1.7 mrg 3069 1.10 mrg /* Block header size is a single byte. */ 3070 1.10 mrg if (unlikely (off >= compressed_size)) 3071 1.10 mrg { 3072 1.10 mrg elf_uncompress_failed (); 3073 1.10 mrg return 0; 3074 1.10 mrg } 3075 1.10 mrg block_header_size = (compressed[off] + 1) * 4; 3076 1.10 mrg if (unlikely (off + block_header_size > compressed_size)) 3077 1.10 mrg { 3078 1.10 mrg elf_uncompress_failed (); 3079 1.10 mrg return 0; 3080 1.10 mrg } 3081 1.7 mrg 3082 1.10 mrg /* Block flags. */ 3083 1.10 mrg block_flags = compressed[off + 1]; 3084 1.10 mrg if (unlikely ((block_flags & 0x3c) != 0)) 3085 1.10 mrg { 3086 1.10 mrg elf_uncompress_failed (); 3087 1.10 mrg return 0; 3088 1.10 mrg } 3089 1.7 mrg 3090 1.10 mrg off += 2; 3091 1.7 mrg 3092 1.10 mrg /* Optional compressed size. */ 3093 1.10 mrg header_compressed_size = 0; 3094 1.10 mrg if ((block_flags & 0x40) != 0) 3095 1.10 mrg { 3096 1.10 mrg *poffset = off; 3097 1.10 mrg if (!elf_lzma_varint (compressed, compressed_size, poffset, 3098 1.10 mrg &header_compressed_size)) 3099 1.10 mrg return 0; 3100 1.10 mrg off = *poffset; 3101 1.10 mrg } 3102 1.7 mrg 3103 1.10 mrg /* Optional uncompressed size. */ 3104 1.10 mrg header_uncompressed_size = 0; 3105 1.10 mrg if ((block_flags & 0x80) != 0) 3106 1.7 mrg { 3107 1.10 mrg *poffset = off; 3108 1.10 mrg if (!elf_lzma_varint (compressed, compressed_size, poffset, 3109 1.10 mrg &header_uncompressed_size)) 3110 1.10 mrg return 0; 3111 1.10 mrg off = *poffset; 3112 1.10 mrg } 3113 1.1 mrg 3114 1.10 mrg /* The recipe for creating a minidebug file is to run the xz program 3115 1.10 mrg with no arguments, so we expect exactly one filter: lzma2. */ 3116 1.1 mrg 3117 1.10 mrg if (unlikely ((block_flags & 0x3) != 0)) 3118 1.10 mrg { 3119 1.10 mrg elf_uncompress_failed (); 3120 1.10 mrg return 0; 3121 1.10 mrg } 3122 1.1 mrg 3123 1.10 mrg if (unlikely (off + 2 >= block_header_offset + block_header_size)) 3124 1.10 mrg { 3125 1.10 mrg elf_uncompress_failed (); 3126 1.10 mrg return 0; 3127 1.10 mrg } 3128 1.10 mrg 3129 1.10 mrg /* The filter ID for LZMA2 is 0x21. */ 3130 1.10 mrg if (unlikely (compressed[off] != 0x21)) 3131 1.10 mrg { 3132 1.10 mrg elf_uncompress_failed (); 3133 1.10 mrg return 0; 3134 1.10 mrg } 3135 1.10 mrg ++off; 3136 1.10 mrg 3137 1.10 mrg /* The size of the filter properties for LZMA2 is 1. */ 3138 1.10 mrg if (unlikely (compressed[off] != 1)) 3139 1.10 mrg { 3140 1.10 mrg elf_uncompress_failed (); 3141 1.10 mrg return 0; 3142 1.10 mrg } 3143 1.10 mrg ++off; 3144 1.10 mrg 3145 1.10 mrg lzma2_properties = compressed[off]; 3146 1.10 mrg ++off; 3147 1.10 mrg 3148 1.10 mrg if (unlikely (lzma2_properties > 40)) 3149 1.10 mrg { 3150 1.10 mrg elf_uncompress_failed (); 3151 1.10 mrg return 0; 3152 1.10 mrg } 3153 1.10 mrg 3154 1.10 mrg /* The properties describe the dictionary size, but we don't care 3155 1.10 mrg what that is. */ 3156 1.10 mrg 3157 1.10 mrg /* Block header padding. */ 3158 1.10 mrg if (unlikely (off + 4 > compressed_size)) 3159 1.10 mrg { 3160 1.10 mrg elf_uncompress_failed (); 3161 1.10 mrg return 0; 3162 1.10 mrg } 3163 1.10 mrg 3164 1.10 mrg off = (off + 3) &~ (size_t) 3; 3165 1.10 mrg 3166 1.10 mrg if (unlikely (off + 4 > compressed_size)) 3167 1.10 mrg { 3168 1.10 mrg elf_uncompress_failed (); 3169 1.10 mrg return 0; 3170 1.10 mrg } 3171 1.10 mrg 3172 1.10 mrg /* Block header CRC. */ 3173 1.10 mrg computed_crc = elf_crc32 (0, compressed + block_header_offset, 3174 1.10 mrg block_header_size - 4); 3175 1.10 mrg stream_crc = ((uint32_t)compressed[off] 3176 1.10 mrg | ((uint32_t)compressed[off + 1] << 8) 3177 1.10 mrg | ((uint32_t)compressed[off + 2] << 16) 3178 1.10 mrg | ((uint32_t)compressed[off + 3] << 24)); 3179 1.10 mrg if (unlikely (computed_crc != stream_crc)) 3180 1.10 mrg { 3181 1.10 mrg elf_uncompress_failed (); 3182 1.10 mrg return 0; 3183 1.10 mrg } 3184 1.10 mrg off += 4; 3185 1.10 mrg 3186 1.10 mrg /* Read a sequence of LZMA2 packets. */ 3187 1.10 mrg 3188 1.10 mrg uncompressed_offset = 0; 3189 1.10 mrg dict_start_offset = 0; 3190 1.10 mrg lc = 0; 3191 1.10 mrg lp = 0; 3192 1.10 mrg pb = 0; 3193 1.10 mrg lstate = 0; 3194 1.10 mrg while (off < compressed_size) 3195 1.10 mrg { 3196 1.10 mrg unsigned char control; 3197 1.10 mrg 3198 1.10 mrg range = 0xffffffff; 3199 1.10 mrg code = 0; 3200 1.10 mrg 3201 1.10 mrg control = compressed[off]; 3202 1.10 mrg ++off; 3203 1.10 mrg if (unlikely (control == 0)) 3204 1.10 mrg { 3205 1.10 mrg /* End of packets. */ 3206 1.10 mrg break; 3207 1.10 mrg } 3208 1.10 mrg 3209 1.10 mrg if (control == 1 || control >= 0xe0) 3210 1.10 mrg { 3211 1.10 mrg /* Reset dictionary to empty. */ 3212 1.10 mrg dict_start_offset = uncompressed_offset; 3213 1.10 mrg } 3214 1.10 mrg 3215 1.10 mrg if (control < 0x80) 3216 1.10 mrg { 3217 1.10 mrg size_t chunk_size; 3218 1.10 mrg 3219 1.10 mrg /* The only valid values here are 1 or 2. A 1 means to 3220 1.10 mrg reset the dictionary (done above). Then we see an 3221 1.10 mrg uncompressed chunk. */ 3222 1.10 mrg 3223 1.10 mrg if (unlikely (control > 2)) 3224 1.10 mrg { 3225 1.10 mrg elf_uncompress_failed (); 3226 1.10 mrg return 0; 3227 1.10 mrg } 3228 1.10 mrg 3229 1.10 mrg /* An uncompressed chunk is a two byte size followed by 3230 1.10 mrg data. */ 3231 1.10 mrg 3232 1.10 mrg if (unlikely (off + 2 > compressed_size)) 3233 1.10 mrg { 3234 1.10 mrg elf_uncompress_failed (); 3235 1.10 mrg return 0; 3236 1.10 mrg } 3237 1.10 mrg 3238 1.10 mrg chunk_size = compressed[off] << 8; 3239 1.10 mrg chunk_size += compressed[off + 1]; 3240 1.10 mrg ++chunk_size; 3241 1.10 mrg 3242 1.10 mrg off += 2; 3243 1.10 mrg 3244 1.10 mrg if (unlikely (off + chunk_size > compressed_size)) 3245 1.10 mrg { 3246 1.10 mrg elf_uncompress_failed (); 3247 1.10 mrg return 0; 3248 1.10 mrg } 3249 1.10 mrg if (unlikely (uncompressed_offset + chunk_size > uncompressed_size)) 3250 1.10 mrg { 3251 1.10 mrg elf_uncompress_failed (); 3252 1.10 mrg return 0; 3253 1.10 mrg } 3254 1.10 mrg 3255 1.10 mrg memcpy (uncompressed + uncompressed_offset, compressed + off, 3256 1.10 mrg chunk_size); 3257 1.10 mrg uncompressed_offset += chunk_size; 3258 1.10 mrg off += chunk_size; 3259 1.10 mrg } 3260 1.10 mrg else 3261 1.10 mrg { 3262 1.10 mrg size_t uncompressed_chunk_start; 3263 1.10 mrg size_t uncompressed_chunk_size; 3264 1.10 mrg size_t compressed_chunk_size; 3265 1.10 mrg size_t limit; 3266 1.10 mrg 3267 1.10 mrg /* An LZMA chunk. This starts with an uncompressed size and 3268 1.10 mrg a compressed size. */ 3269 1.10 mrg 3270 1.10 mrg if (unlikely (off + 4 >= compressed_size)) 3271 1.10 mrg { 3272 1.10 mrg elf_uncompress_failed (); 3273 1.10 mrg return 0; 3274 1.10 mrg } 3275 1.10 mrg 3276 1.10 mrg uncompressed_chunk_start = uncompressed_offset; 3277 1.10 mrg 3278 1.10 mrg uncompressed_chunk_size = (control & 0x1f) << 16; 3279 1.10 mrg uncompressed_chunk_size += compressed[off] << 8; 3280 1.10 mrg uncompressed_chunk_size += compressed[off + 1]; 3281 1.10 mrg ++uncompressed_chunk_size; 3282 1.10 mrg 3283 1.10 mrg compressed_chunk_size = compressed[off + 2] << 8; 3284 1.10 mrg compressed_chunk_size += compressed[off + 3]; 3285 1.10 mrg ++compressed_chunk_size; 3286 1.10 mrg 3287 1.10 mrg off += 4; 3288 1.10 mrg 3289 1.10 mrg /* Bit 7 (0x80) is set. 3290 1.10 mrg Bits 6 and 5 (0x40 and 0x20) are as follows: 3291 1.10 mrg 0: don't reset anything 3292 1.10 mrg 1: reset state 3293 1.10 mrg 2: reset state, read properties 3294 1.10 mrg 3: reset state, read properties, reset dictionary (done above) */ 3295 1.10 mrg 3296 1.10 mrg if (control >= 0xc0) 3297 1.10 mrg { 3298 1.10 mrg unsigned char props; 3299 1.10 mrg 3300 1.10 mrg /* Bit 6 is set, read properties. */ 3301 1.10 mrg 3302 1.10 mrg if (unlikely (off >= compressed_size)) 3303 1.10 mrg { 3304 1.10 mrg elf_uncompress_failed (); 3305 1.10 mrg return 0; 3306 1.10 mrg } 3307 1.10 mrg props = compressed[off]; 3308 1.10 mrg ++off; 3309 1.10 mrg if (unlikely (props > (4 * 5 + 4) * 9 + 8)) 3310 1.10 mrg { 3311 1.10 mrg elf_uncompress_failed (); 3312 1.10 mrg return 0; 3313 1.10 mrg } 3314 1.10 mrg pb = 0; 3315 1.10 mrg while (props >= 9 * 5) 3316 1.10 mrg { 3317 1.10 mrg props -= 9 * 5; 3318 1.10 mrg ++pb; 3319 1.10 mrg } 3320 1.10 mrg lp = 0; 3321 1.10 mrg while (props > 9) 3322 1.10 mrg { 3323 1.10 mrg props -= 9; 3324 1.10 mrg ++lp; 3325 1.10 mrg } 3326 1.10 mrg lc = props; 3327 1.10 mrg if (unlikely (lc + lp > 4)) 3328 1.10 mrg { 3329 1.10 mrg elf_uncompress_failed (); 3330 1.10 mrg return 0; 3331 1.10 mrg } 3332 1.10 mrg } 3333 1.10 mrg 3334 1.10 mrg if (control >= 0xa0) 3335 1.10 mrg { 3336 1.10 mrg size_t i; 3337 1.10 mrg 3338 1.10 mrg /* Bit 5 or 6 is set, reset LZMA state. */ 3339 1.10 mrg 3340 1.10 mrg lstate = 0; 3341 1.10 mrg memset (&dist, 0, sizeof dist); 3342 1.10 mrg for (i = 0; i < LZMA_PROB_TOTAL_COUNT; i++) 3343 1.10 mrg probs[i] = 1 << 10; 3344 1.10 mrg range = 0xffffffff; 3345 1.10 mrg code = 0; 3346 1.10 mrg } 3347 1.10 mrg 3348 1.10 mrg /* Read the range code. */ 3349 1.10 mrg 3350 1.10 mrg if (unlikely (off + 5 > compressed_size)) 3351 1.10 mrg { 3352 1.10 mrg elf_uncompress_failed (); 3353 1.10 mrg return 0; 3354 1.10 mrg } 3355 1.10 mrg 3356 1.10 mrg /* The byte at compressed[off] is ignored for some 3357 1.10 mrg reason. */ 3358 1.10 mrg 3359 1.10 mrg code = ((compressed[off + 1] << 24) 3360 1.10 mrg + (compressed[off + 2] << 16) 3361 1.10 mrg + (compressed[off + 3] << 8) 3362 1.10 mrg + compressed[off + 4]); 3363 1.10 mrg off += 5; 3364 1.10 mrg 3365 1.10 mrg /* This is the main LZMA decode loop. */ 3366 1.10 mrg 3367 1.10 mrg limit = off + compressed_chunk_size; 3368 1.10 mrg *poffset = off; 3369 1.10 mrg while (*poffset < limit) 3370 1.10 mrg { 3371 1.10 mrg unsigned int pos_state; 3372 1.10 mrg 3373 1.10 mrg if (unlikely (uncompressed_offset 3374 1.10 mrg == (uncompressed_chunk_start 3375 1.10 mrg + uncompressed_chunk_size))) 3376 1.10 mrg { 3377 1.10 mrg /* We've decompressed all the expected bytes. */ 3378 1.10 mrg break; 3379 1.10 mrg } 3380 1.10 mrg 3381 1.10 mrg pos_state = ((uncompressed_offset - dict_start_offset) 3382 1.10 mrg & ((1 << pb) - 1)); 3383 1.10 mrg 3384 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, 3385 1.10 mrg probs + LZMA_IS_MATCH (lstate, pos_state), 3386 1.10 mrg poffset, &range, &code)) 3387 1.10 mrg { 3388 1.10 mrg uint32_t len; 3389 1.10 mrg 3390 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, 3391 1.10 mrg probs + LZMA_IS_REP (lstate), 3392 1.10 mrg poffset, &range, &code)) 3393 1.10 mrg { 3394 1.10 mrg int short_rep; 3395 1.10 mrg uint32_t next_dist; 3396 1.10 mrg 3397 1.10 mrg /* Repeated match. */ 3398 1.10 mrg 3399 1.10 mrg short_rep = 0; 3400 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, 3401 1.10 mrg probs + LZMA_IS_REP0 (lstate), 3402 1.10 mrg poffset, &range, &code)) 3403 1.10 mrg { 3404 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, 3405 1.10 mrg probs + LZMA_IS_REP1 (lstate), 3406 1.10 mrg poffset, &range, &code)) 3407 1.10 mrg { 3408 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, 3409 1.10 mrg probs + LZMA_IS_REP2 (lstate), 3410 1.10 mrg poffset, &range, &code)) 3411 1.10 mrg { 3412 1.10 mrg next_dist = dist[3]; 3413 1.10 mrg dist[3] = dist[2]; 3414 1.10 mrg } 3415 1.10 mrg else 3416 1.10 mrg { 3417 1.10 mrg next_dist = dist[2]; 3418 1.10 mrg } 3419 1.10 mrg dist[2] = dist[1]; 3420 1.10 mrg } 3421 1.10 mrg else 3422 1.10 mrg { 3423 1.10 mrg next_dist = dist[1]; 3424 1.10 mrg } 3425 1.10 mrg 3426 1.10 mrg dist[1] = dist[0]; 3427 1.10 mrg dist[0] = next_dist; 3428 1.10 mrg } 3429 1.10 mrg else 3430 1.10 mrg { 3431 1.10 mrg if (!elf_lzma_bit (compressed, compressed_size, 3432 1.10 mrg (probs 3433 1.10 mrg + LZMA_IS_REP0_LONG (lstate, 3434 1.10 mrg pos_state)), 3435 1.10 mrg poffset, &range, &code)) 3436 1.10 mrg short_rep = 1; 3437 1.10 mrg } 3438 1.10 mrg 3439 1.10 mrg if (lstate < 7) 3440 1.10 mrg lstate = short_rep ? 9 : 8; 3441 1.10 mrg else 3442 1.10 mrg lstate = 11; 3443 1.10 mrg 3444 1.10 mrg if (short_rep) 3445 1.10 mrg len = 1; 3446 1.10 mrg else 3447 1.10 mrg len = elf_lzma_len (compressed, compressed_size, 3448 1.10 mrg probs, 1, pos_state, poffset, 3449 1.10 mrg &range, &code); 3450 1.10 mrg } 3451 1.10 mrg else 3452 1.10 mrg { 3453 1.10 mrg uint32_t dist_state; 3454 1.10 mrg uint32_t dist_slot; 3455 1.10 mrg uint16_t *probs_dist; 3456 1.10 mrg 3457 1.10 mrg /* Match. */ 3458 1.10 mrg 3459 1.10 mrg if (lstate < 7) 3460 1.10 mrg lstate = 7; 3461 1.10 mrg else 3462 1.10 mrg lstate = 10; 3463 1.10 mrg dist[3] = dist[2]; 3464 1.10 mrg dist[2] = dist[1]; 3465 1.10 mrg dist[1] = dist[0]; 3466 1.10 mrg len = elf_lzma_len (compressed, compressed_size, 3467 1.10 mrg probs, 0, pos_state, poffset, 3468 1.10 mrg &range, &code); 3469 1.10 mrg 3470 1.10 mrg if (len < 4 + 2) 3471 1.10 mrg dist_state = len - 2; 3472 1.10 mrg else 3473 1.10 mrg dist_state = 3; 3474 1.10 mrg probs_dist = probs + LZMA_DIST_SLOT (dist_state, 0); 3475 1.10 mrg dist_slot = elf_lzma_integer (compressed, 3476 1.10 mrg compressed_size, 3477 1.10 mrg probs_dist, 6, 3478 1.10 mrg poffset, &range, 3479 1.10 mrg &code); 3480 1.10 mrg if (dist_slot < LZMA_DIST_MODEL_START) 3481 1.10 mrg dist[0] = dist_slot; 3482 1.10 mrg else 3483 1.10 mrg { 3484 1.10 mrg uint32_t limit; 3485 1.10 mrg 3486 1.10 mrg limit = (dist_slot >> 1) - 1; 3487 1.10 mrg dist[0] = 2 + (dist_slot & 1); 3488 1.10 mrg if (dist_slot < LZMA_DIST_MODEL_END) 3489 1.10 mrg { 3490 1.10 mrg dist[0] <<= limit; 3491 1.10 mrg probs_dist = (probs 3492 1.10 mrg + LZMA_DIST_SPECIAL(dist[0] 3493 1.10 mrg - dist_slot 3494 1.10 mrg - 1)); 3495 1.10 mrg dist[0] += 3496 1.10 mrg elf_lzma_reverse_integer (compressed, 3497 1.10 mrg compressed_size, 3498 1.10 mrg probs_dist, 3499 1.10 mrg limit, poffset, 3500 1.10 mrg &range, &code); 3501 1.10 mrg } 3502 1.10 mrg else 3503 1.10 mrg { 3504 1.10 mrg uint32_t dist0; 3505 1.10 mrg uint32_t i; 3506 1.10 mrg 3507 1.10 mrg dist0 = dist[0]; 3508 1.10 mrg for (i = 0; i < limit - 4; i++) 3509 1.10 mrg { 3510 1.10 mrg uint32_t mask; 3511 1.10 mrg 3512 1.10 mrg elf_lzma_range_normalize (compressed, 3513 1.10 mrg compressed_size, 3514 1.10 mrg poffset, 3515 1.10 mrg &range, &code); 3516 1.10 mrg range >>= 1; 3517 1.10 mrg code -= range; 3518 1.10 mrg mask = -(code >> 31); 3519 1.10 mrg code += range & mask; 3520 1.10 mrg dist0 <<= 1; 3521 1.10 mrg dist0 += mask + 1; 3522 1.10 mrg } 3523 1.10 mrg dist0 <<= 4; 3524 1.10 mrg probs_dist = probs + LZMA_DIST_ALIGN (0); 3525 1.10 mrg dist0 += 3526 1.10 mrg elf_lzma_reverse_integer (compressed, 3527 1.10 mrg compressed_size, 3528 1.10 mrg probs_dist, 4, 3529 1.10 mrg poffset, 3530 1.10 mrg &range, &code); 3531 1.10 mrg dist[0] = dist0; 3532 1.10 mrg } 3533 1.10 mrg } 3534 1.10 mrg } 3535 1.10 mrg 3536 1.10 mrg if (unlikely (uncompressed_offset 3537 1.10 mrg - dict_start_offset < dist[0] + 1)) 3538 1.10 mrg { 3539 1.10 mrg elf_uncompress_failed (); 3540 1.10 mrg return 0; 3541 1.10 mrg } 3542 1.10 mrg if (unlikely (uncompressed_offset + len > uncompressed_size)) 3543 1.10 mrg { 3544 1.10 mrg elf_uncompress_failed (); 3545 1.10 mrg return 0; 3546 1.10 mrg } 3547 1.10 mrg 3548 1.10 mrg if (dist[0] == 0) 3549 1.10 mrg { 3550 1.10 mrg /* A common case, meaning repeat the last 3551 1.10 mrg character LEN times. */ 3552 1.10 mrg memset (uncompressed + uncompressed_offset, 3553 1.10 mrg uncompressed[uncompressed_offset - 1], 3554 1.10 mrg len); 3555 1.10 mrg uncompressed_offset += len; 3556 1.10 mrg } 3557 1.10 mrg else if (dist[0] + 1 >= len) 3558 1.10 mrg { 3559 1.10 mrg memcpy (uncompressed + uncompressed_offset, 3560 1.10 mrg uncompressed + uncompressed_offset - dist[0] - 1, 3561 1.10 mrg len); 3562 1.10 mrg uncompressed_offset += len; 3563 1.10 mrg } 3564 1.10 mrg else 3565 1.10 mrg { 3566 1.10 mrg while (len > 0) 3567 1.10 mrg { 3568 1.10 mrg uint32_t copy; 3569 1.10 mrg 3570 1.10 mrg copy = len < dist[0] + 1 ? len : dist[0] + 1; 3571 1.10 mrg memcpy (uncompressed + uncompressed_offset, 3572 1.10 mrg (uncompressed + uncompressed_offset 3573 1.10 mrg - dist[0] - 1), 3574 1.10 mrg copy); 3575 1.10 mrg len -= copy; 3576 1.10 mrg uncompressed_offset += copy; 3577 1.10 mrg } 3578 1.10 mrg } 3579 1.10 mrg } 3580 1.10 mrg else 3581 1.10 mrg { 3582 1.10 mrg unsigned char prev; 3583 1.10 mrg unsigned char low; 3584 1.10 mrg size_t high; 3585 1.10 mrg uint16_t *lit_probs; 3586 1.10 mrg unsigned int sym; 3587 1.10 mrg 3588 1.10 mrg /* Literal value. */ 3589 1.10 mrg 3590 1.10 mrg if (uncompressed_offset > 0) 3591 1.10 mrg prev = uncompressed[uncompressed_offset - 1]; 3592 1.10 mrg else 3593 1.10 mrg prev = 0; 3594 1.10 mrg low = prev >> (8 - lc); 3595 1.10 mrg high = (((uncompressed_offset - dict_start_offset) 3596 1.10 mrg & ((1 << lp) - 1)) 3597 1.10 mrg << lc); 3598 1.10 mrg lit_probs = probs + LZMA_LITERAL (low + high, 0); 3599 1.10 mrg if (lstate < 7) 3600 1.10 mrg sym = elf_lzma_integer (compressed, compressed_size, 3601 1.10 mrg lit_probs, 8, poffset, &range, 3602 1.10 mrg &code); 3603 1.10 mrg else 3604 1.10 mrg { 3605 1.10 mrg unsigned int match; 3606 1.10 mrg unsigned int bit; 3607 1.10 mrg unsigned int match_bit; 3608 1.10 mrg unsigned int idx; 3609 1.10 mrg 3610 1.10 mrg sym = 1; 3611 1.10 mrg if (uncompressed_offset >= dist[0] + 1) 3612 1.10 mrg match = uncompressed[uncompressed_offset - dist[0] - 1]; 3613 1.10 mrg else 3614 1.10 mrg match = 0; 3615 1.10 mrg match <<= 1; 3616 1.10 mrg bit = 0x100; 3617 1.10 mrg do 3618 1.10 mrg { 3619 1.10 mrg match_bit = match & bit; 3620 1.10 mrg match <<= 1; 3621 1.10 mrg idx = bit + match_bit + sym; 3622 1.10 mrg sym <<= 1; 3623 1.10 mrg if (elf_lzma_bit (compressed, compressed_size, 3624 1.10 mrg lit_probs + idx, poffset, 3625 1.10 mrg &range, &code)) 3626 1.10 mrg { 3627 1.10 mrg ++sym; 3628 1.10 mrg bit &= match_bit; 3629 1.10 mrg } 3630 1.10 mrg else 3631 1.10 mrg { 3632 1.10 mrg bit &= ~ match_bit; 3633 1.10 mrg } 3634 1.10 mrg } 3635 1.10 mrg while (sym < 0x100); 3636 1.10 mrg } 3637 1.10 mrg 3638 1.10 mrg if (unlikely (uncompressed_offset >= uncompressed_size)) 3639 1.10 mrg { 3640 1.10 mrg elf_uncompress_failed (); 3641 1.10 mrg return 0; 3642 1.10 mrg } 3643 1.10 mrg 3644 1.10 mrg uncompressed[uncompressed_offset] = (unsigned char) sym; 3645 1.10 mrg ++uncompressed_offset; 3646 1.10 mrg if (lstate <= 3) 3647 1.10 mrg lstate = 0; 3648 1.10 mrg else if (lstate <= 9) 3649 1.10 mrg lstate -= 3; 3650 1.10 mrg else 3651 1.10 mrg lstate -= 6; 3652 1.10 mrg } 3653 1.10 mrg } 3654 1.10 mrg 3655 1.10 mrg elf_lzma_range_normalize (compressed, compressed_size, poffset, 3656 1.10 mrg &range, &code); 3657 1.10 mrg 3658 1.10 mrg off = *poffset; 3659 1.10 mrg } 3660 1.10 mrg } 3661 1.10 mrg 3662 1.10 mrg /* We have reached the end of the block. Pad to four byte 3663 1.10 mrg boundary. */ 3664 1.10 mrg off = (off + 3) &~ (size_t) 3; 3665 1.10 mrg if (unlikely (off > compressed_size)) 3666 1.10 mrg { 3667 1.10 mrg elf_uncompress_failed (); 3668 1.10 mrg return 0; 3669 1.10 mrg } 3670 1.10 mrg 3671 1.10 mrg switch (check) 3672 1.10 mrg { 3673 1.10 mrg case 0: 3674 1.10 mrg /* No check. */ 3675 1.10 mrg break; 3676 1.10 mrg 3677 1.10 mrg case 1: 3678 1.10 mrg /* CRC32 */ 3679 1.10 mrg if (unlikely (off + 4 > compressed_size)) 3680 1.10 mrg { 3681 1.10 mrg elf_uncompress_failed (); 3682 1.10 mrg return 0; 3683 1.10 mrg } 3684 1.10 mrg computed_crc = elf_crc32 (0, uncompressed, uncompressed_offset); 3685 1.10 mrg stream_crc = (compressed[off] 3686 1.10 mrg | (compressed[off + 1] << 8) 3687 1.10 mrg | (compressed[off + 2] << 16) 3688 1.10 mrg | (compressed[off + 3] << 24)); 3689 1.10 mrg if (computed_crc != stream_crc) 3690 1.10 mrg { 3691 1.10 mrg elf_uncompress_failed (); 3692 1.10 mrg return 0; 3693 1.10 mrg } 3694 1.10 mrg off += 4; 3695 1.10 mrg break; 3696 1.10 mrg 3697 1.10 mrg case 4: 3698 1.10 mrg /* CRC64. We don't bother computing a CRC64 checksum. */ 3699 1.10 mrg if (unlikely (off + 8 > compressed_size)) 3700 1.10 mrg { 3701 1.10 mrg elf_uncompress_failed (); 3702 1.10 mrg return 0; 3703 1.10 mrg } 3704 1.10 mrg off += 8; 3705 1.10 mrg break; 3706 1.10 mrg 3707 1.10 mrg case 10: 3708 1.10 mrg /* SHA. We don't bother computing a SHA checksum. */ 3709 1.10 mrg if (unlikely (off + 32 > compressed_size)) 3710 1.10 mrg { 3711 1.10 mrg elf_uncompress_failed (); 3712 1.10 mrg return 0; 3713 1.10 mrg } 3714 1.10 mrg off += 32; 3715 1.10 mrg break; 3716 1.10 mrg 3717 1.10 mrg default: 3718 1.10 mrg elf_uncompress_failed (); 3719 1.10 mrg return 0; 3720 1.10 mrg } 3721 1.10 mrg 3722 1.10 mrg *poffset = off; 3723 1.10 mrg 3724 1.10 mrg return 1; 3725 1.10 mrg } 3726 1.10 mrg 3727 1.10 mrg /* Uncompress LZMA data found in a minidebug file. The minidebug 3728 1.10 mrg format is described at 3729 1.10 mrg https://sourceware.org/gdb/current/onlinedocs/gdb/MiniDebugInfo.html. 3730 1.10 mrg Returns 0 on error, 1 on successful decompression. For this 3731 1.10 mrg function we return 0 on failure to decompress, as the calling code 3732 1.10 mrg will carry on in that case. */ 3733 1.10 mrg 3734 1.10 mrg static int 3735 1.10 mrg elf_uncompress_lzma (struct backtrace_state *state, 3736 1.10 mrg const unsigned char *compressed, size_t compressed_size, 3737 1.10 mrg backtrace_error_callback error_callback, void *data, 3738 1.10 mrg unsigned char **uncompressed, size_t *uncompressed_size) 3739 1.10 mrg { 3740 1.10 mrg size_t header_size; 3741 1.10 mrg size_t footer_size; 3742 1.10 mrg unsigned char check; 3743 1.10 mrg uint32_t computed_crc; 3744 1.10 mrg uint32_t stream_crc; 3745 1.10 mrg size_t offset; 3746 1.10 mrg size_t index_size; 3747 1.10 mrg size_t footer_offset; 3748 1.10 mrg size_t index_offset; 3749 1.10 mrg uint64_t index_compressed_size; 3750 1.10 mrg uint64_t index_uncompressed_size; 3751 1.10 mrg unsigned char *mem; 3752 1.10 mrg uint16_t *probs; 3753 1.10 mrg size_t compressed_block_size; 3754 1.10 mrg 3755 1.10 mrg /* The format starts with a stream header and ends with a stream 3756 1.10 mrg footer. */ 3757 1.10 mrg header_size = 12; 3758 1.10 mrg footer_size = 12; 3759 1.10 mrg if (unlikely (compressed_size < header_size + footer_size)) 3760 1.10 mrg { 3761 1.10 mrg elf_uncompress_failed (); 3762 1.10 mrg return 0; 3763 1.10 mrg } 3764 1.10 mrg 3765 1.10 mrg /* The stream header starts with a magic string. */ 3766 1.10 mrg if (unlikely (memcmp (compressed, "\375" "7zXZ\0", 6) != 0)) 3767 1.10 mrg { 3768 1.10 mrg elf_uncompress_failed (); 3769 1.10 mrg return 0; 3770 1.10 mrg } 3771 1.10 mrg 3772 1.10 mrg /* Next come stream flags. The first byte is zero, the second byte 3773 1.10 mrg is the check. */ 3774 1.10 mrg if (unlikely (compressed[6] != 0)) 3775 1.10 mrg { 3776 1.10 mrg elf_uncompress_failed (); 3777 1.10 mrg return 0; 3778 1.10 mrg } 3779 1.10 mrg check = compressed[7]; 3780 1.10 mrg if (unlikely ((check & 0xf8) != 0)) 3781 1.10 mrg { 3782 1.10 mrg elf_uncompress_failed (); 3783 1.10 mrg return 0; 3784 1.10 mrg } 3785 1.10 mrg 3786 1.10 mrg /* Next comes a CRC of the stream flags. */ 3787 1.10 mrg computed_crc = elf_crc32 (0, compressed + 6, 2); 3788 1.10 mrg stream_crc = ((uint32_t)compressed[8] 3789 1.10 mrg | ((uint32_t)compressed[9] << 8) 3790 1.10 mrg | ((uint32_t)compressed[10] << 16) 3791 1.10 mrg | ((uint32_t)compressed[11] << 24)); 3792 1.10 mrg if (unlikely (computed_crc != stream_crc)) 3793 1.10 mrg { 3794 1.10 mrg elf_uncompress_failed (); 3795 1.10 mrg return 0; 3796 1.10 mrg } 3797 1.10 mrg 3798 1.10 mrg /* Now that we've parsed the header, parse the footer, so that we 3799 1.10 mrg can get the uncompressed size. */ 3800 1.10 mrg 3801 1.10 mrg /* The footer ends with two magic bytes. */ 3802 1.10 mrg 3803 1.10 mrg offset = compressed_size; 3804 1.10 mrg if (unlikely (memcmp (compressed + offset - 2, "YZ", 2) != 0)) 3805 1.10 mrg { 3806 1.10 mrg elf_uncompress_failed (); 3807 1.10 mrg return 0; 3808 1.10 mrg } 3809 1.10 mrg offset -= 2; 3810 1.10 mrg 3811 1.10 mrg /* Before that are the stream flags, which should be the same as the 3812 1.10 mrg flags in the header. */ 3813 1.10 mrg if (unlikely (compressed[offset - 2] != 0 3814 1.10 mrg || compressed[offset - 1] != check)) 3815 1.10 mrg { 3816 1.10 mrg elf_uncompress_failed (); 3817 1.10 mrg return 0; 3818 1.10 mrg } 3819 1.10 mrg offset -= 2; 3820 1.10 mrg 3821 1.10 mrg /* Before that is the size of the index field, which precedes the 3822 1.10 mrg footer. */ 3823 1.10 mrg index_size = (compressed[offset - 4] 3824 1.10 mrg | (compressed[offset - 3] << 8) 3825 1.10 mrg | (compressed[offset - 2] << 16) 3826 1.10 mrg | (compressed[offset - 1] << 24)); 3827 1.10 mrg index_size = (index_size + 1) * 4; 3828 1.10 mrg offset -= 4; 3829 1.10 mrg 3830 1.10 mrg /* Before that is a footer CRC. */ 3831 1.10 mrg computed_crc = elf_crc32 (0, compressed + offset, 6); 3832 1.10 mrg stream_crc = ((uint32_t)compressed[offset - 4] 3833 1.10 mrg | ((uint32_t)compressed[offset - 3] << 8) 3834 1.10 mrg | ((uint32_t)compressed[offset - 2] << 16) 3835 1.10 mrg | ((uint32_t)compressed[offset - 1] << 24)); 3836 1.10 mrg if (unlikely (computed_crc != stream_crc)) 3837 1.10 mrg { 3838 1.10 mrg elf_uncompress_failed (); 3839 1.10 mrg return 0; 3840 1.10 mrg } 3841 1.10 mrg offset -= 4; 3842 1.10 mrg 3843 1.10 mrg /* The index comes just before the footer. */ 3844 1.10 mrg if (unlikely (offset < index_size + header_size)) 3845 1.10 mrg { 3846 1.10 mrg elf_uncompress_failed (); 3847 1.10 mrg return 0; 3848 1.10 mrg } 3849 1.10 mrg 3850 1.10 mrg footer_offset = offset; 3851 1.10 mrg offset -= index_size; 3852 1.10 mrg index_offset = offset; 3853 1.10 mrg 3854 1.10 mrg /* The index starts with a zero byte. */ 3855 1.10 mrg if (unlikely (compressed[offset] != 0)) 3856 1.10 mrg { 3857 1.10 mrg elf_uncompress_failed (); 3858 1.10 mrg return 0; 3859 1.10 mrg } 3860 1.10 mrg ++offset; 3861 1.10 mrg 3862 1.10 mrg /* Next is the number of blocks. We expect zero blocks for an empty 3863 1.10 mrg stream, and otherwise a single block. */ 3864 1.10 mrg if (unlikely (compressed[offset] == 0)) 3865 1.10 mrg { 3866 1.10 mrg *uncompressed = NULL; 3867 1.10 mrg *uncompressed_size = 0; 3868 1.10 mrg return 1; 3869 1.10 mrg } 3870 1.10 mrg if (unlikely (compressed[offset] != 1)) 3871 1.10 mrg { 3872 1.10 mrg elf_uncompress_failed (); 3873 1.10 mrg return 0; 3874 1.10 mrg } 3875 1.10 mrg ++offset; 3876 1.10 mrg 3877 1.10 mrg /* Next is the compressed size and the uncompressed size. */ 3878 1.10 mrg if (!elf_lzma_varint (compressed, compressed_size, &offset, 3879 1.10 mrg &index_compressed_size)) 3880 1.10 mrg return 0; 3881 1.10 mrg if (!elf_lzma_varint (compressed, compressed_size, &offset, 3882 1.10 mrg &index_uncompressed_size)) 3883 1.10 mrg return 0; 3884 1.10 mrg 3885 1.10 mrg /* Pad to a four byte boundary. */ 3886 1.10 mrg offset = (offset + 3) &~ (size_t) 3; 3887 1.10 mrg 3888 1.10 mrg /* Next is a CRC of the index. */ 3889 1.10 mrg computed_crc = elf_crc32 (0, compressed + index_offset, 3890 1.10 mrg offset - index_offset); 3891 1.10 mrg stream_crc = ((uint32_t)compressed[offset] 3892 1.10 mrg | ((uint32_t)compressed[offset + 1] << 8) 3893 1.10 mrg | ((uint32_t)compressed[offset + 2] << 16) 3894 1.10 mrg | ((uint32_t)compressed[offset + 3] << 24)); 3895 1.10 mrg if (unlikely (computed_crc != stream_crc)) 3896 1.10 mrg { 3897 1.10 mrg elf_uncompress_failed (); 3898 1.10 mrg return 0; 3899 1.10 mrg } 3900 1.10 mrg offset += 4; 3901 1.10 mrg 3902 1.10 mrg /* We should now be back at the footer. */ 3903 1.10 mrg if (unlikely (offset != footer_offset)) 3904 1.10 mrg { 3905 1.10 mrg elf_uncompress_failed (); 3906 1.10 mrg return 0; 3907 1.10 mrg } 3908 1.10 mrg 3909 1.10 mrg /* Allocate space to hold the uncompressed data. If we succeed in 3910 1.10 mrg uncompressing the LZMA data, we never free this memory. */ 3911 1.10 mrg mem = (unsigned char *) backtrace_alloc (state, index_uncompressed_size, 3912 1.10 mrg error_callback, data); 3913 1.10 mrg if (unlikely (mem == NULL)) 3914 1.10 mrg return 0; 3915 1.10 mrg *uncompressed = mem; 3916 1.10 mrg *uncompressed_size = index_uncompressed_size; 3917 1.10 mrg 3918 1.10 mrg /* Allocate space for probabilities. */ 3919 1.10 mrg probs = ((uint16_t *) 3920 1.10 mrg backtrace_alloc (state, 3921 1.10 mrg LZMA_PROB_TOTAL_COUNT * sizeof (uint16_t), 3922 1.10 mrg error_callback, data)); 3923 1.10 mrg if (unlikely (probs == NULL)) 3924 1.10 mrg { 3925 1.10 mrg backtrace_free (state, mem, index_uncompressed_size, error_callback, 3926 1.10 mrg data); 3927 1.10 mrg return 0; 3928 1.10 mrg } 3929 1.10 mrg 3930 1.10 mrg /* Uncompress the block, which follows the header. */ 3931 1.10 mrg offset = 12; 3932 1.10 mrg if (!elf_uncompress_lzma_block (compressed, compressed_size, check, probs, 3933 1.10 mrg mem, index_uncompressed_size, &offset)) 3934 1.10 mrg { 3935 1.10 mrg backtrace_free (state, mem, index_uncompressed_size, error_callback, 3936 1.10 mrg data); 3937 1.10 mrg return 0; 3938 1.10 mrg } 3939 1.10 mrg 3940 1.10 mrg compressed_block_size = offset - 12; 3941 1.10 mrg if (unlikely (compressed_block_size 3942 1.10 mrg != ((index_compressed_size + 3) &~ (size_t) 3))) 3943 1.10 mrg { 3944 1.10 mrg elf_uncompress_failed (); 3945 1.10 mrg backtrace_free (state, mem, index_uncompressed_size, error_callback, 3946 1.10 mrg data); 3947 1.10 mrg return 0; 3948 1.10 mrg } 3949 1.10 mrg 3950 1.10 mrg offset = (offset + 3) &~ (size_t) 3; 3951 1.10 mrg if (unlikely (offset != index_offset)) 3952 1.10 mrg { 3953 1.10 mrg elf_uncompress_failed (); 3954 1.10 mrg backtrace_free (state, mem, index_uncompressed_size, error_callback, 3955 1.10 mrg data); 3956 1.10 mrg return 0; 3957 1.10 mrg } 3958 1.10 mrg 3959 1.10 mrg return 1; 3960 1.10 mrg } 3961 1.10 mrg 3962 1.10 mrg /* This function is a hook for testing the LZMA support. It is only 3963 1.10 mrg used by tests. */ 3964 1.10 mrg 3965 1.10 mrg int 3966 1.10 mrg backtrace_uncompress_lzma (struct backtrace_state *state, 3967 1.10 mrg const unsigned char *compressed, 3968 1.10 mrg size_t compressed_size, 3969 1.10 mrg backtrace_error_callback error_callback, 3970 1.10 mrg void *data, unsigned char **uncompressed, 3971 1.10 mrg size_t *uncompressed_size) 3972 1.10 mrg { 3973 1.10 mrg return elf_uncompress_lzma (state, compressed, compressed_size, 3974 1.10 mrg error_callback, data, uncompressed, 3975 1.10 mrg uncompressed_size); 3976 1.10 mrg } 3977 1.10 mrg 3978 1.10 mrg /* Add the backtrace data for one ELF file. Returns 1 on success, 3979 1.10 mrg 0 on failure (in both cases descriptor is closed) or -1 if exe 3980 1.10 mrg is non-zero and the ELF file is ET_DYN, which tells the caller that 3981 1.10 mrg elf_add will need to be called on the descriptor again after 3982 1.10 mrg base_address is determined. */ 3983 1.10 mrg 3984 1.10 mrg static int 3985 1.10 mrg elf_add (struct backtrace_state *state, const char *filename, int descriptor, 3986 1.10 mrg const unsigned char *memory, size_t memory_size, 3987 1.10 mrg uintptr_t base_address, backtrace_error_callback error_callback, 3988 1.10 mrg void *data, fileline *fileline_fn, int *found_sym, int *found_dwarf, 3989 1.10 mrg struct dwarf_data **fileline_entry, int exe, int debuginfo, 3990 1.10 mrg const char *with_buildid_data, uint32_t with_buildid_size) 3991 1.10 mrg { 3992 1.10 mrg struct elf_view ehdr_view; 3993 1.10 mrg b_elf_ehdr ehdr; 3994 1.10 mrg off_t shoff; 3995 1.10 mrg unsigned int shnum; 3996 1.10 mrg unsigned int shstrndx; 3997 1.10 mrg struct elf_view shdrs_view; 3998 1.10 mrg int shdrs_view_valid; 3999 1.10 mrg const b_elf_shdr *shdrs; 4000 1.10 mrg const b_elf_shdr *shstrhdr; 4001 1.10 mrg size_t shstr_size; 4002 1.10 mrg off_t shstr_off; 4003 1.10 mrg struct elf_view names_view; 4004 1.10 mrg int names_view_valid; 4005 1.10 mrg const char *names; 4006 1.10 mrg unsigned int symtab_shndx; 4007 1.10 mrg unsigned int dynsym_shndx; 4008 1.10 mrg unsigned int i; 4009 1.10 mrg struct debug_section_info sections[DEBUG_MAX]; 4010 1.10 mrg struct debug_section_info zsections[DEBUG_MAX]; 4011 1.10 mrg struct elf_view symtab_view; 4012 1.10 mrg int symtab_view_valid; 4013 1.10 mrg struct elf_view strtab_view; 4014 1.10 mrg int strtab_view_valid; 4015 1.10 mrg struct elf_view buildid_view; 4016 1.10 mrg int buildid_view_valid; 4017 1.10 mrg const char *buildid_data; 4018 1.10 mrg uint32_t buildid_size; 4019 1.10 mrg struct elf_view debuglink_view; 4020 1.10 mrg int debuglink_view_valid; 4021 1.10 mrg const char *debuglink_name; 4022 1.10 mrg uint32_t debuglink_crc; 4023 1.10 mrg struct elf_view debugaltlink_view; 4024 1.10 mrg int debugaltlink_view_valid; 4025 1.10 mrg const char *debugaltlink_name; 4026 1.10 mrg const char *debugaltlink_buildid_data; 4027 1.10 mrg uint32_t debugaltlink_buildid_size; 4028 1.10 mrg struct elf_view gnu_debugdata_view; 4029 1.10 mrg int gnu_debugdata_view_valid; 4030 1.10 mrg size_t gnu_debugdata_size; 4031 1.10 mrg unsigned char *gnu_debugdata_uncompressed; 4032 1.10 mrg size_t gnu_debugdata_uncompressed_size; 4033 1.10 mrg off_t min_offset; 4034 1.10 mrg off_t max_offset; 4035 1.10 mrg off_t debug_size; 4036 1.10 mrg struct elf_view debug_view; 4037 1.10 mrg int debug_view_valid; 4038 1.10 mrg unsigned int using_debug_view; 4039 1.10 mrg uint16_t *zdebug_table; 4040 1.10 mrg struct elf_view split_debug_view[DEBUG_MAX]; 4041 1.10 mrg unsigned char split_debug_view_valid[DEBUG_MAX]; 4042 1.10 mrg struct elf_ppc64_opd_data opd_data, *opd; 4043 1.10 mrg struct dwarf_sections dwarf_sections; 4044 1.10 mrg 4045 1.10 mrg if (!debuginfo) 4046 1.10 mrg { 4047 1.10 mrg *found_sym = 0; 4048 1.10 mrg *found_dwarf = 0; 4049 1.10 mrg } 4050 1.10 mrg 4051 1.10 mrg shdrs_view_valid = 0; 4052 1.10 mrg names_view_valid = 0; 4053 1.10 mrg symtab_view_valid = 0; 4054 1.10 mrg strtab_view_valid = 0; 4055 1.10 mrg buildid_view_valid = 0; 4056 1.10 mrg buildid_data = NULL; 4057 1.10 mrg buildid_size = 0; 4058 1.10 mrg debuglink_view_valid = 0; 4059 1.10 mrg debuglink_name = NULL; 4060 1.10 mrg debuglink_crc = 0; 4061 1.10 mrg debugaltlink_view_valid = 0; 4062 1.10 mrg debugaltlink_name = NULL; 4063 1.10 mrg debugaltlink_buildid_data = NULL; 4064 1.10 mrg debugaltlink_buildid_size = 0; 4065 1.10 mrg gnu_debugdata_view_valid = 0; 4066 1.10 mrg gnu_debugdata_size = 0; 4067 1.10 mrg debug_view_valid = 0; 4068 1.10 mrg memset (&split_debug_view_valid[0], 0, sizeof split_debug_view_valid); 4069 1.10 mrg opd = NULL; 4070 1.10 mrg 4071 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 0, sizeof ehdr, 4072 1.10 mrg error_callback, data, &ehdr_view)) 4073 1.10 mrg goto fail; 4074 1.10 mrg 4075 1.10 mrg memcpy (&ehdr, ehdr_view.view.data, sizeof ehdr); 4076 1.10 mrg 4077 1.10 mrg elf_release_view (state, &ehdr_view, error_callback, data); 4078 1.10 mrg 4079 1.10 mrg if (ehdr.e_ident[EI_MAG0] != ELFMAG0 4080 1.10 mrg || ehdr.e_ident[EI_MAG1] != ELFMAG1 4081 1.10 mrg || ehdr.e_ident[EI_MAG2] != ELFMAG2 4082 1.10 mrg || ehdr.e_ident[EI_MAG3] != ELFMAG3) 4083 1.10 mrg { 4084 1.10 mrg error_callback (data, "executable file is not ELF", 0); 4085 1.10 mrg goto fail; 4086 1.10 mrg } 4087 1.10 mrg if (ehdr.e_ident[EI_VERSION] != EV_CURRENT) 4088 1.10 mrg { 4089 1.10 mrg error_callback (data, "executable file is unrecognized ELF version", 0); 4090 1.10 mrg goto fail; 4091 1.10 mrg } 4092 1.10 mrg 4093 1.10 mrg #if BACKTRACE_ELF_SIZE == 32 4094 1.10 mrg #define BACKTRACE_ELFCLASS ELFCLASS32 4095 1.10 mrg #else 4096 1.10 mrg #define BACKTRACE_ELFCLASS ELFCLASS64 4097 1.10 mrg #endif 4098 1.10 mrg 4099 1.10 mrg if (ehdr.e_ident[EI_CLASS] != BACKTRACE_ELFCLASS) 4100 1.10 mrg { 4101 1.10 mrg error_callback (data, "executable file is unexpected ELF class", 0); 4102 1.10 mrg goto fail; 4103 1.10 mrg } 4104 1.10 mrg 4105 1.10 mrg if (ehdr.e_ident[EI_DATA] != ELFDATA2LSB 4106 1.10 mrg && ehdr.e_ident[EI_DATA] != ELFDATA2MSB) 4107 1.10 mrg { 4108 1.10 mrg error_callback (data, "executable file has unknown endianness", 0); 4109 1.10 mrg goto fail; 4110 1.10 mrg } 4111 1.10 mrg 4112 1.10 mrg /* If the executable is ET_DYN, it is either a PIE, or we are running 4113 1.10 mrg directly a shared library with .interp. We need to wait for 4114 1.10 mrg dl_iterate_phdr in that case to determine the actual base_address. */ 4115 1.10 mrg if (exe && ehdr.e_type == ET_DYN) 4116 1.10 mrg return -1; 4117 1.10 mrg 4118 1.10 mrg shoff = ehdr.e_shoff; 4119 1.10 mrg shnum = ehdr.e_shnum; 4120 1.10 mrg shstrndx = ehdr.e_shstrndx; 4121 1.10 mrg 4122 1.10 mrg if ((shnum == 0 || shstrndx == SHN_XINDEX) 4123 1.10 mrg && shoff != 0) 4124 1.10 mrg { 4125 1.10 mrg struct elf_view shdr_view; 4126 1.10 mrg const b_elf_shdr *shdr; 4127 1.10 mrg 4128 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, shoff, 4129 1.10 mrg sizeof shdr, error_callback, data, &shdr_view)) 4130 1.10 mrg goto fail; 4131 1.10 mrg 4132 1.10 mrg shdr = (const b_elf_shdr *) shdr_view.view.data; 4133 1.10 mrg 4134 1.10 mrg if (shnum == 0) 4135 1.10 mrg shnum = shdr->sh_size; 4136 1.10 mrg 4137 1.10 mrg if (shstrndx == SHN_XINDEX) 4138 1.10 mrg { 4139 1.10 mrg shstrndx = shdr->sh_link; 4140 1.10 mrg 4141 1.10 mrg /* Versions of the GNU binutils between 2.12 and 2.18 did 4142 1.10 mrg not handle objects with more than SHN_LORESERVE sections 4143 1.10 mrg correctly. All large section indexes were offset by 4144 1.10 mrg 0x100. There is more information at 4145 1.10 mrg http://sourceware.org/bugzilla/show_bug.cgi?id-5900 . 4146 1.10 mrg Fortunately these object files are easy to detect, as the 4147 1.10 mrg GNU binutils always put the section header string table 4148 1.10 mrg near the end of the list of sections. Thus if the 4149 1.10 mrg section header string table index is larger than the 4150 1.10 mrg number of sections, then we know we have to subtract 4151 1.10 mrg 0x100 to get the real section index. */ 4152 1.10 mrg if (shstrndx >= shnum && shstrndx >= SHN_LORESERVE + 0x100) 4153 1.10 mrg shstrndx -= 0x100; 4154 1.10 mrg } 4155 1.10 mrg 4156 1.10 mrg elf_release_view (state, &shdr_view, error_callback, data); 4157 1.10 mrg } 4158 1.10 mrg 4159 1.10 mrg if (shnum == 0 || shstrndx == 0) 4160 1.10 mrg goto fail; 4161 1.10 mrg 4162 1.10 mrg /* To translate PC to file/line when using DWARF, we need to find 4163 1.10 mrg the .debug_info and .debug_line sections. */ 4164 1.10 mrg 4165 1.10 mrg /* Read the section headers, skipping the first one. */ 4166 1.10 mrg 4167 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4168 1.10 mrg shoff + sizeof (b_elf_shdr), 4169 1.10 mrg (shnum - 1) * sizeof (b_elf_shdr), 4170 1.10 mrg error_callback, data, &shdrs_view)) 4171 1.10 mrg goto fail; 4172 1.10 mrg shdrs_view_valid = 1; 4173 1.10 mrg shdrs = (const b_elf_shdr *) shdrs_view.view.data; 4174 1.10 mrg 4175 1.10 mrg /* Read the section names. */ 4176 1.10 mrg 4177 1.10 mrg shstrhdr = &shdrs[shstrndx - 1]; 4178 1.10 mrg shstr_size = shstrhdr->sh_size; 4179 1.10 mrg shstr_off = shstrhdr->sh_offset; 4180 1.10 mrg 4181 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, shstr_off, 4182 1.10 mrg shstrhdr->sh_size, error_callback, data, &names_view)) 4183 1.10 mrg goto fail; 4184 1.10 mrg names_view_valid = 1; 4185 1.10 mrg names = (const char *) names_view.view.data; 4186 1.10 mrg 4187 1.10 mrg symtab_shndx = 0; 4188 1.10 mrg dynsym_shndx = 0; 4189 1.10 mrg 4190 1.10 mrg memset (sections, 0, sizeof sections); 4191 1.10 mrg memset (zsections, 0, sizeof zsections); 4192 1.10 mrg 4193 1.10 mrg /* Look for the symbol table. */ 4194 1.10 mrg for (i = 1; i < shnum; ++i) 4195 1.10 mrg { 4196 1.10 mrg const b_elf_shdr *shdr; 4197 1.10 mrg unsigned int sh_name; 4198 1.10 mrg const char *name; 4199 1.10 mrg int j; 4200 1.10 mrg 4201 1.10 mrg shdr = &shdrs[i - 1]; 4202 1.10 mrg 4203 1.10 mrg if (shdr->sh_type == SHT_SYMTAB) 4204 1.10 mrg symtab_shndx = i; 4205 1.10 mrg else if (shdr->sh_type == SHT_DYNSYM) 4206 1.10 mrg dynsym_shndx = i; 4207 1.10 mrg 4208 1.10 mrg sh_name = shdr->sh_name; 4209 1.10 mrg if (sh_name >= shstr_size) 4210 1.10 mrg { 4211 1.10 mrg error_callback (data, "ELF section name out of range", 0); 4212 1.10 mrg goto fail; 4213 1.10 mrg } 4214 1.1 mrg 4215 1.1 mrg name = names + sh_name; 4216 1.1 mrg 4217 1.1 mrg for (j = 0; j < (int) DEBUG_MAX; ++j) 4218 1.1 mrg { 4219 1.9 mrg if (strcmp (name, dwarf_section_names[j]) == 0) 4220 1.1 mrg { 4221 1.1 mrg sections[j].offset = shdr->sh_offset; 4222 1.1 mrg sections[j].size = shdr->sh_size; 4223 1.7 mrg sections[j].compressed = (shdr->sh_flags & SHF_COMPRESSED) != 0; 4224 1.1 mrg break; 4225 1.1 mrg } 4226 1.1 mrg } 4227 1.7 mrg 4228 1.9 mrg if (name[0] == '.' && name[1] == 'z') 4229 1.9 mrg { 4230 1.9 mrg for (j = 0; j < (int) DEBUG_MAX; ++j) 4231 1.9 mrg { 4232 1.9 mrg if (strcmp (name + 2, dwarf_section_names[j] + 1) == 0) 4233 1.9 mrg { 4234 1.9 mrg zsections[j].offset = shdr->sh_offset; 4235 1.9 mrg zsections[j].size = shdr->sh_size; 4236 1.9 mrg break; 4237 1.9 mrg } 4238 1.9 mrg } 4239 1.9 mrg } 4240 1.9 mrg 4241 1.7 mrg /* Read the build ID if present. This could check for any 4242 1.7 mrg SHT_NOTE section with the right note name and type, but gdb 4243 1.7 mrg looks for a specific section name. */ 4244 1.8 mrg if ((!debuginfo || with_buildid_data != NULL) 4245 1.7 mrg && !buildid_view_valid 4246 1.7 mrg && strcmp (name, ".note.gnu.build-id") == 0) 4247 1.7 mrg { 4248 1.7 mrg const b_elf_note *note; 4249 1.7 mrg 4250 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4251 1.10 mrg shdr->sh_offset, shdr->sh_size, error_callback, 4252 1.10 mrg data, &buildid_view)) 4253 1.7 mrg goto fail; 4254 1.7 mrg 4255 1.7 mrg buildid_view_valid = 1; 4256 1.10 mrg note = (const b_elf_note *) buildid_view.view.data; 4257 1.7 mrg if (note->type == NT_GNU_BUILD_ID 4258 1.7 mrg && note->namesz == 4 4259 1.7 mrg && strncmp (note->name, "GNU", 4) == 0 4260 1.7 mrg && shdr->sh_size <= 12 + ((note->namesz + 3) & ~ 3) + note->descsz) 4261 1.7 mrg { 4262 1.7 mrg buildid_data = ¬e->name[0] + ((note->namesz + 3) & ~ 3); 4263 1.7 mrg buildid_size = note->descsz; 4264 1.7 mrg } 4265 1.8 mrg 4266 1.8 mrg if (with_buildid_size != 0) 4267 1.8 mrg { 4268 1.8 mrg if (buildid_size != with_buildid_size) 4269 1.8 mrg goto fail; 4270 1.8 mrg 4271 1.8 mrg if (memcmp (buildid_data, with_buildid_data, buildid_size) != 0) 4272 1.8 mrg goto fail; 4273 1.8 mrg } 4274 1.7 mrg } 4275 1.7 mrg 4276 1.7 mrg /* Read the debuglink file if present. */ 4277 1.7 mrg if (!debuginfo 4278 1.7 mrg && !debuglink_view_valid 4279 1.7 mrg && strcmp (name, ".gnu_debuglink") == 0) 4280 1.7 mrg { 4281 1.7 mrg const char *debuglink_data; 4282 1.7 mrg size_t crc_offset; 4283 1.7 mrg 4284 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4285 1.10 mrg shdr->sh_offset, shdr->sh_size, error_callback, 4286 1.10 mrg data, &debuglink_view)) 4287 1.7 mrg goto fail; 4288 1.7 mrg 4289 1.7 mrg debuglink_view_valid = 1; 4290 1.10 mrg debuglink_data = (const char *) debuglink_view.view.data; 4291 1.7 mrg crc_offset = strnlen (debuglink_data, shdr->sh_size); 4292 1.7 mrg crc_offset = (crc_offset + 3) & ~3; 4293 1.7 mrg if (crc_offset + 4 <= shdr->sh_size) 4294 1.7 mrg { 4295 1.7 mrg debuglink_name = debuglink_data; 4296 1.7 mrg debuglink_crc = *(const uint32_t*)(debuglink_data + crc_offset); 4297 1.7 mrg } 4298 1.7 mrg } 4299 1.7 mrg 4300 1.8 mrg if (!debugaltlink_view_valid 4301 1.8 mrg && strcmp (name, ".gnu_debugaltlink") == 0) 4302 1.8 mrg { 4303 1.8 mrg const char *debugaltlink_data; 4304 1.8 mrg size_t debugaltlink_name_len; 4305 1.8 mrg 4306 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4307 1.10 mrg shdr->sh_offset, shdr->sh_size, error_callback, 4308 1.10 mrg data, &debugaltlink_view)) 4309 1.8 mrg goto fail; 4310 1.8 mrg 4311 1.8 mrg debugaltlink_view_valid = 1; 4312 1.10 mrg debugaltlink_data = (const char *) debugaltlink_view.view.data; 4313 1.8 mrg debugaltlink_name = debugaltlink_data; 4314 1.8 mrg debugaltlink_name_len = strnlen (debugaltlink_data, shdr->sh_size); 4315 1.8 mrg if (debugaltlink_name_len < shdr->sh_size) 4316 1.8 mrg { 4317 1.8 mrg /* Include terminating zero. */ 4318 1.8 mrg debugaltlink_name_len += 1; 4319 1.8 mrg 4320 1.8 mrg debugaltlink_buildid_data 4321 1.8 mrg = debugaltlink_data + debugaltlink_name_len; 4322 1.8 mrg debugaltlink_buildid_size = shdr->sh_size - debugaltlink_name_len; 4323 1.8 mrg } 4324 1.8 mrg } 4325 1.8 mrg 4326 1.10 mrg if (!gnu_debugdata_view_valid 4327 1.10 mrg && strcmp (name, ".gnu_debugdata") == 0) 4328 1.10 mrg { 4329 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4330 1.10 mrg shdr->sh_offset, shdr->sh_size, error_callback, 4331 1.10 mrg data, &gnu_debugdata_view)) 4332 1.10 mrg goto fail; 4333 1.10 mrg 4334 1.10 mrg gnu_debugdata_size = shdr->sh_size; 4335 1.10 mrg gnu_debugdata_view_valid = 1; 4336 1.10 mrg } 4337 1.10 mrg 4338 1.7 mrg /* Read the .opd section on PowerPC64 ELFv1. */ 4339 1.7 mrg if (ehdr.e_machine == EM_PPC64 4340 1.7 mrg && (ehdr.e_flags & EF_PPC64_ABI) < 2 4341 1.7 mrg && shdr->sh_type == SHT_PROGBITS 4342 1.7 mrg && strcmp (name, ".opd") == 0) 4343 1.7 mrg { 4344 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4345 1.10 mrg shdr->sh_offset, shdr->sh_size, error_callback, 4346 1.10 mrg data, &opd_data.view)) 4347 1.7 mrg goto fail; 4348 1.7 mrg 4349 1.7 mrg opd = &opd_data; 4350 1.7 mrg opd->addr = shdr->sh_addr; 4351 1.10 mrg opd->data = (const char *) opd_data.view.view.data; 4352 1.7 mrg opd->size = shdr->sh_size; 4353 1.7 mrg } 4354 1.1 mrg } 4355 1.1 mrg 4356 1.1 mrg if (symtab_shndx == 0) 4357 1.1 mrg symtab_shndx = dynsym_shndx; 4358 1.7 mrg if (symtab_shndx != 0 && !debuginfo) 4359 1.1 mrg { 4360 1.1 mrg const b_elf_shdr *symtab_shdr; 4361 1.1 mrg unsigned int strtab_shndx; 4362 1.1 mrg const b_elf_shdr *strtab_shdr; 4363 1.1 mrg struct elf_syminfo_data *sdata; 4364 1.1 mrg 4365 1.1 mrg symtab_shdr = &shdrs[symtab_shndx - 1]; 4366 1.1 mrg strtab_shndx = symtab_shdr->sh_link; 4367 1.1 mrg if (strtab_shndx >= shnum) 4368 1.1 mrg { 4369 1.1 mrg error_callback (data, 4370 1.1 mrg "ELF symbol table strtab link out of range", 0); 4371 1.1 mrg goto fail; 4372 1.1 mrg } 4373 1.1 mrg strtab_shdr = &shdrs[strtab_shndx - 1]; 4374 1.1 mrg 4375 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4376 1.10 mrg symtab_shdr->sh_offset, symtab_shdr->sh_size, 4377 1.10 mrg error_callback, data, &symtab_view)) 4378 1.1 mrg goto fail; 4379 1.1 mrg symtab_view_valid = 1; 4380 1.1 mrg 4381 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4382 1.10 mrg strtab_shdr->sh_offset, strtab_shdr->sh_size, 4383 1.10 mrg error_callback, data, &strtab_view)) 4384 1.1 mrg goto fail; 4385 1.1 mrg strtab_view_valid = 1; 4386 1.1 mrg 4387 1.1 mrg sdata = ((struct elf_syminfo_data *) 4388 1.1 mrg backtrace_alloc (state, sizeof *sdata, error_callback, data)); 4389 1.1 mrg if (sdata == NULL) 4390 1.1 mrg goto fail; 4391 1.1 mrg 4392 1.3 mrg if (!elf_initialize_syminfo (state, base_address, 4393 1.10 mrg symtab_view.view.data, symtab_shdr->sh_size, 4394 1.10 mrg strtab_view.view.data, strtab_shdr->sh_size, 4395 1.7 mrg error_callback, data, sdata, opd)) 4396 1.1 mrg { 4397 1.1 mrg backtrace_free (state, sdata, sizeof *sdata, error_callback, data); 4398 1.1 mrg goto fail; 4399 1.1 mrg } 4400 1.1 mrg 4401 1.1 mrg /* We no longer need the symbol table, but we hold on to the 4402 1.1 mrg string table permanently. */ 4403 1.10 mrg elf_release_view (state, &symtab_view, error_callback, data); 4404 1.7 mrg symtab_view_valid = 0; 4405 1.10 mrg strtab_view_valid = 0; 4406 1.1 mrg 4407 1.1 mrg *found_sym = 1; 4408 1.1 mrg 4409 1.1 mrg elf_add_syminfo_data (state, sdata); 4410 1.1 mrg } 4411 1.1 mrg 4412 1.10 mrg elf_release_view (state, &shdrs_view, error_callback, data); 4413 1.1 mrg shdrs_view_valid = 0; 4414 1.10 mrg elf_release_view (state, &names_view, error_callback, data); 4415 1.1 mrg names_view_valid = 0; 4416 1.1 mrg 4417 1.7 mrg /* If the debug info is in a separate file, read that one instead. */ 4418 1.7 mrg 4419 1.7 mrg if (buildid_data != NULL) 4420 1.7 mrg { 4421 1.7 mrg int d; 4422 1.7 mrg 4423 1.7 mrg d = elf_open_debugfile_by_buildid (state, buildid_data, buildid_size, 4424 1.7 mrg error_callback, data); 4425 1.7 mrg if (d >= 0) 4426 1.7 mrg { 4427 1.7 mrg int ret; 4428 1.7 mrg 4429 1.10 mrg elf_release_view (state, &buildid_view, error_callback, data); 4430 1.7 mrg if (debuglink_view_valid) 4431 1.10 mrg elf_release_view (state, &debuglink_view, error_callback, data); 4432 1.8 mrg if (debugaltlink_view_valid) 4433 1.10 mrg elf_release_view (state, &debugaltlink_view, error_callback, data); 4434 1.10 mrg ret = elf_add (state, "", d, NULL, 0, base_address, error_callback, 4435 1.10 mrg data, fileline_fn, found_sym, found_dwarf, NULL, 0, 4436 1.10 mrg 1, NULL, 0); 4437 1.7 mrg if (ret < 0) 4438 1.7 mrg backtrace_close (d, error_callback, data); 4439 1.10 mrg else if (descriptor >= 0) 4440 1.7 mrg backtrace_close (descriptor, error_callback, data); 4441 1.7 mrg return ret; 4442 1.7 mrg } 4443 1.7 mrg } 4444 1.7 mrg 4445 1.7 mrg if (buildid_view_valid) 4446 1.7 mrg { 4447 1.10 mrg elf_release_view (state, &buildid_view, error_callback, data); 4448 1.7 mrg buildid_view_valid = 0; 4449 1.7 mrg } 4450 1.7 mrg 4451 1.7 mrg if (opd) 4452 1.7 mrg { 4453 1.10 mrg elf_release_view (state, &opd->view, error_callback, data); 4454 1.7 mrg opd = NULL; 4455 1.7 mrg } 4456 1.7 mrg 4457 1.7 mrg if (debuglink_name != NULL) 4458 1.7 mrg { 4459 1.7 mrg int d; 4460 1.7 mrg 4461 1.7 mrg d = elf_open_debugfile_by_debuglink (state, filename, debuglink_name, 4462 1.7 mrg debuglink_crc, error_callback, 4463 1.7 mrg data); 4464 1.7 mrg if (d >= 0) 4465 1.7 mrg { 4466 1.7 mrg int ret; 4467 1.7 mrg 4468 1.10 mrg elf_release_view (state, &debuglink_view, error_callback, data); 4469 1.8 mrg if (debugaltlink_view_valid) 4470 1.10 mrg elf_release_view (state, &debugaltlink_view, error_callback, data); 4471 1.10 mrg ret = elf_add (state, "", d, NULL, 0, base_address, error_callback, 4472 1.10 mrg data, fileline_fn, found_sym, found_dwarf, NULL, 0, 4473 1.10 mrg 1, NULL, 0); 4474 1.7 mrg if (ret < 0) 4475 1.7 mrg backtrace_close (d, error_callback, data); 4476 1.10 mrg else if (descriptor >= 0) 4477 1.7 mrg backtrace_close(descriptor, error_callback, data); 4478 1.7 mrg return ret; 4479 1.7 mrg } 4480 1.7 mrg } 4481 1.7 mrg 4482 1.7 mrg if (debuglink_view_valid) 4483 1.7 mrg { 4484 1.10 mrg elf_release_view (state, &debuglink_view, error_callback, data); 4485 1.7 mrg debuglink_view_valid = 0; 4486 1.7 mrg } 4487 1.7 mrg 4488 1.8 mrg struct dwarf_data *fileline_altlink = NULL; 4489 1.8 mrg if (debugaltlink_name != NULL) 4490 1.8 mrg { 4491 1.8 mrg int d; 4492 1.8 mrg 4493 1.8 mrg d = elf_open_debugfile_by_debuglink (state, filename, debugaltlink_name, 4494 1.8 mrg 0, error_callback, data); 4495 1.8 mrg if (d >= 0) 4496 1.8 mrg { 4497 1.8 mrg int ret; 4498 1.8 mrg 4499 1.10 mrg ret = elf_add (state, filename, d, NULL, 0, base_address, 4500 1.10 mrg error_callback, data, fileline_fn, found_sym, 4501 1.10 mrg found_dwarf, &fileline_altlink, 0, 1, 4502 1.10 mrg debugaltlink_buildid_data, debugaltlink_buildid_size); 4503 1.10 mrg elf_release_view (state, &debugaltlink_view, error_callback, data); 4504 1.8 mrg debugaltlink_view_valid = 0; 4505 1.8 mrg if (ret < 0) 4506 1.8 mrg { 4507 1.8 mrg backtrace_close (d, error_callback, data); 4508 1.8 mrg return ret; 4509 1.8 mrg } 4510 1.8 mrg } 4511 1.8 mrg } 4512 1.8 mrg 4513 1.8 mrg if (debugaltlink_view_valid) 4514 1.8 mrg { 4515 1.10 mrg elf_release_view (state, &debugaltlink_view, error_callback, data); 4516 1.8 mrg debugaltlink_view_valid = 0; 4517 1.8 mrg } 4518 1.8 mrg 4519 1.10 mrg if (gnu_debugdata_view_valid) 4520 1.10 mrg { 4521 1.10 mrg int ret; 4522 1.10 mrg 4523 1.10 mrg ret = elf_uncompress_lzma (state, 4524 1.10 mrg ((const unsigned char *) 4525 1.10 mrg gnu_debugdata_view.view.data), 4526 1.10 mrg gnu_debugdata_size, error_callback, data, 4527 1.10 mrg &gnu_debugdata_uncompressed, 4528 1.10 mrg &gnu_debugdata_uncompressed_size); 4529 1.10 mrg 4530 1.10 mrg elf_release_view (state, &gnu_debugdata_view, error_callback, data); 4531 1.10 mrg gnu_debugdata_view_valid = 0; 4532 1.10 mrg 4533 1.10 mrg if (ret) 4534 1.10 mrg { 4535 1.10 mrg ret = elf_add (state, filename, -1, gnu_debugdata_uncompressed, 4536 1.10 mrg gnu_debugdata_uncompressed_size, base_address, 4537 1.10 mrg error_callback, data, fileline_fn, found_sym, 4538 1.10 mrg found_dwarf, NULL, 0, 0, NULL, 0); 4539 1.10 mrg if (ret >= 0 && descriptor >= 0) 4540 1.10 mrg backtrace_close(descriptor, error_callback, data); 4541 1.10 mrg return ret; 4542 1.10 mrg } 4543 1.10 mrg } 4544 1.10 mrg 4545 1.1 mrg /* Read all the debug sections in a single view, since they are 4546 1.9 mrg probably adjacent in the file. If any of sections are 4547 1.9 mrg uncompressed, we never release this view. */ 4548 1.1 mrg 4549 1.1 mrg min_offset = 0; 4550 1.1 mrg max_offset = 0; 4551 1.10 mrg debug_size = 0; 4552 1.1 mrg for (i = 0; i < (int) DEBUG_MAX; ++i) 4553 1.1 mrg { 4554 1.1 mrg off_t end; 4555 1.1 mrg 4556 1.9 mrg if (sections[i].size != 0) 4557 1.9 mrg { 4558 1.9 mrg if (min_offset == 0 || sections[i].offset < min_offset) 4559 1.9 mrg min_offset = sections[i].offset; 4560 1.9 mrg end = sections[i].offset + sections[i].size; 4561 1.9 mrg if (end > max_offset) 4562 1.9 mrg max_offset = end; 4563 1.10 mrg debug_size += sections[i].size; 4564 1.9 mrg } 4565 1.9 mrg if (zsections[i].size != 0) 4566 1.9 mrg { 4567 1.9 mrg if (min_offset == 0 || zsections[i].offset < min_offset) 4568 1.9 mrg min_offset = zsections[i].offset; 4569 1.9 mrg end = zsections[i].offset + zsections[i].size; 4570 1.9 mrg if (end > max_offset) 4571 1.9 mrg max_offset = end; 4572 1.10 mrg debug_size += zsections[i].size; 4573 1.9 mrg } 4574 1.1 mrg } 4575 1.1 mrg if (min_offset == 0 || max_offset == 0) 4576 1.1 mrg { 4577 1.10 mrg if (descriptor >= 0) 4578 1.10 mrg { 4579 1.10 mrg if (!backtrace_close (descriptor, error_callback, data)) 4580 1.10 mrg goto fail; 4581 1.10 mrg } 4582 1.10 mrg return 1; 4583 1.10 mrg } 4584 1.10 mrg 4585 1.10 mrg /* If the total debug section size is large, assume that there are 4586 1.10 mrg gaps between the sections, and read them individually. */ 4587 1.10 mrg 4588 1.10 mrg if (max_offset - min_offset < 0x20000000 4589 1.10 mrg || max_offset - min_offset < debug_size + 0x10000) 4590 1.10 mrg { 4591 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, min_offset, 4592 1.10 mrg max_offset - min_offset, error_callback, data, 4593 1.10 mrg &debug_view)) 4594 1.1 mrg goto fail; 4595 1.10 mrg debug_view_valid = 1; 4596 1.1 mrg } 4597 1.10 mrg else 4598 1.10 mrg { 4599 1.10 mrg memset (&split_debug_view[0], 0, sizeof split_debug_view); 4600 1.10 mrg for (i = 0; i < (int) DEBUG_MAX; ++i) 4601 1.10 mrg { 4602 1.10 mrg struct debug_section_info *dsec; 4603 1.10 mrg 4604 1.10 mrg if (sections[i].size != 0) 4605 1.10 mrg dsec = §ions[i]; 4606 1.10 mrg else if (zsections[i].size != 0) 4607 1.10 mrg dsec = &zsections[i]; 4608 1.10 mrg else 4609 1.10 mrg continue; 4610 1.10 mrg 4611 1.10 mrg if (!elf_get_view (state, descriptor, memory, memory_size, 4612 1.10 mrg dsec->offset, dsec->size, error_callback, data, 4613 1.10 mrg &split_debug_view[i])) 4614 1.10 mrg goto fail; 4615 1.10 mrg split_debug_view_valid[i] = 1; 4616 1.1 mrg 4617 1.10 mrg if (sections[i].size != 0) 4618 1.10 mrg sections[i].data = ((const unsigned char *) 4619 1.10 mrg split_debug_view[i].view.data); 4620 1.10 mrg else 4621 1.10 mrg zsections[i].data = ((const unsigned char *) 4622 1.10 mrg split_debug_view[i].view.data); 4623 1.10 mrg } 4624 1.10 mrg } 4625 1.1 mrg 4626 1.1 mrg /* We've read all we need from the executable. */ 4627 1.10 mrg if (descriptor >= 0) 4628 1.10 mrg { 4629 1.10 mrg if (!backtrace_close (descriptor, error_callback, data)) 4630 1.10 mrg goto fail; 4631 1.10 mrg descriptor = -1; 4632 1.10 mrg } 4633 1.1 mrg 4634 1.7 mrg using_debug_view = 0; 4635 1.10 mrg if (debug_view_valid) 4636 1.1 mrg { 4637 1.10 mrg for (i = 0; i < (int) DEBUG_MAX; ++i) 4638 1.7 mrg { 4639 1.10 mrg if (sections[i].size == 0) 4640 1.10 mrg sections[i].data = NULL; 4641 1.10 mrg else 4642 1.10 mrg { 4643 1.10 mrg sections[i].data = ((const unsigned char *) debug_view.view.data 4644 1.10 mrg + (sections[i].offset - min_offset)); 4645 1.10 mrg ++using_debug_view; 4646 1.10 mrg } 4647 1.10 mrg 4648 1.10 mrg if (zsections[i].size == 0) 4649 1.10 mrg zsections[i].data = NULL; 4650 1.10 mrg else 4651 1.10 mrg zsections[i].data = ((const unsigned char *) debug_view.view.data 4652 1.10 mrg + (zsections[i].offset - min_offset)); 4653 1.7 mrg } 4654 1.7 mrg } 4655 1.7 mrg 4656 1.7 mrg /* Uncompress the old format (--compress-debug-sections=zlib-gnu). */ 4657 1.7 mrg 4658 1.7 mrg zdebug_table = NULL; 4659 1.9 mrg for (i = 0; i < (int) DEBUG_MAX; ++i) 4660 1.7 mrg { 4661 1.9 mrg if (sections[i].size == 0 && zsections[i].size > 0) 4662 1.7 mrg { 4663 1.7 mrg unsigned char *uncompressed_data; 4664 1.7 mrg size_t uncompressed_size; 4665 1.7 mrg 4666 1.7 mrg if (zdebug_table == NULL) 4667 1.7 mrg { 4668 1.7 mrg zdebug_table = ((uint16_t *) 4669 1.7 mrg backtrace_alloc (state, ZDEBUG_TABLE_SIZE, 4670 1.7 mrg error_callback, data)); 4671 1.7 mrg if (zdebug_table == NULL) 4672 1.7 mrg goto fail; 4673 1.7 mrg } 4674 1.7 mrg 4675 1.7 mrg uncompressed_data = NULL; 4676 1.7 mrg uncompressed_size = 0; 4677 1.9 mrg if (!elf_uncompress_zdebug (state, zsections[i].data, 4678 1.9 mrg zsections[i].size, zdebug_table, 4679 1.7 mrg error_callback, data, 4680 1.7 mrg &uncompressed_data, &uncompressed_size)) 4681 1.7 mrg goto fail; 4682 1.7 mrg sections[i].data = uncompressed_data; 4683 1.7 mrg sections[i].size = uncompressed_size; 4684 1.7 mrg sections[i].compressed = 0; 4685 1.10 mrg 4686 1.10 mrg if (split_debug_view_valid[i]) 4687 1.10 mrg { 4688 1.10 mrg elf_release_view (state, &split_debug_view[i], 4689 1.10 mrg error_callback, data); 4690 1.10 mrg split_debug_view_valid[i] = 0; 4691 1.10 mrg } 4692 1.7 mrg } 4693 1.7 mrg } 4694 1.7 mrg 4695 1.7 mrg /* Uncompress the official ELF format 4696 1.7 mrg (--compress-debug-sections=zlib-gabi). */ 4697 1.9 mrg for (i = 0; i < (int) DEBUG_MAX; ++i) 4698 1.7 mrg { 4699 1.7 mrg unsigned char *uncompressed_data; 4700 1.7 mrg size_t uncompressed_size; 4701 1.7 mrg 4702 1.7 mrg if (sections[i].size == 0 || !sections[i].compressed) 4703 1.7 mrg continue; 4704 1.7 mrg 4705 1.7 mrg if (zdebug_table == NULL) 4706 1.7 mrg { 4707 1.7 mrg zdebug_table = ((uint16_t *) 4708 1.7 mrg backtrace_alloc (state, ZDEBUG_TABLE_SIZE, 4709 1.7 mrg error_callback, data)); 4710 1.7 mrg if (zdebug_table == NULL) 4711 1.7 mrg goto fail; 4712 1.7 mrg } 4713 1.7 mrg 4714 1.7 mrg uncompressed_data = NULL; 4715 1.7 mrg uncompressed_size = 0; 4716 1.7 mrg if (!elf_uncompress_chdr (state, sections[i].data, sections[i].size, 4717 1.7 mrg zdebug_table, error_callback, data, 4718 1.7 mrg &uncompressed_data, &uncompressed_size)) 4719 1.7 mrg goto fail; 4720 1.7 mrg sections[i].data = uncompressed_data; 4721 1.7 mrg sections[i].size = uncompressed_size; 4722 1.7 mrg sections[i].compressed = 0; 4723 1.7 mrg 4724 1.10 mrg if (debug_view_valid) 4725 1.10 mrg --using_debug_view; 4726 1.10 mrg else if (split_debug_view_valid[i]) 4727 1.10 mrg { 4728 1.10 mrg elf_release_view (state, &split_debug_view[i], error_callback, data); 4729 1.10 mrg split_debug_view_valid[i] = 0; 4730 1.10 mrg } 4731 1.7 mrg } 4732 1.7 mrg 4733 1.7 mrg if (zdebug_table != NULL) 4734 1.7 mrg backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE, 4735 1.7 mrg error_callback, data); 4736 1.7 mrg 4737 1.7 mrg if (debug_view_valid && using_debug_view == 0) 4738 1.7 mrg { 4739 1.10 mrg elf_release_view (state, &debug_view, error_callback, data); 4740 1.7 mrg debug_view_valid = 0; 4741 1.1 mrg } 4742 1.1 mrg 4743 1.9 mrg for (i = 0; i < (int) DEBUG_MAX; ++i) 4744 1.9 mrg { 4745 1.9 mrg dwarf_sections.data[i] = sections[i].data; 4746 1.9 mrg dwarf_sections.size[i] = sections[i].size; 4747 1.9 mrg } 4748 1.9 mrg 4749 1.9 mrg if (!backtrace_dwarf_add (state, base_address, &dwarf_sections, 4750 1.1 mrg ehdr.e_ident[EI_DATA] == ELFDATA2MSB, 4751 1.8 mrg fileline_altlink, 4752 1.8 mrg error_callback, data, fileline_fn, 4753 1.8 mrg fileline_entry)) 4754 1.1 mrg goto fail; 4755 1.1 mrg 4756 1.1 mrg *found_dwarf = 1; 4757 1.1 mrg 4758 1.1 mrg return 1; 4759 1.1 mrg 4760 1.1 mrg fail: 4761 1.1 mrg if (shdrs_view_valid) 4762 1.10 mrg elf_release_view (state, &shdrs_view, error_callback, data); 4763 1.1 mrg if (names_view_valid) 4764 1.10 mrg elf_release_view (state, &names_view, error_callback, data); 4765 1.1 mrg if (symtab_view_valid) 4766 1.10 mrg elf_release_view (state, &symtab_view, error_callback, data); 4767 1.1 mrg if (strtab_view_valid) 4768 1.10 mrg elf_release_view (state, &strtab_view, error_callback, data); 4769 1.7 mrg if (debuglink_view_valid) 4770 1.10 mrg elf_release_view (state, &debuglink_view, error_callback, data); 4771 1.8 mrg if (debugaltlink_view_valid) 4772 1.10 mrg elf_release_view (state, &debugaltlink_view, error_callback, data); 4773 1.10 mrg if (gnu_debugdata_view_valid) 4774 1.10 mrg elf_release_view (state, &gnu_debugdata_view, error_callback, data); 4775 1.7 mrg if (buildid_view_valid) 4776 1.10 mrg elf_release_view (state, &buildid_view, error_callback, data); 4777 1.1 mrg if (debug_view_valid) 4778 1.10 mrg elf_release_view (state, &debug_view, error_callback, data); 4779 1.10 mrg for (i = 0; i < (int) DEBUG_MAX; ++i) 4780 1.10 mrg { 4781 1.10 mrg if (split_debug_view_valid[i]) 4782 1.10 mrg elf_release_view (state, &split_debug_view[i], error_callback, data); 4783 1.10 mrg } 4784 1.7 mrg if (opd) 4785 1.10 mrg elf_release_view (state, &opd->view, error_callback, data); 4786 1.10 mrg if (descriptor >= 0) 4787 1.1 mrg backtrace_close (descriptor, error_callback, data); 4788 1.1 mrg return 0; 4789 1.1 mrg } 4790 1.1 mrg 4791 1.1 mrg /* Data passed to phdr_callback. */ 4792 1.1 mrg 4793 1.1 mrg struct phdr_data 4794 1.1 mrg { 4795 1.1 mrg struct backtrace_state *state; 4796 1.1 mrg backtrace_error_callback error_callback; 4797 1.1 mrg void *data; 4798 1.1 mrg fileline *fileline_fn; 4799 1.1 mrg int *found_sym; 4800 1.1 mrg int *found_dwarf; 4801 1.7 mrg const char *exe_filename; 4802 1.3 mrg int exe_descriptor; 4803 1.1 mrg }; 4804 1.1 mrg 4805 1.1 mrg /* Callback passed to dl_iterate_phdr. Load debug info from shared 4806 1.1 mrg libraries. */ 4807 1.1 mrg 4808 1.1 mrg static int 4809 1.3 mrg #ifdef __i386__ 4810 1.3 mrg __attribute__ ((__force_align_arg_pointer__)) 4811 1.3 mrg #endif 4812 1.1 mrg phdr_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED, 4813 1.1 mrg void *pdata) 4814 1.1 mrg { 4815 1.1 mrg struct phdr_data *pd = (struct phdr_data *) pdata; 4816 1.7 mrg const char *filename; 4817 1.1 mrg int descriptor; 4818 1.1 mrg int does_not_exist; 4819 1.1 mrg fileline elf_fileline_fn; 4820 1.1 mrg int found_dwarf; 4821 1.1 mrg 4822 1.3 mrg /* There is not much we can do if we don't have the module name, 4823 1.3 mrg unless executable is ET_DYN, where we expect the very first 4824 1.3 mrg phdr_callback to be for the PIE. */ 4825 1.3 mrg if (info->dlpi_name == NULL || info->dlpi_name[0] == '\0') 4826 1.3 mrg { 4827 1.3 mrg if (pd->exe_descriptor == -1) 4828 1.3 mrg return 0; 4829 1.7 mrg filename = pd->exe_filename; 4830 1.3 mrg descriptor = pd->exe_descriptor; 4831 1.3 mrg pd->exe_descriptor = -1; 4832 1.3 mrg } 4833 1.3 mrg else 4834 1.3 mrg { 4835 1.3 mrg if (pd->exe_descriptor != -1) 4836 1.3 mrg { 4837 1.3 mrg backtrace_close (pd->exe_descriptor, pd->error_callback, pd->data); 4838 1.3 mrg pd->exe_descriptor = -1; 4839 1.3 mrg } 4840 1.1 mrg 4841 1.7 mrg filename = info->dlpi_name; 4842 1.3 mrg descriptor = backtrace_open (info->dlpi_name, pd->error_callback, 4843 1.3 mrg pd->data, &does_not_exist); 4844 1.3 mrg if (descriptor < 0) 4845 1.3 mrg return 0; 4846 1.3 mrg } 4847 1.1 mrg 4848 1.10 mrg if (elf_add (pd->state, filename, descriptor, NULL, 0, info->dlpi_addr, 4849 1.7 mrg pd->error_callback, pd->data, &elf_fileline_fn, pd->found_sym, 4850 1.8 mrg &found_dwarf, NULL, 0, 0, NULL, 0)) 4851 1.1 mrg { 4852 1.1 mrg if (found_dwarf) 4853 1.1 mrg { 4854 1.1 mrg *pd->found_dwarf = 1; 4855 1.1 mrg *pd->fileline_fn = elf_fileline_fn; 4856 1.1 mrg } 4857 1.1 mrg } 4858 1.1 mrg 4859 1.1 mrg return 0; 4860 1.1 mrg } 4861 1.1 mrg 4862 1.1 mrg /* Initialize the backtrace data we need from an ELF executable. At 4863 1.1 mrg the ELF level, all we need to do is find the debug info 4864 1.1 mrg sections. */ 4865 1.1 mrg 4866 1.1 mrg int 4867 1.7 mrg backtrace_initialize (struct backtrace_state *state, const char *filename, 4868 1.7 mrg int descriptor, backtrace_error_callback error_callback, 4869 1.1 mrg void *data, fileline *fileline_fn) 4870 1.1 mrg { 4871 1.3 mrg int ret; 4872 1.1 mrg int found_sym; 4873 1.1 mrg int found_dwarf; 4874 1.4 mrg fileline elf_fileline_fn = elf_nodebug; 4875 1.1 mrg struct phdr_data pd; 4876 1.1 mrg 4877 1.10 mrg ret = elf_add (state, filename, descriptor, NULL, 0, 0, error_callback, data, 4878 1.8 mrg &elf_fileline_fn, &found_sym, &found_dwarf, NULL, 1, 0, NULL, 4879 1.8 mrg 0); 4880 1.3 mrg if (!ret) 4881 1.1 mrg return 0; 4882 1.1 mrg 4883 1.1 mrg pd.state = state; 4884 1.1 mrg pd.error_callback = error_callback; 4885 1.1 mrg pd.data = data; 4886 1.3 mrg pd.fileline_fn = &elf_fileline_fn; 4887 1.1 mrg pd.found_sym = &found_sym; 4888 1.1 mrg pd.found_dwarf = &found_dwarf; 4889 1.7 mrg pd.exe_filename = filename; 4890 1.3 mrg pd.exe_descriptor = ret < 0 ? descriptor : -1; 4891 1.1 mrg 4892 1.1 mrg dl_iterate_phdr (phdr_callback, (void *) &pd); 4893 1.1 mrg 4894 1.1 mrg if (!state->threaded) 4895 1.1 mrg { 4896 1.3 mrg if (found_sym) 4897 1.3 mrg state->syminfo_fn = elf_syminfo; 4898 1.3 mrg else if (state->syminfo_fn == NULL) 4899 1.3 mrg state->syminfo_fn = elf_nosyms; 4900 1.1 mrg } 4901 1.1 mrg else 4902 1.1 mrg { 4903 1.1 mrg if (found_sym) 4904 1.3 mrg backtrace_atomic_store_pointer (&state->syminfo_fn, elf_syminfo); 4905 1.3 mrg else 4906 1.4 mrg (void) __sync_bool_compare_and_swap (&state->syminfo_fn, NULL, 4907 1.4 mrg elf_nosyms); 4908 1.1 mrg } 4909 1.1 mrg 4910 1.1 mrg if (!state->threaded) 4911 1.7 mrg *fileline_fn = state->fileline_fn; 4912 1.1 mrg else 4913 1.7 mrg *fileline_fn = backtrace_atomic_load_pointer (&state->fileline_fn); 4914 1.1 mrg 4915 1.7 mrg if (*fileline_fn == NULL || *fileline_fn == elf_nodebug) 4916 1.7 mrg *fileline_fn = elf_fileline_fn; 4917 1.1 mrg 4918 1.1 mrg return 1; 4919 1.1 mrg } 4920