├── README.md ├── tsv2html.rb ├── gen_sizeof.sh ├── binary.h ├── scanner.h ├── Makefile ├── gen_macros.rb ├── cref ├── gen_macros.sh ├── gen_sizeof.rb ├── mach-o ├── fat.h └── loader.h ├── mach ├── vm_prot.h └── machine.h ├── binary.cc ├── scanner.cc ├── dump_debug_info.cc └── sizeof.tsv /README.md: -------------------------------------------------------------------------------- 1 | http://shinh.skr.jp/cref/ 2 | -------------------------------------------------------------------------------- /tsv2html.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'cgi' 4 | 5 | header = $<.gets.split("\t") 6 | puts "

#{header[0]}

" 7 | 8 | puts %Q( 9 | ' 19 | puts tr 20 | end 21 | 22 | puts "
#{header[1..-1].map{|h|'' + h} * ''} 10 | ) 11 | 12 | $<.each do |line| 13 | r = line.split("\t") 14 | tr = "
#{r[0]}" 15 | r[1..-1].each do |c| 16 | tr += "" + CGI.escapeHTML(c) 17 | end 18 | tr += '
" 23 | 24 | 25 | -------------------------------------------------------------------------------- /gen_sizeof.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -ex 4 | 5 | ./dump_debug_info /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.18.so > libc-2.18-x64.json 6 | ./dump_debug_info /usr/lib/debug/lib/i386-linux-gnu/libc-2.18.so > libc-2.18-i686.json 7 | ./dump_debug_info /usr/tmp/eglibc-2.17/build-tree/amd64-x32/libc.so > libc-2.17-x32.json 8 | ./dump_debug_info $NACL_SDK_ROOT/toolchain/linux_x86_glibc/x86_64-nacl/lib64/libc-2.9.so > libc-2.9-nacl-x64.json 9 | ./dump_debug_info $NACL_SDK_ROOT/toolchain/linux_x86_glibc/x86_64-nacl/lib32/libc-2.9.so > libc-2.9-nacl-i686.json 10 | ./gen_sizeof.rb > sizeof.html 11 | -------------------------------------------------------------------------------- /binary.h: -------------------------------------------------------------------------------- 1 | #ifndef BINARY_H_ 2 | #define BINARY_H_ 3 | 4 | #include 5 | 6 | class Binary { 7 | public: 8 | Binary(int fd, char* p, size_t sz, size_t msz); 9 | 10 | char* head; 11 | size_t size; 12 | char* mapped_head; 13 | size_t mapped_size; 14 | const char* debug_info; 15 | const char* debug_abbrev; 16 | const char* debug_str; 17 | size_t debug_info_len; 18 | size_t debug_abbrev_len; 19 | size_t debug_str_len; 20 | bool is_zipped; 21 | size_t reduced_size; 22 | 23 | protected: 24 | int fd_; 25 | }; 26 | 27 | Binary* readBinary(const char* filename); 28 | 29 | #endif // BINARY_H_ 30 | -------------------------------------------------------------------------------- /scanner.h: -------------------------------------------------------------------------------- 1 | #ifndef SCANNER_H_ 2 | #define SCANNER_H_ 3 | 4 | #include 5 | 6 | class Binary; 7 | 8 | struct CU { 9 | uint32_t length; 10 | uint16_t version; 11 | uint32_t abbrev_offset; 12 | uint8_t ptrsize; 13 | } __attribute__((packed)); 14 | 15 | class Scanner { 16 | public: 17 | explicit Scanner(Binary* binary); 18 | 19 | void run(); 20 | 21 | protected: 22 | virtual void onCU(CU* cu, uint64_t offset) = 0; 23 | virtual bool onAbbrev(uint16_t tag, uint64_t number, uint64_t offset) = 0; 24 | virtual void onAbbrevDone() = 0; 25 | virtual void onAttr(uint16_t name, uint8_t form, 26 | uint64_t value, uint64_t offset) = 0; 27 | 28 | Binary* binary_; 29 | }; 30 | 31 | #endif // SCANNER_H_ 32 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CXXFLAGS=-g -O -W -Wall -MMD -I. -I/usr/include/libdwarf 2 | 3 | EXES=dump_debug_info 4 | 5 | TARGETS=$(EXES) macros.html sizeof.html 6 | 7 | all: $(TARGETS) 8 | 9 | check: all 10 | ./runtests.sh 11 | 12 | dump_debug_info: binary.o scanner.o dump_debug_info.o 13 | $(CXX) $(CXXFLAGS) -o $@ $^ 14 | 15 | macros.html: macros.tsv 16 | ./tsv2html.rb $< > $@ 17 | 18 | macros.tsv: libc-2.17-i686.txt ./gen_macros.rb 19 | ./gen_macros.rb > macros.tsv 20 | 21 | libc-2.17-i686.txt: 22 | ./gen_macros.sh || rm $@ 23 | 24 | sizeof.html: sizeof.tsv 25 | ./tsv2html.rb $< > $@ 26 | 27 | sizeof.tsv: libc-2.17-i686.json ./gen_sizeof.rb 28 | ./gen_sizeof.rb > sizeof.tsv 29 | 30 | libc-2.17-i686.json: dump_debug_info 31 | ./gen_sizeof.sh || rm $@ 32 | 33 | clean: 34 | rm -f *.o $(TARGETS) 35 | 36 | -include *.d 37 | -------------------------------------------------------------------------------- /gen_macros.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'cgi' 4 | 5 | TARGETS = %w( 6 | libc-2.18-x64 7 | libc-2.18-i686 8 | libc-2.17-x32 9 | libc-2.9-nacl-x64 10 | libc-2.9-nacl-i686 11 | ) 12 | 13 | all_macros = {} 14 | 15 | TARGETS.each do |target| 16 | all_macros[target] = {} if !all_macros[target] 17 | File.readlines(target + '.txt').each do |line| 18 | line.chomp! 19 | if /^#define (\S+) (.*)/ !~ line 20 | raise line 21 | end 22 | all_macros[target][$1] = $2 23 | end 24 | end 25 | 26 | print "C macros\t" 27 | 28 | puts %Q(#{TARGETS * "\t"}) 29 | 30 | all_macros[TARGETS[0]].sort.each do |name, _| 31 | tr = "#{name}" 32 | TARGETS.each do |target| 33 | value = all_macros[target][name] 34 | if !value 35 | value = '???' 36 | end 37 | tr += "\t" + CGI.escapeHTML(value) 38 | end 39 | puts tr 40 | end 41 | 42 | -------------------------------------------------------------------------------- /cref: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | if ENV['HTTP_HOST'] 4 | require 'cgi' 5 | q = CGI.new 6 | regexp = q['q'].to_s.strip 7 | puts "Content-Type: text/plain\r\n\r\n" 8 | else 9 | regexp = ARGV[0] 10 | if !regexp 11 | STDERR.puts "Usage: cref " 12 | exit 1 13 | end 14 | end 15 | 16 | reg = /(^|\t)#{regexp}(\t|$)/ 17 | 18 | Dir.glob(File.dirname($0) + '/*.tsv').each do |tsv| 19 | lines = File.readlines(tsv) 20 | title, *header = *lines.shift.chomp.split("\t") 21 | 22 | first_tsv = true 23 | lines.each do |line| 24 | line.chomp! 25 | if reg =~ line 26 | if first_tsv 27 | puts "\n=== #{title} ===" 28 | first_tsv = false 29 | end 30 | 31 | puts 32 | name, *values = *line.split("\t") 33 | puts "* #{name}" 34 | header.zip(values).each do |h, v| 35 | puts "#{h}: #{v}" 36 | end 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /gen_macros.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | includes=" 6 | -include assert.h 7 | -include ctype.h 8 | -include elf.h 9 | -include errno.h 10 | -include fcntl.h 11 | -include fenv.h 12 | -include inttypes.h 13 | -include limits.h 14 | -include link.h 15 | -include math.h 16 | -include setjmp.h 17 | -include signal.h 18 | -include stdarg.h 19 | -include stdbool.h 20 | -include stddef.h 21 | -include stdint.h 22 | -include stdio.h 23 | -include stdlib.h 24 | -include string.h 25 | -include sys/epoll.h 26 | -include sys/ioctl.h 27 | -include sys/mman.h 28 | -include sys/ptrace.h 29 | -include sys/stat.h 30 | -include sys/syscall.h 31 | -include sys/time.h 32 | -include sys/types.h 33 | -include time.h 34 | -include unistd.h 35 | " 36 | 37 | g++ -dM -xc++ /dev/null -E `echo $includes` > libc-2.18-x64.txt 38 | g++ -m32 -dM -xc++ /dev/null -E `echo $includes` > libc-2.18-i686.txt 39 | g++ -mx32 -dM -xc++ /dev/null -E `echo $includes` > libc-2.17-x32.txt 40 | $NACL_SDK_ROOT/toolchain/linux_x86_glibc/x86_64-nacl/bin/g++ -m64 -dM -xc++ /dev/null -E `echo $includes` > libc-2.9-nacl-x64.txt 41 | $NACL_SDK_ROOT/toolchain/linux_x86_glibc/x86_64-nacl/bin/g++ -m32 -dM -xc++ /dev/null -E `echo $includes` > libc-2.9-nacl-i686.txt 42 | -------------------------------------------------------------------------------- /gen_sizeof.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'rubygems' 4 | require 'cgi' 5 | require 'json' 6 | 7 | FILENAMES = %w( 8 | libc-2.18-x64.json 9 | libc-2.18-i686.json 10 | libc-2.17-x32.json 11 | libc-2.9-nacl-x64.json 12 | libc-2.9-nacl-i686.json 13 | ) 14 | 15 | all_infos = [] 16 | all_types = {} 17 | FILENAMES.each do |filename| 18 | json = JSON.load(File.read(filename)) 19 | types = {} 20 | all_infos << types 21 | json.each do |cu| 22 | cu_type = cu['type'] 23 | cu_type.each do |name, info| 24 | all_types[name] = 1 25 | 26 | if info[0] == 'struct' && info[1] == 0 27 | next 28 | end 29 | 30 | if types[name] 31 | if (name == '_IO_FILE' || name == '_IO_FILE_plus' || 32 | name == 'helper_file' || name == 'locked_FILE' || 33 | name == 'group' || name == 'area' || name == 'ct_data' || 34 | name == 'known_object' || name == '???') 35 | types[name][1] = [types[name][1], info[1]].max 36 | elsif info != types[name] 37 | raise "#{name} #{info} vs #{types[name]}" 38 | end 39 | else 40 | types[name] = info 41 | end 42 | end 43 | end 44 | end 45 | 46 | print "sizeof(XXX)\t" 47 | 48 | #3.times do |ti| 49 | # puts %Q(

#{['basic types', 'typedefs', 'structs'][ti]}

50 | # 51 | #
#{FILENAMES.map{|fn|'' + fn.sub(/\.json/, '')} * ''} 52 | #) 53 | #end 54 | 55 | puts %Q(#{FILENAMES.map{|fn|fn.sub(/\.json/, '')} * "\t"}) 56 | 57 | all_types.sort_by{|name, _|name == '???' ? '~~~' : name.upcase}.each do |name, _| 58 | tr = "#{name}" 59 | all_infos.each do |types| 60 | info = types[name] 61 | if !info 62 | tr += "\t???" 63 | next 64 | end 65 | 66 | case info[0] 67 | when 'base' 68 | tr += "\t#{info[1]} (basic)" 69 | when 'struct' 70 | tr += "\t#{info[1]} (struct)" 71 | when 'typedef' 72 | real = info 73 | while real && real[0] == 'typedef' 74 | real = types[real[1] =~ /(\*|\[\])$/ ? 'intptr_t' : real[1]] 75 | end 76 | if real 77 | size = real[1] 78 | else 79 | size = '???' 80 | end 81 | tr += "\t#{size} (#{info[1]})" 82 | end 83 | end 84 | puts tr 85 | end 86 | 87 | -------------------------------------------------------------------------------- /mach-o/fat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 3 | * 4 | * @APPLE_LICENSE_HEADER_START@ 5 | * 6 | * This file contains Original Code and/or Modifications of Original Code 7 | * as defined in and that are subject to the Apple Public Source License 8 | * Version 2.0 (the 'License'). You may not use this file except in 9 | * compliance with the License. Please obtain a copy of the License at 10 | * http://www.opensource.apple.com/apsl/ and read it before using this 11 | * file. 12 | * 13 | * The Original Code and all software distributed under the License are 14 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 | * Please see the License for the specific language governing rights and 19 | * limitations under the License. 20 | * 21 | * @APPLE_LICENSE_HEADER_END@ 22 | */ 23 | #ifndef _MACH_O_FAT_H_ 24 | #define _MACH_O_FAT_H_ 25 | /* 26 | * This header file describes the structures of the file format for "fat" 27 | * architecture specific file (wrapper design). At the begining of the file 28 | * there is one fat_header structure followed by a number of fat_arch 29 | * structures. For each architecture in the file, specified by a pair of 30 | * cputype and cpusubtype, the fat_header describes the file offset, file 31 | * size and alignment in the file of the architecture specific member. 32 | * The padded bytes in the file to place each member on it's specific alignment 33 | * are defined to be read as zeros and can be left as "holes" if the file system 34 | * can support them as long as they read as zeros. 35 | * 36 | * All structures defined here are always written and read to/from disk 37 | * in big-endian order. 38 | */ 39 | 40 | /* 41 | * is needed here for the cpu_type_t and cpu_subtype_t types 42 | * and contains the constants for the possible values of these types. 43 | */ 44 | #include 45 | #include 46 | //#include 47 | 48 | #define FAT_MAGIC 0xcafebabe 49 | #define FAT_CIGAM 0xbebafeca /* NXSwapLong(FAT_MAGIC) */ 50 | 51 | struct fat_header { 52 | uint32_t magic; /* FAT_MAGIC */ 53 | uint32_t nfat_arch; /* number of structs that follow */ 54 | }; 55 | 56 | struct fat_arch { 57 | cpu_type_t cputype; /* cpu specifier (int) */ 58 | cpu_subtype_t cpusubtype; /* machine specifier (int) */ 59 | uint32_t offset; /* file offset to this object file */ 60 | uint32_t size; /* size of this object file */ 61 | uint32_t align; /* alignment as a power of 2 */ 62 | }; 63 | 64 | #endif /* _MACH_O_FAT_H_ */ 65 | -------------------------------------------------------------------------------- /mach/vm_prot.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. 3 | * 4 | * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 | * 6 | * This file contains Original Code and/or Modifications of Original Code 7 | * as defined in and that are subject to the Apple Public Source License 8 | * Version 2.0 (the 'License'). You may not use this file except in 9 | * compliance with the License. The rights granted to you under the License 10 | * may not be used to create, or enable the creation or redistribution of, 11 | * unlawful or unlicensed copies of an Apple operating system, or to 12 | * circumvent, violate, or enable the circumvention or violation of, any 13 | * terms of an Apple operating system software license agreement. 14 | * 15 | * Please obtain a copy of the License at 16 | * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 | * 18 | * The Original Code and all software distributed under the License are 19 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 | * Please see the License for the specific language governing rights and 24 | * limitations under the License. 25 | * 26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 | */ 28 | /* 29 | * @OSF_COPYRIGHT@ 30 | */ 31 | /* 32 | * Mach Operating System 33 | * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University 34 | * All Rights Reserved. 35 | * 36 | * Permission to use, copy, modify and distribute this software and its 37 | * documentation is hereby granted, provided that both the copyright 38 | * notice and this permission notice appear in all copies of the 39 | * software, derivative works or modified versions, and any portions 40 | * thereof, and that both notices appear in supporting documentation. 41 | * 42 | * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 43 | * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 44 | * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 45 | * 46 | * Carnegie Mellon requests users of this software to return to 47 | * 48 | * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 49 | * School of Computer Science 50 | * Carnegie Mellon University 51 | * Pittsburgh PA 15213-3890 52 | * 53 | * any improvements or extensions that they make and grant Carnegie Mellon 54 | * the rights to redistribute these changes. 55 | */ 56 | /* 57 | */ 58 | /* 59 | * File: mach/vm_prot.h 60 | * Author: Avadis Tevanian, Jr., Michael Wayne Young 61 | * 62 | * Virtual memory protection definitions. 63 | * 64 | */ 65 | 66 | #ifndef _MACH_VM_PROT_H_ 67 | #define _MACH_VM_PROT_H_ 68 | 69 | /* 70 | * Types defined: 71 | * 72 | * vm_prot_t VM protection values. 73 | */ 74 | 75 | typedef int vm_prot_t; 76 | 77 | /* 78 | * Protection values, defined as bits within the vm_prot_t type 79 | */ 80 | 81 | #define VM_PROT_NONE ((vm_prot_t) 0x00) 82 | 83 | #define VM_PROT_READ ((vm_prot_t) 0x01) /* read permission */ 84 | #define VM_PROT_WRITE ((vm_prot_t) 0x02) /* write permission */ 85 | #define VM_PROT_EXECUTE ((vm_prot_t) 0x04) /* execute permission */ 86 | 87 | /* 88 | * The default protection for newly-created virtual memory 89 | */ 90 | 91 | #define VM_PROT_DEFAULT (VM_PROT_READ|VM_PROT_WRITE) 92 | 93 | /* 94 | * The maximum privileges possible, for parameter checking. 95 | */ 96 | 97 | #define VM_PROT_ALL (VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE) 98 | 99 | /* 100 | * An invalid protection value. 101 | * Used only by memory_object_lock_request to indicate no change 102 | * to page locks. Using -1 here is a bad idea because it 103 | * looks like VM_PROT_ALL and then some. 104 | */ 105 | 106 | #define VM_PROT_NO_CHANGE ((vm_prot_t) 0x08) 107 | 108 | /* 109 | * When a caller finds that he cannot obtain write permission on a 110 | * mapped entry, the following flag can be used. The entry will 111 | * be made "needs copy" effectively copying the object (using COW), 112 | * and write permission will be added to the maximum protections 113 | * for the associated entry. 114 | */ 115 | 116 | #define VM_PROT_COPY ((vm_prot_t) 0x10) 117 | 118 | 119 | /* 120 | * Another invalid protection value. 121 | * Used only by memory_object_data_request upon an object 122 | * which has specified a copy_call copy strategy. It is used 123 | * when the kernel wants a page belonging to a copy of the 124 | * object, and is only asking the object as a result of 125 | * following a shadow chain. This solves the race between pages 126 | * being pushed up by the memory manager and the kernel 127 | * walking down the shadow chain. 128 | */ 129 | 130 | #define VM_PROT_WANTS_COPY ((vm_prot_t) 0x10) 131 | 132 | 133 | #endif /* _MACH_VM_PROT_H_ */ 134 | -------------------------------------------------------------------------------- /binary.cc: -------------------------------------------------------------------------------- 1 | #include "binary.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | #include 15 | 16 | #define Elf_Ehdr Elf64_Ehdr 17 | #define Elf_Shdr Elf64_Shdr 18 | 19 | Binary::Binary(int fd, char* p, size_t sz, size_t msz) 20 | : head(NULL), 21 | size(sz), 22 | mapped_head(p), 23 | mapped_size(msz), 24 | debug_info(NULL), 25 | debug_abbrev(NULL), 26 | debug_str(NULL), 27 | debug_info_len(0), 28 | debug_abbrev_len(0), 29 | debug_str_len(0), 30 | is_zipped(false), 31 | reduced_size(0), 32 | fd_(fd) { 33 | } 34 | 35 | static bool isDwarfZip(char* p) { 36 | return !strncmp(p, "\xdfZIP", 4); 37 | } 38 | 39 | template 40 | struct Elf {}; 41 | template <> 42 | struct Elf<32> { 43 | typedef Elf32_Ehdr Ehdr; 44 | typedef Elf32_Shdr Shdr; 45 | }; 46 | template <> 47 | struct Elf<64> { 48 | typedef Elf64_Ehdr Ehdr; 49 | typedef Elf64_Shdr Shdr; 50 | }; 51 | 52 | template 53 | class ELFBinary : public Binary { 54 | public: 55 | typedef typename Elf::Ehdr Elf_Ehdr; 56 | typedef typename Elf::Shdr Elf_Shdr; 57 | 58 | explicit ELFBinary(const char* filename, 59 | int fd, char* p, size_t sz, size_t msz) 60 | : Binary(fd, p, sz, msz) { 61 | reduced_size = 0; 62 | if (isDwarfZip(p)) { 63 | is_zipped = true; 64 | reduced_size = *(uint32_t*)(p + 4); 65 | p += 8; 66 | } 67 | 68 | head = p; 69 | 70 | Elf_Ehdr* ehdr = (Elf_Ehdr*)p; 71 | if (!ehdr->e_shoff || !ehdr->e_shnum) 72 | err(1, "no section header: %s", filename); 73 | if (!ehdr->e_shstrndx) 74 | err(1, "no section name: %s", filename); 75 | 76 | Elf_Shdr* shdr = (Elf_Shdr*)(p + ehdr->e_shoff - reduced_size); 77 | const char* shstr = (const char*)(p + shdr[ehdr->e_shstrndx].sh_offset); 78 | shstr -= reduced_size; 79 | bool debug_info_seen = false; 80 | for (int i = 0; i < ehdr->e_shnum; i++) { 81 | Elf_Shdr* sec = shdr + i; 82 | const char* pos = p + sec->sh_offset; 83 | if (debug_info_seen) 84 | pos -= reduced_size; 85 | size_t sz = sec->sh_size; 86 | if (!strcmp(shstr + sec->sh_name, ".debug_info")) { 87 | debug_info = pos; 88 | debug_info_len = sz - reduced_size; 89 | debug_info_seen = true; 90 | } else if (!strcmp(shstr + sec->sh_name, ".debug_abbrev")) { 91 | debug_abbrev = pos; 92 | debug_abbrev_len = sz; 93 | } else if (!strcmp(shstr + sec->sh_name, ".debug_str")) { 94 | debug_str = pos; 95 | debug_str_len = sz; 96 | } 97 | } 98 | 99 | if (!debug_info || !debug_abbrev || !debug_str) 100 | err(1, "no debug info: %s", filename); 101 | } 102 | 103 | ~ELFBinary() { 104 | munmap(head, mapped_size); 105 | close(fd_); 106 | } 107 | 108 | static int getELFBit(const char* p) { 109 | if (strncmp(p, ELFMAG, SELFMAG)) 110 | return 0; 111 | if (p[EI_CLASS] == ELFCLASS64) 112 | return 64; 113 | if (p[EI_CLASS] == ELFCLASS32) 114 | return 32; 115 | err(1, "Unknown ELF class"); 116 | } 117 | }; 118 | 119 | #if 0 120 | 121 | #include 122 | 123 | class MachOBinary : public Binary { 124 | public: 125 | explicit MachOBinary(const char* filename, 126 | int fd, char* p, size_t sz, size_t msz) 127 | : Binary(fd, p, sz, msz) { 128 | reduced_size = 0; 129 | if (isDwarfZip(p)) { 130 | is_zipped = true; 131 | reduced_size = *(uint32_t*)(p + 4); 132 | p += 8; 133 | } 134 | 135 | head = p; 136 | 137 | mach_header* header = reinterpret_cast(p); 138 | p += sizeof(mach_header_64); 139 | struct load_command* cmds_ptr = reinterpret_cast(p); 140 | 141 | for (uint32_t i = 0; i < header->ncmds; i++) { 142 | switch (cmds_ptr->cmd) { 143 | case LC_SEGMENT_64: { 144 | segment_command_64* segment = 145 | reinterpret_cast(cmds_ptr); 146 | 147 | section_64* sections = reinterpret_cast( 148 | reinterpret_cast(cmds_ptr) + sizeof(segment_command_64)); 149 | 150 | for (uint32_t j = 0; j < segment->nsects; j++) { 151 | const section_64& sec = sections[j]; 152 | if (strcmp(sec.segname, "__DWARF")) 153 | continue; 154 | const char* pos = head + sec.offset; 155 | size_t sz = sec.size; 156 | if (!strcmp(sec.sectname, "__debug_info")) { 157 | debug_info = pos; 158 | debug_info_len = sz; 159 | } else if (!strcmp(sec.sectname, "__debug_abbrev")) { 160 | debug_abbrev = pos; 161 | debug_abbrev_len = sz; 162 | } else if (!strcmp(sec.sectname, "__debug_str")) { 163 | debug_str = pos; 164 | debug_str_len = sz; 165 | } 166 | } 167 | 168 | break; 169 | } 170 | } 171 | 172 | cmds_ptr = reinterpret_cast( 173 | reinterpret_cast(cmds_ptr) + cmds_ptr->cmdsize); 174 | } 175 | 176 | if (!debug_info || !debug_abbrev || !debug_str) 177 | err(1, "no debug info: %s", filename); 178 | } 179 | 180 | static bool isMachO(const char* p) { 181 | const mach_header* header = reinterpret_cast(p); 182 | if (header->magic == MH_MAGIC_64) { 183 | return true; 184 | } 185 | if (header->magic == MH_MAGIC) { 186 | err(1, "non 64bit Mach-O isn't supported yet"); 187 | } 188 | return false; 189 | } 190 | }; 191 | 192 | #endif 193 | 194 | Binary* readBinary(const char* filename) { 195 | int fd = open(filename, O_RDONLY); 196 | if (fd < 0) 197 | err(1, "open failed: %s", filename); 198 | 199 | size_t size = lseek(fd, 0, SEEK_END); 200 | if (size < 8 + 16) 201 | err(1, "too small file: %s", filename); 202 | 203 | size_t mapped_size = (size + 0xfff) & ~0xfff; 204 | 205 | char* p = (char*)mmap(NULL, mapped_size, 206 | PROT_READ, MAP_SHARED, 207 | fd, 0); 208 | if (p == MAP_FAILED) 209 | err(1, "mmap failed: %s", filename); 210 | 211 | char* header = p; 212 | if (isDwarfZip(header)) { 213 | header += 8; 214 | } 215 | int elf_bit = ELFBinary<32>::getELFBit(header); 216 | if (elf_bit) { 217 | if (elf_bit == 32) 218 | return new ELFBinary<32>(filename, fd, p, size, mapped_size); 219 | else 220 | return new ELFBinary<64>(filename, fd, p, size, mapped_size); 221 | #if 0 222 | } else if (MachOBinary::isMachO(header)) { 223 | return new MachOBinary(filename, fd, p, size, mapped_size); 224 | #endif 225 | } 226 | err(1, "unknown file format: %s", filename); 227 | } 228 | -------------------------------------------------------------------------------- /scanner.cc: -------------------------------------------------------------------------------- 1 | #include "scanner.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | 11 | #include "binary.h" 12 | 13 | using namespace std; 14 | 15 | struct Attr { 16 | uint16_t name; 17 | uint8_t form; 18 | }; 19 | 20 | struct Abbrev { 21 | uint16_t tag; 22 | bool has_children; 23 | vector attrs; 24 | }; 25 | 26 | static uint64_t uleb128(const uint8_t*& p) { 27 | uint64_t r = 0; 28 | int s = 0; 29 | do { 30 | r |= (uint64_t)(*p & 0x7f) << s; 31 | s += 7; 32 | } while (*p++ >= 0x80); 33 | return r; 34 | } 35 | 36 | static int64_t sleb128(const uint8_t*& p) { 37 | int64_t r = 0; 38 | int s = 0; 39 | for (;;) { 40 | uint8_t b = *p++; 41 | if (b < 0x80) { 42 | if (b & 0x40) { 43 | r -= (0x80 - b) << s; 44 | } 45 | else { 46 | r |= (b & 0x3f) << s; 47 | } 48 | break; 49 | } 50 | r |= (b & 0x7f) << s; 51 | s += 7; 52 | } 53 | return r; 54 | } 55 | 56 | template 57 | static void bug(const char* fmt, T v) { 58 | fprintf(stderr, fmt, v); 59 | abort(); 60 | } 61 | 62 | Scanner::Scanner(Binary* binary) 63 | : binary_(binary) { 64 | } 65 | 66 | static void parseAbbrev(const uint8_t* p, vector* abbrevs) { 67 | while (true) { 68 | uint64_t number = uleb128(p); 69 | if (!number) 70 | break; 71 | 72 | abbrevs->resize(number + 1); 73 | Abbrev* abbrev = &(*abbrevs)[number]; 74 | abbrev->tag = uleb128(p); 75 | abbrev->has_children = *p++; 76 | while (true) { 77 | Attr attr; 78 | attr.name = uleb128(p); 79 | attr.form = *p++; 80 | //printf("abbrev attr parsed: %x %x\n", attr.name, attr.form); 81 | if (!attr.name) 82 | break; 83 | abbrev->attrs.push_back(attr); 84 | } 85 | //printf("abbrev parsed: %d %d %d\n", 86 | // abbrev->tag, abbrev->has_children, (int)abbrev->attrs.size()); 87 | } 88 | } 89 | 90 | void Scanner::run() { 91 | const uint8_t* dinfo_start = (const uint8_t*)binary_->debug_info; 92 | const uint8_t* dinfo = (const uint8_t*)binary_->debug_info; 93 | const uint8_t* dabbrev = (const uint8_t*)binary_->debug_abbrev; 94 | // const char* dstr = binary_->debug_str; 95 | const uint8_t* dinfo_end = dinfo + binary_->debug_info_len; 96 | 97 | vector abbrevs; 98 | const uint8_t* p = dinfo; 99 | 100 | while (p + sizeof(CU) < dinfo_end) { 101 | CU* cu = (CU*)p; 102 | if (cu->length == 0 || cu->length == 0xffffffff) { 103 | bug("unimplemented cu length: %x\n", cu->length); 104 | } 105 | 106 | const uint8_t* cu_end = p + cu->length + 4; 107 | 108 | onCU(cu, p - dinfo_start); 109 | p += sizeof(CU); 110 | 111 | abbrevs.clear(); 112 | parseAbbrev(dabbrev + cu->abbrev_offset, &abbrevs); 113 | //printf("COME abbrevs=%d abbrev_offset=%d\n", 114 | // (int)abbrevs.size(), (int)cu->abbrev_offset); 115 | 116 | int depth = 0; 117 | 118 | while (p < cu_end) { 119 | const uint8_t* abb_p = p; 120 | uint64_t abbrev_number = uleb128(p); 121 | //printf("abbrev_number: %d\n", (int)abbrev_number); 122 | assert(abbrev_number < abbrevs.size()); 123 | 124 | if (abbrev_number == 0) { 125 | depth--; 126 | if (depth == 0) 127 | break; 128 | continue; 129 | } 130 | 131 | assert(p < cu_end); 132 | 133 | const Abbrev& abbrev = abbrevs[abbrev_number]; 134 | if (abbrev.has_children) 135 | depth++; 136 | 137 | bool will_care = onAbbrev(abbrev.tag, abbrev_number, 138 | abb_p - dinfo_start); 139 | 140 | for (size_t i = 0; i < abbrev.attrs.size(); i++) { 141 | const uint8_t* attr_p = p; 142 | const Attr attr = abbrev.attrs[i]; 143 | uint64_t value = 0xffffffffffffffff; 144 | //printf("name=%x form=%x\n", attr.name, attr.form); 145 | 146 | switch (attr.form) { 147 | case DW_FORM_addr: 148 | case DW_FORM_ref_addr: 149 | if (binary_->is_zipped && cu->ptrsize == 8) { 150 | value = sleb128(p); 151 | } else { 152 | value = (cu->ptrsize == 8 ? *(uint64_t*)p : 153 | cu->ptrsize == 4 ? *(uint32_t*)p : 154 | cu->ptrsize == 2 ? *(uint16_t*)p : 155 | (bug("Unknown ptrsize: %d\n", cu->ptrsize), 0)); 156 | p += cu->ptrsize; 157 | } 158 | break; 159 | 160 | case DW_FORM_block1: { 161 | value = (uint64_t)p; 162 | uint8_t size = *p++; 163 | p += size; 164 | break; 165 | } 166 | 167 | case DW_FORM_block2: { 168 | value = (uint64_t)p; 169 | uint16_t size = *(uint16_t*)p; 170 | p += 2; 171 | p += size; 172 | break; 173 | } 174 | 175 | case DW_FORM_block4: { 176 | value = (uint64_t)p; 177 | uint32_t size = *(uint32_t*)p; 178 | p += 4; 179 | p += size; 180 | break; 181 | } 182 | 183 | case DW_FORM_block: 184 | case DW_FORM_exprloc: { 185 | value = (uint64_t)p; 186 | uint64_t size = uleb128(p); 187 | p += size; 188 | break; 189 | } 190 | 191 | case DW_FORM_data1: 192 | case DW_FORM_ref1: 193 | case DW_FORM_flag: 194 | value = *p++; 195 | break; 196 | 197 | case DW_FORM_data2: 198 | case DW_FORM_ref2: 199 | value = *(uint16_t*)p; 200 | p += 2; 201 | break; 202 | 203 | case DW_FORM_strp: 204 | case DW_FORM_data4: 205 | case DW_FORM_ref4: 206 | case DW_FORM_sec_offset: 207 | // TODO: Consider offset_size for DW_FORM_strp 208 | if (binary_->is_zipped) { 209 | value = sleb128(p); 210 | } else { 211 | value = *(uint32_t*)p; 212 | p += 4; 213 | } 214 | break; 215 | 216 | case DW_FORM_data8: 217 | case DW_FORM_ref8: 218 | value = *(uint64_t*)p; 219 | p += 8; 220 | break; 221 | 222 | case DW_FORM_string: 223 | value = (uint64_t)p; 224 | p += strlen((char*)p) + 1; 225 | break; 226 | 227 | case DW_FORM_sdata: 228 | value = (uint64_t)sleb128(p); 229 | break; 230 | 231 | case DW_FORM_udata: 232 | value = (uint64_t)uleb128(p); 233 | break; 234 | 235 | case DW_FORM_flag_present: 236 | break; 237 | 238 | case DW_FORM_ref_udata: 239 | case DW_FORM_indirect: 240 | case DW_FORM_ref_sig8: 241 | 242 | default: 243 | bug("Unknown DW_FORM: %x\n", attr.form); 244 | } 245 | 246 | if (will_care) 247 | onAttr(attr.name, attr.form, value, attr_p - dinfo_start); 248 | } 249 | if (will_care) 250 | onAbbrevDone(); 251 | } 252 | 253 | if (!binary_->is_zipped) 254 | assert(p == cu_end); 255 | } 256 | 257 | assert(p == dinfo_end); 258 | } 259 | -------------------------------------------------------------------------------- /mach/machine.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2000-2007 Apple Computer, Inc. All rights reserved. 3 | * 4 | * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 | * 6 | * This file contains Original Code and/or Modifications of Original Code 7 | * as defined in and that are subject to the Apple Public Source License 8 | * Version 2.0 (the 'License'). You may not use this file except in 9 | * compliance with the License. The rights granted to you under the License 10 | * may not be used to create, or enable the creation or redistribution of, 11 | * unlawful or unlicensed copies of an Apple operating system, or to 12 | * circumvent, violate, or enable the circumvention or violation of, any 13 | * terms of an Apple operating system software license agreement. 14 | * 15 | * Please obtain a copy of the License at 16 | * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 | * 18 | * The Original Code and all software distributed under the License are 19 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 | * Please see the License for the specific language governing rights and 24 | * limitations under the License. 25 | * 26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 | */ 28 | /* 29 | * Mach Operating System 30 | * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University 31 | * All Rights Reserved. 32 | * 33 | * Permission to use, copy, modify and distribute this software and its 34 | * documentation is hereby granted, provided that both the copyright 35 | * notice and this permission notice appear in all copies of the 36 | * software, derivative works or modified versions, and any portions 37 | * thereof, and that both notices appear in supporting documentation. 38 | * 39 | * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 40 | * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 41 | * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 42 | * 43 | * Carnegie Mellon requests users of this software to return to 44 | * 45 | * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 46 | * School of Computer Science 47 | * Carnegie Mellon University 48 | * Pittsburgh PA 15213-3890 49 | * 50 | * any improvements or extensions that they make and grant Carnegie Mellon 51 | * the rights to redistribute these changes. 52 | */ 53 | /* File: machine.h 54 | * Author: Avadis Tevanian, Jr. 55 | * Date: 1986 56 | * 57 | * Machine independent machine abstraction. 58 | */ 59 | 60 | #ifndef _MACH_MACHINE_H_ 61 | #define _MACH_MACHINE_H_ 62 | 63 | #include 64 | //#include 65 | //#include 66 | 67 | typedef uint32_t integer_t; 68 | 69 | typedef integer_t cpu_type_t; 70 | typedef integer_t cpu_subtype_t; 71 | typedef integer_t cpu_threadtype_t; 72 | 73 | #define CPU_STATE_MAX 4 74 | 75 | #define CPU_STATE_USER 0 76 | #define CPU_STATE_SYSTEM 1 77 | #define CPU_STATE_IDLE 2 78 | #define CPU_STATE_NICE 3 79 | 80 | 81 | 82 | /* 83 | * Capability bits used in the definition of cpu_type. 84 | */ 85 | #define CPU_ARCH_MASK 0xff000000 /* mask for architecture bits */ 86 | #define CPU_ARCH_ABI64 0x01000000 /* 64 bit ABI */ 87 | 88 | /* 89 | * Machine types known by all. 90 | */ 91 | 92 | #define CPU_TYPE_ANY ((cpu_type_t) -1) 93 | 94 | #define CPU_TYPE_VAX ((cpu_type_t) 1) 95 | /* skip ((cpu_type_t) 2) */ 96 | /* skip ((cpu_type_t) 3) */ 97 | /* skip ((cpu_type_t) 4) */ 98 | /* skip ((cpu_type_t) 5) */ 99 | #define CPU_TYPE_MC680x0 ((cpu_type_t) 6) 100 | #define CPU_TYPE_X86 ((cpu_type_t) 7) 101 | #define CPU_TYPE_I386 CPU_TYPE_X86 /* compatibility */ 102 | #define CPU_TYPE_X86_64 (CPU_TYPE_X86 | CPU_ARCH_ABI64) 103 | 104 | /* skip CPU_TYPE_MIPS ((cpu_type_t) 8) */ 105 | /* skip ((cpu_type_t) 9) */ 106 | #define CPU_TYPE_MC98000 ((cpu_type_t) 10) 107 | #define CPU_TYPE_HPPA ((cpu_type_t) 11) 108 | #define CPU_TYPE_ARM ((cpu_type_t) 12) 109 | #define CPU_TYPE_MC88000 ((cpu_type_t) 13) 110 | #define CPU_TYPE_SPARC ((cpu_type_t) 14) 111 | #define CPU_TYPE_I860 ((cpu_type_t) 15) 112 | /* skip CPU_TYPE_ALPHA ((cpu_type_t) 16) */ 113 | /* skip ((cpu_type_t) 17) */ 114 | #define CPU_TYPE_POWERPC ((cpu_type_t) 18) 115 | #define CPU_TYPE_POWERPC64 (CPU_TYPE_POWERPC | CPU_ARCH_ABI64) 116 | 117 | /* 118 | * Machine subtypes (these are defined here, instead of in a machine 119 | * dependent directory, so that any program can get all definitions 120 | * regardless of where is it compiled). 121 | */ 122 | 123 | /* 124 | * Capability bits used in the definition of cpu_subtype. 125 | */ 126 | #define CPU_SUBTYPE_MASK 0xff000000 /* mask for feature flags */ 127 | #define CPU_SUBTYPE_LIB64 0x80000000 /* 64 bit libraries */ 128 | 129 | 130 | /* 131 | * Object files that are hand-crafted to run on any 132 | * implementation of an architecture are tagged with 133 | * CPU_SUBTYPE_MULTIPLE. This functions essentially the same as 134 | * the "ALL" subtype of an architecture except that it allows us 135 | * to easily find object files that may need to be modified 136 | * whenever a new implementation of an architecture comes out. 137 | * 138 | * It is the responsibility of the implementor to make sure the 139 | * software handles unsupported implementations elegantly. 140 | */ 141 | #define CPU_SUBTYPE_MULTIPLE ((cpu_subtype_t) -1) 142 | #define CPU_SUBTYPE_LITTLE_ENDIAN ((cpu_subtype_t) 0) 143 | #define CPU_SUBTYPE_BIG_ENDIAN ((cpu_subtype_t) 1) 144 | 145 | /* 146 | * Machine threadtypes. 147 | * This is none - not defined - for most machine types/subtypes. 148 | */ 149 | #define CPU_THREADTYPE_NONE ((cpu_threadtype_t) 0) 150 | 151 | /* 152 | * VAX subtypes (these do *not* necessary conform to the actual cpu 153 | * ID assigned by DEC available via the SID register). 154 | */ 155 | 156 | #define CPU_SUBTYPE_VAX_ALL ((cpu_subtype_t) 0) 157 | #define CPU_SUBTYPE_VAX780 ((cpu_subtype_t) 1) 158 | #define CPU_SUBTYPE_VAX785 ((cpu_subtype_t) 2) 159 | #define CPU_SUBTYPE_VAX750 ((cpu_subtype_t) 3) 160 | #define CPU_SUBTYPE_VAX730 ((cpu_subtype_t) 4) 161 | #define CPU_SUBTYPE_UVAXI ((cpu_subtype_t) 5) 162 | #define CPU_SUBTYPE_UVAXII ((cpu_subtype_t) 6) 163 | #define CPU_SUBTYPE_VAX8200 ((cpu_subtype_t) 7) 164 | #define CPU_SUBTYPE_VAX8500 ((cpu_subtype_t) 8) 165 | #define CPU_SUBTYPE_VAX8600 ((cpu_subtype_t) 9) 166 | #define CPU_SUBTYPE_VAX8650 ((cpu_subtype_t) 10) 167 | #define CPU_SUBTYPE_VAX8800 ((cpu_subtype_t) 11) 168 | #define CPU_SUBTYPE_UVAXIII ((cpu_subtype_t) 12) 169 | 170 | /* 171 | * 680x0 subtypes 172 | * 173 | * The subtype definitions here are unusual for historical reasons. 174 | * NeXT used to consider 68030 code as generic 68000 code. For 175 | * backwards compatability: 176 | * 177 | * CPU_SUBTYPE_MC68030 symbol has been preserved for source code 178 | * compatability. 179 | * 180 | * CPU_SUBTYPE_MC680x0_ALL has been defined to be the same 181 | * subtype as CPU_SUBTYPE_MC68030 for binary comatability. 182 | * 183 | * CPU_SUBTYPE_MC68030_ONLY has been added to allow new object 184 | * files to be tagged as containing 68030-specific instructions. 185 | */ 186 | 187 | #define CPU_SUBTYPE_MC680x0_ALL ((cpu_subtype_t) 1) 188 | #define CPU_SUBTYPE_MC68030 ((cpu_subtype_t) 1) /* compat */ 189 | #define CPU_SUBTYPE_MC68040 ((cpu_subtype_t) 2) 190 | #define CPU_SUBTYPE_MC68030_ONLY ((cpu_subtype_t) 3) 191 | 192 | /* 193 | * I386 subtypes 194 | */ 195 | 196 | #define CPU_SUBTYPE_INTEL(f, m) ((cpu_subtype_t) (f) + ((m) << 4)) 197 | 198 | #define CPU_SUBTYPE_I386_ALL CPU_SUBTYPE_INTEL(3, 0) 199 | #define CPU_SUBTYPE_386 CPU_SUBTYPE_INTEL(3, 0) 200 | #define CPU_SUBTYPE_486 CPU_SUBTYPE_INTEL(4, 0) 201 | #define CPU_SUBTYPE_486SX CPU_SUBTYPE_INTEL(4, 8) // 8 << 4 = 128 202 | #define CPU_SUBTYPE_586 CPU_SUBTYPE_INTEL(5, 0) 203 | #define CPU_SUBTYPE_PENT CPU_SUBTYPE_INTEL(5, 0) 204 | #define CPU_SUBTYPE_PENTPRO CPU_SUBTYPE_INTEL(6, 1) 205 | #define CPU_SUBTYPE_PENTII_M3 CPU_SUBTYPE_INTEL(6, 3) 206 | #define CPU_SUBTYPE_PENTII_M5 CPU_SUBTYPE_INTEL(6, 5) 207 | #define CPU_SUBTYPE_CELERON CPU_SUBTYPE_INTEL(7, 6) 208 | #define CPU_SUBTYPE_CELERON_MOBILE CPU_SUBTYPE_INTEL(7, 7) 209 | #define CPU_SUBTYPE_PENTIUM_3 CPU_SUBTYPE_INTEL(8, 0) 210 | #define CPU_SUBTYPE_PENTIUM_3_M CPU_SUBTYPE_INTEL(8, 1) 211 | #define CPU_SUBTYPE_PENTIUM_3_XEON CPU_SUBTYPE_INTEL(8, 2) 212 | #define CPU_SUBTYPE_PENTIUM_M CPU_SUBTYPE_INTEL(9, 0) 213 | #define CPU_SUBTYPE_PENTIUM_4 CPU_SUBTYPE_INTEL(10, 0) 214 | #define CPU_SUBTYPE_PENTIUM_4_M CPU_SUBTYPE_INTEL(10, 1) 215 | #define CPU_SUBTYPE_ITANIUM CPU_SUBTYPE_INTEL(11, 0) 216 | #define CPU_SUBTYPE_ITANIUM_2 CPU_SUBTYPE_INTEL(11, 1) 217 | #define CPU_SUBTYPE_XEON CPU_SUBTYPE_INTEL(12, 0) 218 | #define CPU_SUBTYPE_XEON_MP CPU_SUBTYPE_INTEL(12, 1) 219 | 220 | #define CPU_SUBTYPE_INTEL_FAMILY(x) ((x) & 15) 221 | #define CPU_SUBTYPE_INTEL_FAMILY_MAX 15 222 | 223 | #define CPU_SUBTYPE_INTEL_MODEL(x) ((x) >> 4) 224 | #define CPU_SUBTYPE_INTEL_MODEL_ALL 0 225 | 226 | /* 227 | * X86 subtypes. 228 | */ 229 | 230 | #define CPU_SUBTYPE_X86_ALL ((cpu_subtype_t)3) 231 | #define CPU_SUBTYPE_X86_64_ALL ((cpu_subtype_t)3) 232 | #define CPU_SUBTYPE_X86_ARCH1 ((cpu_subtype_t)4) 233 | 234 | 235 | #define CPU_THREADTYPE_INTEL_HTT ((cpu_threadtype_t) 1) 236 | 237 | /* 238 | * Mips subtypes. 239 | */ 240 | 241 | #define CPU_SUBTYPE_MIPS_ALL ((cpu_subtype_t) 0) 242 | #define CPU_SUBTYPE_MIPS_R2300 ((cpu_subtype_t) 1) 243 | #define CPU_SUBTYPE_MIPS_R2600 ((cpu_subtype_t) 2) 244 | #define CPU_SUBTYPE_MIPS_R2800 ((cpu_subtype_t) 3) 245 | #define CPU_SUBTYPE_MIPS_R2000a ((cpu_subtype_t) 4) /* pmax */ 246 | #define CPU_SUBTYPE_MIPS_R2000 ((cpu_subtype_t) 5) 247 | #define CPU_SUBTYPE_MIPS_R3000a ((cpu_subtype_t) 6) /* 3max */ 248 | #define CPU_SUBTYPE_MIPS_R3000 ((cpu_subtype_t) 7) 249 | 250 | /* 251 | * MC98000 (PowerPC) subtypes 252 | */ 253 | #define CPU_SUBTYPE_MC98000_ALL ((cpu_subtype_t) 0) 254 | #define CPU_SUBTYPE_MC98601 ((cpu_subtype_t) 1) 255 | 256 | /* 257 | * HPPA subtypes for Hewlett-Packard HP-PA family of 258 | * risc processors. Port by NeXT to 700 series. 259 | */ 260 | 261 | #define CPU_SUBTYPE_HPPA_ALL ((cpu_subtype_t) 0) 262 | #define CPU_SUBTYPE_HPPA_7100 ((cpu_subtype_t) 0) /* compat */ 263 | #define CPU_SUBTYPE_HPPA_7100LC ((cpu_subtype_t) 1) 264 | 265 | /* 266 | * MC88000 subtypes. 267 | */ 268 | #define CPU_SUBTYPE_MC88000_ALL ((cpu_subtype_t) 0) 269 | #define CPU_SUBTYPE_MC88100 ((cpu_subtype_t) 1) 270 | #define CPU_SUBTYPE_MC88110 ((cpu_subtype_t) 2) 271 | 272 | /* 273 | * SPARC subtypes 274 | */ 275 | #define CPU_SUBTYPE_SPARC_ALL ((cpu_subtype_t) 0) 276 | 277 | /* 278 | * I860 subtypes 279 | */ 280 | #define CPU_SUBTYPE_I860_ALL ((cpu_subtype_t) 0) 281 | #define CPU_SUBTYPE_I860_860 ((cpu_subtype_t) 1) 282 | 283 | /* 284 | * PowerPC subtypes 285 | */ 286 | #define CPU_SUBTYPE_POWERPC_ALL ((cpu_subtype_t) 0) 287 | #define CPU_SUBTYPE_POWERPC_601 ((cpu_subtype_t) 1) 288 | #define CPU_SUBTYPE_POWERPC_602 ((cpu_subtype_t) 2) 289 | #define CPU_SUBTYPE_POWERPC_603 ((cpu_subtype_t) 3) 290 | #define CPU_SUBTYPE_POWERPC_603e ((cpu_subtype_t) 4) 291 | #define CPU_SUBTYPE_POWERPC_603ev ((cpu_subtype_t) 5) 292 | #define CPU_SUBTYPE_POWERPC_604 ((cpu_subtype_t) 6) 293 | #define CPU_SUBTYPE_POWERPC_604e ((cpu_subtype_t) 7) 294 | #define CPU_SUBTYPE_POWERPC_620 ((cpu_subtype_t) 8) 295 | #define CPU_SUBTYPE_POWERPC_750 ((cpu_subtype_t) 9) 296 | #define CPU_SUBTYPE_POWERPC_7400 ((cpu_subtype_t) 10) 297 | #define CPU_SUBTYPE_POWERPC_7450 ((cpu_subtype_t) 11) 298 | #define CPU_SUBTYPE_POWERPC_970 ((cpu_subtype_t) 100) 299 | 300 | /* 301 | * ARM subtypes 302 | */ 303 | #define CPU_SUBTYPE_ARM_ALL ((cpu_subtype_t) 0) 304 | #define CPU_SUBTYPE_ARM_V4T ((cpu_subtype_t) 5) 305 | #define CPU_SUBTYPE_ARM_V6 ((cpu_subtype_t) 6) 306 | #define CPU_SUBTYPE_ARM_V5TEJ ((cpu_subtype_t) 7) 307 | #define CPU_SUBTYPE_ARM_XSCALE ((cpu_subtype_t) 8) 308 | #define CPU_SUBTYPE_ARM_V7 ((cpu_subtype_t) 9) 309 | 310 | /* 311 | * CPU families (sysctl hw.cpufamily) 312 | * 313 | * These are meant to identify the CPU's marketing name - an 314 | * application can map these to (possibly) localized strings. 315 | * NB: the encodings of the CPU families are intentionally arbitrary. 316 | * There is no ordering, and you should never try to deduce whether 317 | * or not some feature is available based on the family. 318 | * Use feature flags (eg, hw.optional.altivec) to test for optional 319 | * functionality. 320 | */ 321 | #define CPUFAMILY_UNKNOWN 0 322 | #define CPUFAMILY_POWERPC_G3 0xcee41549 323 | #define CPUFAMILY_POWERPC_G4 0x77c184ae 324 | #define CPUFAMILY_POWERPC_G5 0xed76d8aa 325 | #define CPUFAMILY_INTEL_6_13 0xaa33392b 326 | #define CPUFAMILY_INTEL_6_14 0x73d67300 /* "Intel Core Solo" and "Intel Core Duo" (32-bit Pentium-M with SSE3) */ 327 | #define CPUFAMILY_INTEL_6_15 0x426f69ef /* "Intel Core 2 Duo" */ 328 | #define CPUFAMILY_INTEL_6_23 0x78ea4fbc /* Penryn */ 329 | #define CPUFAMILY_INTEL_6_26 0x6b5a4cd2 /* Nehalem */ 330 | #define CPUFAMILY_ARM_9 0xe73283ae 331 | #define CPUFAMILY_ARM_11 0x8ff620d8 332 | #define CPUFAMILY_ARM_XSCALE 0x53b005f5 333 | #define CPUFAMILY_ARM_13 0x0cc90e64 334 | 335 | #define CPUFAMILY_INTEL_YONAH CPUFAMILY_INTEL_6_14 336 | #define CPUFAMILY_INTEL_MEROM CPUFAMILY_INTEL_6_15 337 | #define CPUFAMILY_INTEL_PENRYN CPUFAMILY_INTEL_6_23 338 | #define CPUFAMILY_INTEL_NEHALEM CPUFAMILY_INTEL_6_26 339 | 340 | #define CPUFAMILY_INTEL_CORE CPUFAMILY_INTEL_6_14 341 | #define CPUFAMILY_INTEL_CORE2 CPUFAMILY_INTEL_6_15 342 | 343 | #endif /* _MACH_MACHINE_H_ */ 344 | -------------------------------------------------------------------------------- /dump_debug_info.cc: -------------------------------------------------------------------------------- 1 | #define __STDC_FORMAT_MACROS 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | 24 | #include "binary.h" 25 | #include "scanner.h" 26 | 27 | using namespace std; 28 | 29 | static uint64_t offset_; 30 | 31 | #define CHECK(c, ...) if (!(c)) error(__VA_ARGS__) 32 | 33 | void reportImpl(const char* fmt, va_list ap) { 34 | char* str; 35 | vasprintf(&str, fmt, ap); 36 | fprintf(stderr, "%"PRIx64": %s\n", offset_, str); 37 | free(str); 38 | } 39 | 40 | void report(const char* fmt, ...) { 41 | va_list ap; 42 | va_start(ap, fmt); 43 | reportImpl(fmt, ap); 44 | va_end(ap); 45 | } 46 | 47 | void error(const char* fmt, ...) { 48 | va_list ap; 49 | va_start(ap, fmt); 50 | reportImpl(fmt, ap); 51 | va_end(ap); 52 | abort(); 53 | } 54 | 55 | string stringPrintf(const char* fmt, ...) { 56 | va_list ap; 57 | va_start(ap, fmt); 58 | char* str; 59 | vasprintf(&str, fmt, ap); 60 | va_end(ap); 61 | string ret(str); 62 | free(str); 63 | return ret; 64 | } 65 | 66 | static const uint64_t VAARG_OFFSET = (uint64_t)-1; 67 | 68 | bool isSpecialTypeOffset(uint64_t offset) { 69 | return offset == 0 || offset == VAARG_OFFSET; 70 | } 71 | 72 | struct Type { 73 | enum { 74 | TYPE_ERROR, TYPE_BASE, TYPE_TYPEDEF, TYPE_STRUCT, 75 | TYPE_POINTER, TYPE_ARRAY, TYPE_CONST, TYPE_VOLATILE, TYPE_FUNC 76 | }; 77 | int type; 78 | int size; 79 | const char* name; 80 | uint64_t ref; 81 | int cu_id; 82 | uint64_t offset; 83 | Type* ref_type; 84 | 85 | Type(int t) 86 | : type(t), ref(0), ref_type(NULL) {} 87 | Type(int t, int s, const char* n) 88 | : type(t), size(s), name(n), ref(0), ref_type(NULL) {} 89 | Type(int t, const char* n, uint64_t r) 90 | : type(t), name(n), ref(r), ref_type(NULL) {} 91 | 92 | int getSize() const { 93 | if (size) 94 | return size; 95 | if (type == TYPE_TYPEDEF || type == TYPE_CONST || type == TYPE_VOLATILE) 96 | return ref_type->getSize(); 97 | return 0; 98 | } 99 | 100 | string getJson() const { 101 | offset_ = offset; 102 | switch (type) { 103 | case TYPE_BASE: 104 | CHECK(size, "Uknkown size for base"); 105 | return stringPrintf("[\"base\", %d]", size); 106 | case TYPE_TYPEDEF: 107 | return stringPrintf("[\"typedef\", \"%s\"]", getName().c_str()); 108 | case TYPE_STRUCT: 109 | return stringPrintf("[\"struct\", %d]", size); 110 | default: 111 | CHECK(false, "Unsupported type: %d", type); 112 | } 113 | return "???"; 114 | } 115 | 116 | string getName() const { 117 | offset_ = offset; 118 | switch (type) { 119 | case TYPE_BASE: 120 | return name; 121 | case TYPE_TYPEDEF: 122 | // CHECK(ref_type, "Unresolved ref"); 123 | // TODO(hamaji): OK? 124 | return ref_type ? ref_type->getName() : ""; 125 | case TYPE_STRUCT: 126 | if (!name) 127 | return ""; 128 | return name; 129 | case TYPE_POINTER: 130 | if (!ref_type) 131 | return "void*"; 132 | return ref_type->getName() + '*'; 133 | case TYPE_ARRAY: 134 | CHECK(ref_type, "Unresolved ref"); 135 | return ref_type->getName() + "[]"; 136 | case TYPE_CONST: 137 | case TYPE_VOLATILE: 138 | if (!ref_type) 139 | return "void"; 140 | return ref_type->getName(); 141 | case TYPE_FUNC: 142 | return ""; 143 | } 144 | CHECK(false, "Unknown type: %d", type); 145 | return "???"; 146 | } 147 | 148 | }; 149 | 150 | struct Func { 151 | uint64_t ret; 152 | const char* name; 153 | bool external; 154 | vector args; 155 | int cu_id; 156 | uint64_t offset; 157 | }; 158 | 159 | struct DumpCU { 160 | vector funcs; 161 | set types; 162 | }; 163 | 164 | class DumpDebugScanner : public Scanner { 165 | public: 166 | DumpDebugScanner(Binary* binary) 167 | : Scanner(binary), 168 | debug_str_(binary->debug_str), 169 | debug_str_len_(binary->debug_str_len), 170 | cu_cnt_(0), 171 | last_func_(NULL) { 172 | } 173 | 174 | void dump() { 175 | vector cus; 176 | DumpCU* cu = NULL; 177 | int prev_cu_id = 0; 178 | for (size_t i = 0; i < funcs_.size(); i++) { 179 | Func* func = funcs_[i]; 180 | if (!func->name) 181 | continue; 182 | if (!func->external) 183 | continue; 184 | offset_ = func->offset; 185 | 186 | if (prev_cu_id != func->cu_id) { 187 | prev_cu_id = func->cu_id; 188 | cu = new DumpCU; 189 | cus.push_back(cu); 190 | 191 | #if 1 192 | stack types; 193 | for (map::const_iterator iter = types_.begin(); 194 | iter != types_.end(); 195 | ++iter) { 196 | uint64_t type_offset = iter->first; 197 | if (isSpecialTypeOffset(type_offset)) 198 | continue; 199 | Type* type = iter->second; 200 | if (type->cu_id != func->cu_id) 201 | continue; 202 | types.push(type_offset); 203 | } 204 | 205 | while (!types.empty()) { 206 | uint64_t type_offset = types.top(); 207 | types.pop(); 208 | if (isSpecialTypeOffset(type_offset)) 209 | continue; 210 | if (cu->types.insert(type_offset).second) { 211 | Type* type = getTypeFromOffset(type_offset); 212 | if (type->ref) { 213 | Type* ref_type = getTypeFromOffset(type->ref); 214 | type->ref_type = ref_type; 215 | types.push(type->ref); 216 | } 217 | } 218 | } 219 | #endif 220 | } 221 | 222 | cu->funcs.push_back(func); 223 | 224 | #if 0 225 | stack types; 226 | types.push(func->ret); 227 | for (size_t j = 0; j < func->args.size(); j++) 228 | types.push(func->args[j]); 229 | 230 | while (!types.empty()) { 231 | uint64_t type_offset = types.top(); 232 | types.pop(); 233 | if (isSpecialTypeOffset(type_offset)) 234 | continue; 235 | if (cu->types.insert(type_offset).second) { 236 | Type* type = getTypeFromOffset(type_offset); 237 | if (type->ref) { 238 | Type* ref_type = getTypeFromOffset(type->ref); 239 | type->ref_type = ref_type; 240 | types.push(type->ref); 241 | } 242 | } 243 | } 244 | #endif 245 | } 246 | 247 | puts("["); 248 | for (size_t i = 0; i < cus.size(); i++) { 249 | if (i) 250 | puts(","); 251 | puts("{\"type\": {"); 252 | 253 | DumpCU* cu = cus[i]; 254 | 255 | bool is_first = true; 256 | for (set::const_iterator iter = cu->types.begin(); 257 | iter != cu->types.end(); 258 | ++iter) { 259 | Type* type = getTypeFromOffset(*iter); 260 | if (type->name && 261 | (type->type == Type::TYPE_BASE || 262 | type->type == Type::TYPE_TYPEDEF || 263 | type->type == Type::TYPE_STRUCT)) { 264 | if (type->type == Type::TYPE_TYPEDEF && 265 | type->name == type->getName()) 266 | continue; 267 | if (!is_first) 268 | puts(","); 269 | is_first = false; 270 | printf(" \"%s\": %s", type->name, type->getJson().c_str()); 271 | } 272 | } 273 | 274 | puts(""); 275 | puts(" },"); 276 | 277 | puts(" \"func\": {"); 278 | 279 | for (size_t i = 0; i < cu->funcs.size(); i++) { 280 | Func* func = cu->funcs[i]; 281 | string args; 282 | for (size_t j = 0; j < func->args.size(); j++) { 283 | args += stringPrintf(", \"%s\"", 284 | getTypeName(func->args[j]).c_str()); 285 | } 286 | printf(" \"%s\": [\"%s\"%s]%s\n", 287 | func->name, getTypeName(func->ret).c_str(), args.c_str(), 288 | i + 1 == cu->funcs.size() ? "" : ","); 289 | } 290 | 291 | puts(" }"); 292 | 293 | puts("}"); 294 | 295 | delete cu; 296 | } 297 | puts("]"); 298 | } 299 | 300 | private: 301 | virtual void onCU(CU* cu, uint64_t offset) { 302 | offset_ = offset; 303 | last_func_ = NULL; 304 | report("CU: %d len=%x version=%x ptrsize=%x", 305 | cu_cnt_, cu->length, cu->version, cu->ptrsize); 306 | cu_cnt_++; 307 | cu_offset_ = offset; 308 | } 309 | 310 | virtual bool onAbbrev(uint16_t tag, uint64_t /*number*/, uint64_t offset) { 311 | if (tag != DW_TAG_formal_parameter && 312 | tag != DW_TAG_unspecified_parameters) { 313 | last_func_ = NULL; 314 | } 315 | prev_tag_ = tag_; 316 | tag_ = tag; 317 | if (tag == DW_TAG_base_type || 318 | tag == DW_TAG_typedef || 319 | tag == DW_TAG_structure_type || 320 | tag == DW_TAG_union_type || 321 | tag == DW_TAG_enumeration_type || 322 | tag == DW_TAG_pointer_type || 323 | tag == DW_TAG_array_type || 324 | tag == DW_TAG_const_type || 325 | tag == DW_TAG_volatile_type || 326 | tag == DW_TAG_subroutine_type || 327 | tag == DW_TAG_subprogram || 328 | tag == DW_TAG_formal_parameter || 329 | tag == DW_TAG_unspecified_parameters) { 330 | offset_ = offset; 331 | values_.clear(); 332 | return true; 333 | } 334 | return false; 335 | } 336 | 337 | virtual void onAbbrevDone() { 338 | switch (tag_) { 339 | case DW_TAG_base_type: 340 | handleBaseType(); 341 | break; 342 | case DW_TAG_typedef: 343 | handleTypedef(); 344 | break; 345 | case DW_TAG_structure_type: 346 | case DW_TAG_union_type: 347 | case DW_TAG_enumeration_type: 348 | handleStruct(); 349 | break; 350 | case DW_TAG_pointer_type: 351 | handleQualifiler(Type::TYPE_POINTER); 352 | break; 353 | case DW_TAG_array_type: 354 | handleQualifiler(Type::TYPE_ARRAY); 355 | break; 356 | case DW_TAG_const_type: 357 | handleQualifiler(Type::TYPE_CONST); 358 | break; 359 | case DW_TAG_volatile_type: 360 | handleQualifiler(Type::TYPE_VOLATILE); 361 | break; 362 | case DW_TAG_subroutine_type: 363 | handleSubroutine(); 364 | break; 365 | case DW_TAG_subprogram: 366 | handleFunction(); 367 | break; 368 | case DW_TAG_formal_parameter: 369 | if (prev_tag_ == DW_TAG_subprogram || 370 | prev_tag_ == DW_TAG_formal_parameter) { 371 | handleParameter(); 372 | } 373 | break; 374 | case DW_TAG_unspecified_parameters: 375 | if (prev_tag_ == DW_TAG_subprogram || 376 | prev_tag_ == DW_TAG_formal_parameter) { 377 | handleUnspecifiedParameters(); 378 | } 379 | break; 380 | } 381 | } 382 | 383 | virtual void onAttr(uint16_t name, uint8_t /*form*/, uint64_t value, 384 | uint64_t /*offset*/) { 385 | if (!values_.insert(make_pair(name, value)).second) { 386 | fprintf(stderr, "Duplicated name: %d\n", (int)name); 387 | exit(1); 388 | } 389 | } 390 | 391 | void addType(Type* type) { 392 | type->cu_id = cu_cnt_; 393 | type->offset = offset_; 394 | if (!types_.insert(make_pair(offset_, type)).second) { 395 | fprintf(stderr, "Duplicated offset: %"PRIx64"\n", offset_); 396 | exit(1); 397 | } 398 | } 399 | 400 | void handleBaseType() { 401 | uint64_t size = getValue(DW_AT_byte_size); 402 | //uint64_t encoding = getValue(DW_AT_encoding); 403 | const char* name = getStrOrNull(DW_AT_name); 404 | if (!name) 405 | name = "???"; 406 | report("basetype: %s", name); 407 | addType(new Type(Type::TYPE_BASE, size, name)); 408 | } 409 | 410 | void handleTypedef() { 411 | uint64_t type = getType(); 412 | const char* name = getStr(DW_AT_name); 413 | report("typedef: %s", name); 414 | addType(new Type(Type::TYPE_TYPEDEF, name, type)); 415 | } 416 | 417 | void handleStruct() { 418 | uint64_t size = getValueOrZero(DW_AT_byte_size); 419 | const char* name = getStrOrNull(DW_AT_name); 420 | report("struct: %s", name); 421 | addType(new Type(Type::TYPE_STRUCT, size, name)); 422 | } 423 | 424 | void handleQualifiler(int qual) { 425 | uint64_t type = getType(); 426 | const char* name = getStrOrNull(DW_AT_name); 427 | report("qualifier: %s type=%"PRIx64, name, type); 428 | addType(new Type(qual, name, type)); 429 | } 430 | 431 | void handleSubroutine() { 432 | last_func_ = NULL; 433 | addType(new Type(Type::TYPE_FUNC)); 434 | } 435 | 436 | void handleFunction() { 437 | uint64_t ret = getType(); 438 | const char* name = getStrOrNull(DW_AT_name); 439 | uint64_t external = getValueOrZero(DW_AT_external); 440 | if (!name) 441 | return; 442 | report("function: %s ret=%"PRIx64" %"PRIx64, name, ret); 443 | last_func_ = new Func(); 444 | last_func_->ret = ret; 445 | last_func_->name = name; 446 | last_func_->external = external; 447 | last_func_->cu_id = cu_cnt_; 448 | last_func_->offset = offset_; 449 | funcs_.push_back(last_func_); 450 | } 451 | 452 | void handleParameter() { 453 | if (!last_func_) 454 | return; 455 | uint64_t type = getType(); 456 | last_func_->args.push_back(type); 457 | } 458 | 459 | void handleUnspecifiedParameters() { 460 | if (!last_func_) 461 | return; 462 | last_func_->args.push_back(VAARG_OFFSET); 463 | } 464 | 465 | const char* getStr(int name) const { 466 | uint64_t v = getValue(name); 467 | if (v >= debug_str_len_) 468 | return (const char*)v; 469 | else 470 | return debug_str_ + v; 471 | } 472 | 473 | const char* getStrOrNull(int name) const { 474 | uint64_t v = getValueOrZero(name); 475 | if (!v) 476 | return NULL; 477 | if (v >= debug_str_len_) 478 | return (const char*)v; 479 | else 480 | return debug_str_ + v; 481 | } 482 | 483 | uint64_t getType() const { 484 | uint64_t v = getValueOrZero(DW_AT_type); 485 | if (!v) 486 | return v; 487 | return v + cu_offset_; 488 | } 489 | 490 | Type* getTypeFromOffset(uint64_t offset) const { 491 | map::const_iterator found = types_.find(offset); 492 | CHECK(found != types_.end(), "Type %"PRIx64" not found", offset); 493 | return found->second; 494 | } 495 | 496 | uint64_t getValue(int name) const { 497 | map::const_iterator found = values_.find(name); 498 | CHECK(found != values_.end(), "Name not found: %d", name); 499 | return found->second; 500 | } 501 | 502 | uint64_t getValueOrZero(int name) const { 503 | map::const_iterator found = values_.find(name); 504 | return found != values_.end() ? found->second : 0; 505 | } 506 | 507 | string getTypeName(uint64_t offset) const { 508 | if (!offset) 509 | return "void"; 510 | if (offset == VAARG_OFFSET) 511 | return "..."; 512 | return getTypeFromOffset(offset)->getName(); 513 | } 514 | 515 | const char* debug_str_; 516 | size_t debug_str_len_; 517 | 518 | int cu_cnt_; 519 | uint64_t cu_offset_; 520 | 521 | map types_; 522 | vector funcs_; 523 | Func* last_func_; 524 | 525 | uint16_t tag_; 526 | uint16_t prev_tag_; 527 | map values_; 528 | }; 529 | 530 | static const int HEADER_SIZE = 8; 531 | 532 | int main(int argc, char* argv[]) { 533 | const char* argv0 = argv[0]; 534 | for (int i = 1; i < argc; i++) { 535 | if (argv[i][0] != '-') { 536 | continue; 537 | } 538 | fprintf(stderr, "Unknown option: %s\n", argv[i]); 539 | argc--; 540 | argv++; 541 | } 542 | 543 | if (argc < 2) { 544 | fprintf(stderr, "Usage: %s binary\n", argv0); 545 | exit(1); 546 | } 547 | 548 | auto_ptr binary(readBinary(argv[1])); 549 | 550 | DumpDebugScanner dumper(binary.get()); 551 | dumper.run(); 552 | dumper.dump(); 553 | } 554 | -------------------------------------------------------------------------------- /mach-o/loader.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 1999-2008 Apple Inc. All Rights Reserved. 3 | * 4 | * @APPLE_LICENSE_HEADER_START@ 5 | * 6 | * This file contains Original Code and/or Modifications of Original Code 7 | * as defined in and that are subject to the Apple Public Source License 8 | * Version 2.0 (the 'License'). You may not use this file except in 9 | * compliance with the License. Please obtain a copy of the License at 10 | * http://www.opensource.apple.com/apsl/ and read it before using this 11 | * file. 12 | * 13 | * The Original Code and all software distributed under the License are 14 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 | * Please see the License for the specific language governing rights and 19 | * limitations under the License. 20 | * 21 | * @APPLE_LICENSE_HEADER_END@ 22 | */ 23 | #ifndef _MACHO_LOADER_H_ 24 | #define _MACHO_LOADER_H_ 25 | 26 | /* 27 | * This file describes the format of mach object files. 28 | */ 29 | #include 30 | 31 | /* 32 | * is needed here for the cpu_type_t and cpu_subtype_t types 33 | * and contains the constants for the possible values of these types. 34 | */ 35 | #include 36 | 37 | /* 38 | * is needed here for the vm_prot_t type and contains the 39 | * constants that are or'ed together for the possible values of this type. 40 | */ 41 | #include 42 | 43 | /* 44 | * is expected to define the flavors of the thread 45 | * states and the structures of those flavors for each machine. 46 | */ 47 | //#include 48 | //#include 49 | 50 | /* 51 | * The 32-bit mach header appears at the very beginning of the object file for 52 | * 32-bit architectures. 53 | */ 54 | struct mach_header { 55 | uint32_t magic; /* mach magic number identifier */ 56 | cpu_type_t cputype; /* cpu specifier */ 57 | cpu_subtype_t cpusubtype; /* machine specifier */ 58 | uint32_t filetype; /* type of file */ 59 | uint32_t ncmds; /* number of load commands */ 60 | uint32_t sizeofcmds; /* the size of all the load commands */ 61 | uint32_t flags; /* flags */ 62 | }; 63 | 64 | /* Constant for the magic field of the mach_header (32-bit architectures) */ 65 | #define MH_MAGIC 0xfeedface /* the mach magic number */ 66 | #define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */ 67 | 68 | /* 69 | * The 64-bit mach header appears at the very beginning of object files for 70 | * 64-bit architectures. 71 | */ 72 | struct mach_header_64 { 73 | uint32_t magic; /* mach magic number identifier */ 74 | cpu_type_t cputype; /* cpu specifier */ 75 | cpu_subtype_t cpusubtype; /* machine specifier */ 76 | uint32_t filetype; /* type of file */ 77 | uint32_t ncmds; /* number of load commands */ 78 | uint32_t sizeofcmds; /* the size of all the load commands */ 79 | uint32_t flags; /* flags */ 80 | uint32_t reserved; /* reserved */ 81 | }; 82 | 83 | /* Constant for the magic field of the mach_header_64 (64-bit architectures) */ 84 | #define MH_MAGIC_64 0xfeedfacf /* the 64-bit mach magic number */ 85 | #define MH_CIGAM_64 0xcffaedfe /* NXSwapInt(MH_MAGIC_64) */ 86 | 87 | /* 88 | * The layout of the file depends on the filetype. For all but the MH_OBJECT 89 | * file type the segments are padded out and aligned on a segment alignment 90 | * boundary for efficient demand pageing. The MH_EXECUTE, MH_FVMLIB, MH_DYLIB, 91 | * MH_DYLINKER and MH_BUNDLE file types also have the headers included as part 92 | * of their first segment. 93 | * 94 | * The file type MH_OBJECT is a compact format intended as output of the 95 | * assembler and input (and possibly output) of the link editor (the .o 96 | * format). All sections are in one unnamed segment with no segment padding. 97 | * This format is used as an executable format when the file is so small the 98 | * segment padding greatly increases its size. 99 | * 100 | * The file type MH_PRELOAD is an executable format intended for things that 101 | * are not executed under the kernel (proms, stand alones, kernels, etc). The 102 | * format can be executed under the kernel but may demand paged it and not 103 | * preload it before execution. 104 | * 105 | * A core file is in MH_CORE format and can be any in an arbritray legal 106 | * Mach-O file. 107 | * 108 | * Constants for the filetype field of the mach_header 109 | */ 110 | #define MH_OBJECT 0x1 /* relocatable object file */ 111 | #define MH_EXECUTE 0x2 /* demand paged executable file */ 112 | #define MH_FVMLIB 0x3 /* fixed VM shared library file */ 113 | #define MH_CORE 0x4 /* core file */ 114 | #define MH_PRELOAD 0x5 /* preloaded executable file */ 115 | #define MH_DYLIB 0x6 /* dynamically bound shared library */ 116 | #define MH_DYLINKER 0x7 /* dynamic link editor */ 117 | #define MH_BUNDLE 0x8 /* dynamically bound bundle file */ 118 | #define MH_DYLIB_STUB 0x9 /* shared library stub for static */ 119 | /* linking only, no section contents */ 120 | #define MH_DSYM 0xa /* companion file with only debug */ 121 | /* sections */ 122 | #define MH_KEXT_BUNDLE 0xb /* x86_64 kexts */ 123 | 124 | /* Constants for the flags field of the mach_header */ 125 | #define MH_NOUNDEFS 0x1 /* the object file has no undefined 126 | references */ 127 | #define MH_INCRLINK 0x2 /* the object file is the output of an 128 | incremental link against a base file 129 | and can't be link edited again */ 130 | #define MH_DYLDLINK 0x4 /* the object file is input for the 131 | dynamic linker and can't be staticly 132 | link edited again */ 133 | #define MH_BINDATLOAD 0x8 /* the object file's undefined 134 | references are bound by the dynamic 135 | linker when loaded. */ 136 | #define MH_PREBOUND 0x10 /* the file has its dynamic undefined 137 | references prebound. */ 138 | #define MH_SPLIT_SEGS 0x20 /* the file has its read-only and 139 | read-write segments split */ 140 | #define MH_LAZY_INIT 0x40 /* the shared library init routine is 141 | to be run lazily via catching memory 142 | faults to its writeable segments 143 | (obsolete) */ 144 | #define MH_TWOLEVEL 0x80 /* the image is using two-level name 145 | space bindings */ 146 | #define MH_FORCE_FLAT 0x100 /* the executable is forcing all images 147 | to use flat name space bindings */ 148 | #define MH_NOMULTIDEFS 0x200 /* this umbrella guarantees no multiple 149 | defintions of symbols in its 150 | sub-images so the two-level namespace 151 | hints can always be used. */ 152 | #define MH_NOFIXPREBINDING 0x400 /* do not have dyld notify the 153 | prebinding agent about this 154 | executable */ 155 | #define MH_PREBINDABLE 0x800 /* the binary is not prebound but can 156 | have its prebinding redone. only used 157 | when MH_PREBOUND is not set. */ 158 | #define MH_ALLMODSBOUND 0x1000 /* indicates that this binary binds to 159 | all two-level namespace modules of 160 | its dependent libraries. only used 161 | when MH_PREBINDABLE and MH_TWOLEVEL 162 | are both set. */ 163 | #define MH_SUBSECTIONS_VIA_SYMBOLS 0x2000/* safe to divide up the sections into 164 | sub-sections via symbols for dead 165 | code stripping */ 166 | #define MH_CANONICAL 0x4000 /* the binary has been canonicalized 167 | via the unprebind operation */ 168 | #define MH_WEAK_DEFINES 0x8000 /* the final linked image contains 169 | external weak symbols */ 170 | #define MH_BINDS_TO_WEAK 0x10000 /* the final linked image uses 171 | weak symbols */ 172 | 173 | #define MH_ALLOW_STACK_EXECUTION 0x20000/* When this bit is set, all stacks 174 | in the task will be given stack 175 | execution privilege. Only used in 176 | MH_EXECUTE filetypes. */ 177 | #define MH_DEAD_STRIPPABLE_DYLIB 0x400000 /* Only for use on dylibs. When 178 | linking against a dylib that 179 | has this bit set, the static linker 180 | will automatically not create a 181 | LC_LOAD_DYLIB load command to the 182 | dylib if no symbols are being 183 | referenced from the dylib. */ 184 | #define MH_ROOT_SAFE 0x40000 /* When this bit is set, the binary 185 | declares it is safe for use in 186 | processes with uid zero */ 187 | 188 | #define MH_SETUID_SAFE 0x80000 /* When this bit is set, the binary 189 | declares it is safe for use in 190 | processes when issetugid() is true */ 191 | 192 | #define MH_NO_REEXPORTED_DYLIBS 0x100000 /* When this bit is set on a dylib, 193 | the static linker does not need to 194 | examine dependent dylibs to see 195 | if any are re-exported */ 196 | #define MH_PIE 0x200000 /* When this bit is set, the OS will 197 | load the main executable at a 198 | random address. Only used in 199 | MH_EXECUTE filetypes. */ 200 | 201 | /* 202 | * The load commands directly follow the mach_header. The total size of all 203 | * of the commands is given by the sizeofcmds field in the mach_header. All 204 | * load commands must have as their first two fields cmd and cmdsize. The cmd 205 | * field is filled in with a constant for that command type. Each command type 206 | * has a structure specifically for it. The cmdsize field is the size in bytes 207 | * of the particular load command structure plus anything that follows it that 208 | * is a part of the load command (i.e. section structures, strings, etc.). To 209 | * advance to the next load command the cmdsize can be added to the offset or 210 | * pointer of the current load command. The cmdsize for 32-bit architectures 211 | * MUST be a multiple of 4 bytes and for 64-bit architectures MUST be a multiple 212 | * of 8 bytes (these are forever the maximum alignment of any load commands). 213 | * The padded bytes must be zero. All tables in the object file must also 214 | * follow these rules so the file can be memory mapped. Otherwise the pointers 215 | * to these tables will not work well or at all on some machines. With all 216 | * padding zeroed like objects will compare byte for byte. 217 | */ 218 | struct load_command { 219 | uint32_t cmd; /* type of load command */ 220 | uint32_t cmdsize; /* total size of command in bytes */ 221 | }; 222 | 223 | /* 224 | * After MacOS X 10.1 when a new load command is added that is required to be 225 | * understood by the dynamic linker for the image to execute properly the 226 | * LC_REQ_DYLD bit will be or'ed into the load command constant. If the dynamic 227 | * linker sees such a load command it it does not understand will issue a 228 | * "unknown load command required for execution" error and refuse to use the 229 | * image. Other load commands without this bit that are not understood will 230 | * simply be ignored. 231 | */ 232 | #define LC_REQ_DYLD 0x80000000 233 | 234 | /* Constants for the cmd field of all load commands, the type */ 235 | #define LC_SEGMENT 0x1 /* segment of this file to be mapped */ 236 | #define LC_SYMTAB 0x2 /* link-edit stab symbol table info */ 237 | #define LC_SYMSEG 0x3 /* link-edit gdb symbol table info (obsolete) */ 238 | #define LC_THREAD 0x4 /* thread */ 239 | #define LC_UNIXTHREAD 0x5 /* unix thread (includes a stack) */ 240 | #define LC_LOADFVMLIB 0x6 /* load a specified fixed VM shared library */ 241 | #define LC_IDFVMLIB 0x7 /* fixed VM shared library identification */ 242 | #define LC_IDENT 0x8 /* object identification info (obsolete) */ 243 | #define LC_FVMFILE 0x9 /* fixed VM file inclusion (internal use) */ 244 | #define LC_PREPAGE 0xa /* prepage command (internal use) */ 245 | #define LC_DYSYMTAB 0xb /* dynamic link-edit symbol table info */ 246 | #define LC_LOAD_DYLIB 0xc /* load a dynamically linked shared library */ 247 | #define LC_ID_DYLIB 0xd /* dynamically linked shared lib ident */ 248 | #define LC_LOAD_DYLINKER 0xe /* load a dynamic linker */ 249 | #define LC_ID_DYLINKER 0xf /* dynamic linker identification */ 250 | #define LC_PREBOUND_DYLIB 0x10 /* modules prebound for a dynamically */ 251 | /* linked shared library */ 252 | #define LC_ROUTINES 0x11 /* image routines */ 253 | #define LC_SUB_FRAMEWORK 0x12 /* sub framework */ 254 | #define LC_SUB_UMBRELLA 0x13 /* sub umbrella */ 255 | #define LC_SUB_CLIENT 0x14 /* sub client */ 256 | #define LC_SUB_LIBRARY 0x15 /* sub library */ 257 | #define LC_TWOLEVEL_HINTS 0x16 /* two-level namespace lookup hints */ 258 | #define LC_PREBIND_CKSUM 0x17 /* prebind checksum */ 259 | 260 | /* 261 | * load a dynamically linked shared library that is allowed to be missing 262 | * (all symbols are weak imported). 263 | */ 264 | #define LC_LOAD_WEAK_DYLIB (0x18 | LC_REQ_DYLD) 265 | 266 | #define LC_SEGMENT_64 0x19 /* 64-bit segment of this file to be 267 | mapped */ 268 | #define LC_ROUTINES_64 0x1a /* 64-bit image routines */ 269 | #define LC_UUID 0x1b /* the uuid */ 270 | #define LC_RPATH (0x1c | LC_REQ_DYLD) /* runpath additions */ 271 | #define LC_CODE_SIGNATURE 0x1d /* local of code signature */ 272 | #define LC_SEGMENT_SPLIT_INFO 0x1e /* local of info to split segments */ 273 | #define LC_REEXPORT_DYLIB (0x1f | LC_REQ_DYLD) /* load and re-export dylib */ 274 | #define LC_LAZY_LOAD_DYLIB 0x20 /* delay load of dylib until first use */ 275 | #define LC_ENCRYPTION_INFO 0x21 /* encrypted segment information */ 276 | #define LC_DYLD_INFO 0x22 /* compressed dyld information */ 277 | #define LC_DYLD_INFO_ONLY (0x22|LC_REQ_DYLD) /* compressed dyld information only */ 278 | 279 | /* 280 | * A variable length string in a load command is represented by an lc_str 281 | * union. The strings are stored just after the load command structure and 282 | * the offset is from the start of the load command structure. The size 283 | * of the string is reflected in the cmdsize field of the load command. 284 | * Once again any padded bytes to bring the cmdsize field to a multiple 285 | * of 4 bytes must be zero. 286 | */ 287 | union lc_str { 288 | uint32_t offset; /* offset to the string */ 289 | #ifndef __LP64__ 290 | char *ptr; /* pointer to the string */ 291 | #endif 292 | }; 293 | 294 | /* 295 | * The segment load command indicates that a part of this file is to be 296 | * mapped into the task's address space. The size of this segment in memory, 297 | * vmsize, maybe equal to or larger than the amount to map from this file, 298 | * filesize. The file is mapped starting at fileoff to the beginning of 299 | * the segment in memory, vmaddr. The rest of the memory of the segment, 300 | * if any, is allocated zero fill on demand. The segment's maximum virtual 301 | * memory protection and initial virtual memory protection are specified 302 | * by the maxprot and initprot fields. If the segment has sections then the 303 | * section structures directly follow the segment command and their size is 304 | * reflected in cmdsize. 305 | */ 306 | struct segment_command { /* for 32-bit architectures */ 307 | uint32_t cmd; /* LC_SEGMENT */ 308 | uint32_t cmdsize; /* includes sizeof section structs */ 309 | char segname[16]; /* segment name */ 310 | uint32_t vmaddr; /* memory address of this segment */ 311 | uint32_t vmsize; /* memory size of this segment */ 312 | uint32_t fileoff; /* file offset of this segment */ 313 | uint32_t filesize; /* amount to map from the file */ 314 | vm_prot_t maxprot; /* maximum VM protection */ 315 | vm_prot_t initprot; /* initial VM protection */ 316 | uint32_t nsects; /* number of sections in segment */ 317 | uint32_t flags; /* flags */ 318 | }; 319 | 320 | /* 321 | * The 64-bit segment load command indicates that a part of this file is to be 322 | * mapped into a 64-bit task's address space. If the 64-bit segment has 323 | * sections then section_64 structures directly follow the 64-bit segment 324 | * command and their size is reflected in cmdsize. 325 | */ 326 | struct segment_command_64 { /* for 64-bit architectures */ 327 | uint32_t cmd; /* LC_SEGMENT_64 */ 328 | uint32_t cmdsize; /* includes sizeof section_64 structs */ 329 | char segname[16]; /* segment name */ 330 | uint64_t vmaddr; /* memory address of this segment */ 331 | uint64_t vmsize; /* memory size of this segment */ 332 | uint64_t fileoff; /* file offset of this segment */ 333 | uint64_t filesize; /* amount to map from the file */ 334 | vm_prot_t maxprot; /* maximum VM protection */ 335 | vm_prot_t initprot; /* initial VM protection */ 336 | uint32_t nsects; /* number of sections in segment */ 337 | uint32_t flags; /* flags */ 338 | }; 339 | 340 | /* Constants for the flags field of the segment_command */ 341 | #define SG_HIGHVM 0x1 /* the file contents for this segment is for 342 | the high part of the VM space, the low part 343 | is zero filled (for stacks in core files) */ 344 | #define SG_FVMLIB 0x2 /* this segment is the VM that is allocated by 345 | a fixed VM library, for overlap checking in 346 | the link editor */ 347 | #define SG_NORELOC 0x4 /* this segment has nothing that was relocated 348 | in it and nothing relocated to it, that is 349 | it maybe safely replaced without relocation*/ 350 | #define SG_PROTECTED_VERSION_1 0x8 /* This segment is protected. If the 351 | segment starts at file offset 0, the 352 | first page of the segment is not 353 | protected. All other pages of the 354 | segment are protected. */ 355 | 356 | /* 357 | * A segment is made up of zero or more sections. Non-MH_OBJECT files have 358 | * all of their segments with the proper sections in each, and padded to the 359 | * specified segment alignment when produced by the link editor. The first 360 | * segment of a MH_EXECUTE and MH_FVMLIB format file contains the mach_header 361 | * and load commands of the object file before its first section. The zero 362 | * fill sections are always last in their segment (in all formats). This 363 | * allows the zeroed segment padding to be mapped into memory where zero fill 364 | * sections might be. The gigabyte zero fill sections, those with the section 365 | * type S_GB_ZEROFILL, can only be in a segment with sections of this type. 366 | * These segments are then placed after all other segments. 367 | * 368 | * The MH_OBJECT format has all of its sections in one segment for 369 | * compactness. There is no padding to a specified segment boundary and the 370 | * mach_header and load commands are not part of the segment. 371 | * 372 | * Sections with the same section name, sectname, going into the same segment, 373 | * segname, are combined by the link editor. The resulting section is aligned 374 | * to the maximum alignment of the combined sections and is the new section's 375 | * alignment. The combined sections are aligned to their original alignment in 376 | * the combined section. Any padded bytes to get the specified alignment are 377 | * zeroed. 378 | * 379 | * The format of the relocation entries referenced by the reloff and nreloc 380 | * fields of the section structure for mach object files is described in the 381 | * header file . 382 | */ 383 | struct section { /* for 32-bit architectures */ 384 | char sectname[16]; /* name of this section */ 385 | char segname[16]; /* segment this section goes in */ 386 | uint32_t addr; /* memory address of this section */ 387 | uint32_t size; /* size in bytes of this section */ 388 | uint32_t offset; /* file offset of this section */ 389 | uint32_t align; /* section alignment (power of 2) */ 390 | uint32_t reloff; /* file offset of relocation entries */ 391 | uint32_t nreloc; /* number of relocation entries */ 392 | uint32_t flags; /* flags (section type and attributes)*/ 393 | uint32_t reserved1; /* reserved (for offset or index) */ 394 | uint32_t reserved2; /* reserved (for count or sizeof) */ 395 | }; 396 | 397 | struct section_64 { /* for 64-bit architectures */ 398 | char sectname[16]; /* name of this section */ 399 | char segname[16]; /* segment this section goes in */ 400 | uint64_t addr; /* memory address of this section */ 401 | uint64_t size; /* size in bytes of this section */ 402 | uint32_t offset; /* file offset of this section */ 403 | uint32_t align; /* section alignment (power of 2) */ 404 | uint32_t reloff; /* file offset of relocation entries */ 405 | uint32_t nreloc; /* number of relocation entries */ 406 | uint32_t flags; /* flags (section type and attributes)*/ 407 | uint32_t reserved1; /* reserved (for offset or index) */ 408 | uint32_t reserved2; /* reserved (for count or sizeof) */ 409 | uint32_t reserved3; /* reserved */ 410 | }; 411 | 412 | /* 413 | * The flags field of a section structure is separated into two parts a section 414 | * type and section attributes. The section types are mutually exclusive (it 415 | * can only have one type) but the section attributes are not (it may have more 416 | * than one attribute). 417 | */ 418 | #define SECTION_TYPE 0x000000ff /* 256 section types */ 419 | #define SECTION_ATTRIBUTES 0xffffff00 /* 24 section attributes */ 420 | 421 | /* Constants for the type of a section */ 422 | #define S_REGULAR 0x0 /* regular section */ 423 | #define S_ZEROFILL 0x1 /* zero fill on demand section */ 424 | #define S_CSTRING_LITERALS 0x2 /* section with only literal C strings*/ 425 | #define S_4BYTE_LITERALS 0x3 /* section with only 4 byte literals */ 426 | #define S_8BYTE_LITERALS 0x4 /* section with only 8 byte literals */ 427 | #define S_LITERAL_POINTERS 0x5 /* section with only pointers to */ 428 | /* literals */ 429 | /* 430 | * For the two types of symbol pointers sections and the symbol stubs section 431 | * they have indirect symbol table entries. For each of the entries in the 432 | * section the indirect symbol table entries, in corresponding order in the 433 | * indirect symbol table, start at the index stored in the reserved1 field 434 | * of the section structure. Since the indirect symbol table entries 435 | * correspond to the entries in the section the number of indirect symbol table 436 | * entries is inferred from the size of the section divided by the size of the 437 | * entries in the section. For symbol pointers sections the size of the entries 438 | * in the section is 4 bytes and for symbol stubs sections the byte size of the 439 | * stubs is stored in the reserved2 field of the section structure. 440 | */ 441 | #define S_NON_LAZY_SYMBOL_POINTERS 0x6 /* section with only non-lazy 442 | symbol pointers */ 443 | #define S_LAZY_SYMBOL_POINTERS 0x7 /* section with only lazy symbol 444 | pointers */ 445 | #define S_SYMBOL_STUBS 0x8 /* section with only symbol 446 | stubs, byte size of stub in 447 | the reserved2 field */ 448 | #define S_MOD_INIT_FUNC_POINTERS 0x9 /* section with only function 449 | pointers for initialization*/ 450 | #define S_MOD_TERM_FUNC_POINTERS 0xa /* section with only function 451 | pointers for termination */ 452 | #define S_COALESCED 0xb /* section contains symbols that 453 | are to be coalesced */ 454 | #define S_GB_ZEROFILL 0xc /* zero fill on demand section 455 | (that can be larger than 4 456 | gigabytes) */ 457 | #define S_INTERPOSING 0xd /* section with only pairs of 458 | function pointers for 459 | interposing */ 460 | #define S_16BYTE_LITERALS 0xe /* section with only 16 byte 461 | literals */ 462 | #define S_DTRACE_DOF 0xf /* section contains 463 | DTrace Object Format */ 464 | #define S_LAZY_DYLIB_SYMBOL_POINTERS 0x10 /* section with only lazy 465 | symbol pointers to lazy 466 | loaded dylibs */ 467 | /* 468 | * Constants for the section attributes part of the flags field of a section 469 | * structure. 470 | */ 471 | #define SECTION_ATTRIBUTES_USR 0xff000000 /* User setable attributes */ 472 | #define S_ATTR_PURE_INSTRUCTIONS 0x80000000 /* section contains only true 473 | machine instructions */ 474 | #define S_ATTR_NO_TOC 0x40000000 /* section contains coalesced 475 | symbols that are not to be 476 | in a ranlib table of 477 | contents */ 478 | #define S_ATTR_STRIP_STATIC_SYMS 0x20000000 /* ok to strip static symbols 479 | in this section in files 480 | with the MH_DYLDLINK flag */ 481 | #define S_ATTR_NO_DEAD_STRIP 0x10000000 /* no dead stripping */ 482 | #define S_ATTR_LIVE_SUPPORT 0x08000000 /* blocks are live if they 483 | reference live blocks */ 484 | #define S_ATTR_SELF_MODIFYING_CODE 0x04000000 /* Used with i386 code stubs 485 | written on by dyld */ 486 | /* 487 | * If a segment contains any sections marked with S_ATTR_DEBUG then all 488 | * sections in that segment must have this attribute. No section other than 489 | * a section marked with this attribute may reference the contents of this 490 | * section. A section with this attribute may contain no symbols and must have 491 | * a section type S_REGULAR. The static linker will not copy section contents 492 | * from sections with this attribute into its output file. These sections 493 | * generally contain DWARF debugging info. 494 | */ 495 | #define S_ATTR_DEBUG 0x02000000 /* a debug section */ 496 | #define SECTION_ATTRIBUTES_SYS 0x00ffff00 /* system setable attributes */ 497 | #define S_ATTR_SOME_INSTRUCTIONS 0x00000400 /* section contains some 498 | machine instructions */ 499 | #define S_ATTR_EXT_RELOC 0x00000200 /* section has external 500 | relocation entries */ 501 | #define S_ATTR_LOC_RELOC 0x00000100 /* section has local 502 | relocation entries */ 503 | 504 | 505 | /* 506 | * The names of segments and sections in them are mostly meaningless to the 507 | * link-editor. But there are few things to support traditional UNIX 508 | * executables that require the link-editor and assembler to use some names 509 | * agreed upon by convention. 510 | * 511 | * The initial protection of the "__TEXT" segment has write protection turned 512 | * off (not writeable). 513 | * 514 | * The link-editor will allocate common symbols at the end of the "__common" 515 | * section in the "__DATA" segment. It will create the section and segment 516 | * if needed. 517 | */ 518 | 519 | /* The currently known segment names and the section names in those segments */ 520 | 521 | #define SEG_PAGEZERO "__PAGEZERO" /* the pagezero segment which has no */ 522 | /* protections and catches NULL */ 523 | /* references for MH_EXECUTE files */ 524 | 525 | 526 | #define SEG_TEXT "__TEXT" /* the tradition UNIX text segment */ 527 | #define SECT_TEXT "__text" /* the real text part of the text */ 528 | /* section no headers, and no padding */ 529 | #define SECT_FVMLIB_INIT0 "__fvmlib_init0" /* the fvmlib initialization */ 530 | /* section */ 531 | #define SECT_FVMLIB_INIT1 "__fvmlib_init1" /* the section following the */ 532 | /* fvmlib initialization */ 533 | /* section */ 534 | 535 | #define SEG_DATA "__DATA" /* the tradition UNIX data segment */ 536 | #define SECT_DATA "__data" /* the real initialized data section */ 537 | /* no padding, no bss overlap */ 538 | #define SECT_BSS "__bss" /* the real uninitialized data section*/ 539 | /* no padding */ 540 | #define SECT_COMMON "__common" /* the section common symbols are */ 541 | /* allocated in by the link editor */ 542 | 543 | #define SEG_OBJC "__OBJC" /* objective-C runtime segment */ 544 | #define SECT_OBJC_SYMBOLS "__symbol_table" /* symbol table */ 545 | #define SECT_OBJC_MODULES "__module_info" /* module information */ 546 | #define SECT_OBJC_STRINGS "__selector_strs" /* string table */ 547 | #define SECT_OBJC_REFS "__selector_refs" /* string table */ 548 | 549 | #define SEG_ICON "__ICON" /* the icon segment */ 550 | #define SECT_ICON_HEADER "__header" /* the icon headers */ 551 | #define SECT_ICON_TIFF "__tiff" /* the icons in tiff format */ 552 | 553 | #define SEG_LINKEDIT "__LINKEDIT" /* the segment containing all structs */ 554 | /* created and maintained by the link */ 555 | /* editor. Created with -seglinkedit */ 556 | /* option to ld(1) for MH_EXECUTE and */ 557 | /* FVMLIB file types only */ 558 | 559 | #define SEG_UNIXSTACK "__UNIXSTACK" /* the unix stack segment */ 560 | 561 | #define SEG_IMPORT "__IMPORT" /* the segment for the self (dyld) */ 562 | /* modifing code stubs that has read, */ 563 | /* write and execute permissions */ 564 | 565 | /* 566 | * Fixed virtual memory shared libraries are identified by two things. The 567 | * target pathname (the name of the library as found for execution), and the 568 | * minor version number. The address of where the headers are loaded is in 569 | * header_addr. (THIS IS OBSOLETE and no longer supported). 570 | */ 571 | struct fvmlib { 572 | union lc_str name; /* library's target pathname */ 573 | uint32_t minor_version; /* library's minor version number */ 574 | uint32_t header_addr; /* library's header address */ 575 | }; 576 | 577 | /* 578 | * A fixed virtual shared library (filetype == MH_FVMLIB in the mach header) 579 | * contains a fvmlib_command (cmd == LC_IDFVMLIB) to identify the library. 580 | * An object that uses a fixed virtual shared library also contains a 581 | * fvmlib_command (cmd == LC_LOADFVMLIB) for each library it uses. 582 | * (THIS IS OBSOLETE and no longer supported). 583 | */ 584 | struct fvmlib_command { 585 | uint32_t cmd; /* LC_IDFVMLIB or LC_LOADFVMLIB */ 586 | uint32_t cmdsize; /* includes pathname string */ 587 | struct fvmlib fvmlib; /* the library identification */ 588 | }; 589 | 590 | /* 591 | * Dynamicly linked shared libraries are identified by two things. The 592 | * pathname (the name of the library as found for execution), and the 593 | * compatibility version number. The pathname must match and the compatibility 594 | * number in the user of the library must be greater than or equal to the 595 | * library being used. The time stamp is used to record the time a library was 596 | * built and copied into user so it can be use to determined if the library used 597 | * at runtime is exactly the same as used to built the program. 598 | */ 599 | struct dylib { 600 | union lc_str name; /* library's path name */ 601 | uint32_t timestamp; /* library's build time stamp */ 602 | uint32_t current_version; /* library's current version number */ 603 | uint32_t compatibility_version; /* library's compatibility vers number*/ 604 | }; 605 | 606 | /* 607 | * A dynamically linked shared library (filetype == MH_DYLIB in the mach header) 608 | * contains a dylib_command (cmd == LC_ID_DYLIB) to identify the library. 609 | * An object that uses a dynamically linked shared library also contains a 610 | * dylib_command (cmd == LC_LOAD_DYLIB, LC_LOAD_WEAK_DYLIB, or 611 | * LC_REEXPORT_DYLIB) for each library it uses. 612 | */ 613 | struct dylib_command { 614 | uint32_t cmd; /* LC_ID_DYLIB, LC_LOAD_{,WEAK_}DYLIB, 615 | LC_REEXPORT_DYLIB */ 616 | uint32_t cmdsize; /* includes pathname string */ 617 | struct dylib dylib; /* the library identification */ 618 | }; 619 | 620 | /* 621 | * A dynamically linked shared library may be a subframework of an umbrella 622 | * framework. If so it will be linked with "-umbrella umbrella_name" where 623 | * Where "umbrella_name" is the name of the umbrella framework. A subframework 624 | * can only be linked against by its umbrella framework or other subframeworks 625 | * that are part of the same umbrella framework. Otherwise the static link 626 | * editor produces an error and states to link against the umbrella framework. 627 | * The name of the umbrella framework for subframeworks is recorded in the 628 | * following structure. 629 | */ 630 | struct sub_framework_command { 631 | uint32_t cmd; /* LC_SUB_FRAMEWORK */ 632 | uint32_t cmdsize; /* includes umbrella string */ 633 | union lc_str umbrella; /* the umbrella framework name */ 634 | }; 635 | 636 | /* 637 | * For dynamically linked shared libraries that are subframework of an umbrella 638 | * framework they can allow clients other than the umbrella framework or other 639 | * subframeworks in the same umbrella framework. To do this the subframework 640 | * is built with "-allowable_client client_name" and an LC_SUB_CLIENT load 641 | * command is created for each -allowable_client flag. The client_name is 642 | * usually a framework name. It can also be a name used for bundles clients 643 | * where the bundle is built with "-client_name client_name". 644 | */ 645 | struct sub_client_command { 646 | uint32_t cmd; /* LC_SUB_CLIENT */ 647 | uint32_t cmdsize; /* includes client string */ 648 | union lc_str client; /* the client name */ 649 | }; 650 | 651 | /* 652 | * A dynamically linked shared library may be a sub_umbrella of an umbrella 653 | * framework. If so it will be linked with "-sub_umbrella umbrella_name" where 654 | * Where "umbrella_name" is the name of the sub_umbrella framework. When 655 | * staticly linking when -twolevel_namespace is in effect a twolevel namespace 656 | * umbrella framework will only cause its subframeworks and those frameworks 657 | * listed as sub_umbrella frameworks to be implicited linked in. Any other 658 | * dependent dynamic libraries will not be linked it when -twolevel_namespace 659 | * is in effect. The primary library recorded by the static linker when 660 | * resolving a symbol in these libraries will be the umbrella framework. 661 | * Zero or more sub_umbrella frameworks may be use by an umbrella framework. 662 | * The name of a sub_umbrella framework is recorded in the following structure. 663 | */ 664 | struct sub_umbrella_command { 665 | uint32_t cmd; /* LC_SUB_UMBRELLA */ 666 | uint32_t cmdsize; /* includes sub_umbrella string */ 667 | union lc_str sub_umbrella; /* the sub_umbrella framework name */ 668 | }; 669 | 670 | /* 671 | * A dynamically linked shared library may be a sub_library of another shared 672 | * library. If so it will be linked with "-sub_library library_name" where 673 | * Where "library_name" is the name of the sub_library shared library. When 674 | * staticly linking when -twolevel_namespace is in effect a twolevel namespace 675 | * shared library will only cause its subframeworks and those frameworks 676 | * listed as sub_umbrella frameworks and libraries listed as sub_libraries to 677 | * be implicited linked in. Any other dependent dynamic libraries will not be 678 | * linked it when -twolevel_namespace is in effect. The primary library 679 | * recorded by the static linker when resolving a symbol in these libraries 680 | * will be the umbrella framework (or dynamic library). Zero or more sub_library 681 | * shared libraries may be use by an umbrella framework or (or dynamic library). 682 | * The name of a sub_library framework is recorded in the following structure. 683 | * For example /usr/lib/libobjc_profile.A.dylib would be recorded as "libobjc". 684 | */ 685 | struct sub_library_command { 686 | uint32_t cmd; /* LC_SUB_LIBRARY */ 687 | uint32_t cmdsize; /* includes sub_library string */ 688 | union lc_str sub_library; /* the sub_library name */ 689 | }; 690 | 691 | /* 692 | * A program (filetype == MH_EXECUTE) that is 693 | * prebound to its dynamic libraries has one of these for each library that 694 | * the static linker used in prebinding. It contains a bit vector for the 695 | * modules in the library. The bits indicate which modules are bound (1) and 696 | * which are not (0) from the library. The bit for module 0 is the low bit 697 | * of the first byte. So the bit for the Nth module is: 698 | * (linked_modules[N/8] >> N%8) & 1 699 | */ 700 | struct prebound_dylib_command { 701 | uint32_t cmd; /* LC_PREBOUND_DYLIB */ 702 | uint32_t cmdsize; /* includes strings */ 703 | union lc_str name; /* library's path name */ 704 | uint32_t nmodules; /* number of modules in library */ 705 | union lc_str linked_modules; /* bit vector of linked modules */ 706 | }; 707 | 708 | /* 709 | * A program that uses a dynamic linker contains a dylinker_command to identify 710 | * the name of the dynamic linker (LC_LOAD_DYLINKER). And a dynamic linker 711 | * contains a dylinker_command to identify the dynamic linker (LC_ID_DYLINKER). 712 | * A file can have at most one of these. 713 | */ 714 | struct dylinker_command { 715 | uint32_t cmd; /* LC_ID_DYLINKER or LC_LOAD_DYLINKER */ 716 | uint32_t cmdsize; /* includes pathname string */ 717 | union lc_str name; /* dynamic linker's path name */ 718 | }; 719 | 720 | /* 721 | * Thread commands contain machine-specific data structures suitable for 722 | * use in the thread state primitives. The machine specific data structures 723 | * follow the struct thread_command as follows. 724 | * Each flavor of machine specific data structure is preceded by an unsigned 725 | * long constant for the flavor of that data structure, an uint32_t 726 | * that is the count of longs of the size of the state data structure and then 727 | * the state data structure follows. This triple may be repeated for many 728 | * flavors. The constants for the flavors, counts and state data structure 729 | * definitions are expected to be in the header file . 730 | * These machine specific data structures sizes must be multiples of 731 | * 4 bytes The cmdsize reflects the total size of the thread_command 732 | * and all of the sizes of the constants for the flavors, counts and state 733 | * data structures. 734 | * 735 | * For executable objects that are unix processes there will be one 736 | * thread_command (cmd == LC_UNIXTHREAD) created for it by the link-editor. 737 | * This is the same as a LC_THREAD, except that a stack is automatically 738 | * created (based on the shell's limit for the stack size). Command arguments 739 | * and environment variables are copied onto that stack. 740 | */ 741 | struct thread_command { 742 | uint32_t cmd; /* LC_THREAD or LC_UNIXTHREAD */ 743 | uint32_t cmdsize; /* total size of this command */ 744 | /* uint32_t flavor flavor of thread state */ 745 | /* uint32_t count count of longs in thread state */ 746 | /* struct XXX_thread_state state thread state for this flavor */ 747 | /* ... */ 748 | }; 749 | 750 | /* 751 | * The routines command contains the address of the dynamic shared library 752 | * initialization routine and an index into the module table for the module 753 | * that defines the routine. Before any modules are used from the library the 754 | * dynamic linker fully binds the module that defines the initialization routine 755 | * and then calls it. This gets called before any module initialization 756 | * routines (used for C++ static constructors) in the library. 757 | */ 758 | struct routines_command { /* for 32-bit architectures */ 759 | uint32_t cmd; /* LC_ROUTINES */ 760 | uint32_t cmdsize; /* total size of this command */ 761 | uint32_t init_address; /* address of initialization routine */ 762 | uint32_t init_module; /* index into the module table that */ 763 | /* the init routine is defined in */ 764 | uint32_t reserved1; 765 | uint32_t reserved2; 766 | uint32_t reserved3; 767 | uint32_t reserved4; 768 | uint32_t reserved5; 769 | uint32_t reserved6; 770 | }; 771 | 772 | /* 773 | * The 64-bit routines command. Same use as above. 774 | */ 775 | struct routines_command_64 { /* for 64-bit architectures */ 776 | uint32_t cmd; /* LC_ROUTINES_64 */ 777 | uint32_t cmdsize; /* total size of this command */ 778 | uint64_t init_address; /* address of initialization routine */ 779 | uint64_t init_module; /* index into the module table that */ 780 | /* the init routine is defined in */ 781 | uint64_t reserved1; 782 | uint64_t reserved2; 783 | uint64_t reserved3; 784 | uint64_t reserved4; 785 | uint64_t reserved5; 786 | uint64_t reserved6; 787 | }; 788 | 789 | /* 790 | * The symtab_command contains the offsets and sizes of the link-edit 4.3BSD 791 | * "stab" style symbol table information as described in the header files 792 | * and . 793 | */ 794 | struct symtab_command { 795 | uint32_t cmd; /* LC_SYMTAB */ 796 | uint32_t cmdsize; /* sizeof(struct symtab_command) */ 797 | uint32_t symoff; /* symbol table offset */ 798 | uint32_t nsyms; /* number of symbol table entries */ 799 | uint32_t stroff; /* string table offset */ 800 | uint32_t strsize; /* string table size in bytes */ 801 | }; 802 | 803 | /* 804 | * This is the second set of the symbolic information which is used to support 805 | * the data structures for the dynamically link editor. 806 | * 807 | * The original set of symbolic information in the symtab_command which contains 808 | * the symbol and string tables must also be present when this load command is 809 | * present. When this load command is present the symbol table is organized 810 | * into three groups of symbols: 811 | * local symbols (static and debugging symbols) - grouped by module 812 | * defined external symbols - grouped by module (sorted by name if not lib) 813 | * undefined external symbols (sorted by name if MH_BINDATLOAD is not set, 814 | * and in order the were seen by the static 815 | * linker if MH_BINDATLOAD is set) 816 | * In this load command there are offsets and counts to each of the three groups 817 | * of symbols. 818 | * 819 | * This load command contains a the offsets and sizes of the following new 820 | * symbolic information tables: 821 | * table of contents 822 | * module table 823 | * reference symbol table 824 | * indirect symbol table 825 | * The first three tables above (the table of contents, module table and 826 | * reference symbol table) are only present if the file is a dynamically linked 827 | * shared library. For executable and object modules, which are files 828 | * containing only one module, the information that would be in these three 829 | * tables is determined as follows: 830 | * table of contents - the defined external symbols are sorted by name 831 | * module table - the file contains only one module so everything in the 832 | * file is part of the module. 833 | * reference symbol table - is the defined and undefined external symbols 834 | * 835 | * For dynamically linked shared library files this load command also contains 836 | * offsets and sizes to the pool of relocation entries for all sections 837 | * separated into two groups: 838 | * external relocation entries 839 | * local relocation entries 840 | * For executable and object modules the relocation entries continue to hang 841 | * off the section structures. 842 | */ 843 | struct dysymtab_command { 844 | uint32_t cmd; /* LC_DYSYMTAB */ 845 | uint32_t cmdsize; /* sizeof(struct dysymtab_command) */ 846 | 847 | /* 848 | * The symbols indicated by symoff and nsyms of the LC_SYMTAB load command 849 | * are grouped into the following three groups: 850 | * local symbols (further grouped by the module they are from) 851 | * defined external symbols (further grouped by the module they are from) 852 | * undefined symbols 853 | * 854 | * The local symbols are used only for debugging. The dynamic binding 855 | * process may have to use them to indicate to the debugger the local 856 | * symbols for a module that is being bound. 857 | * 858 | * The last two groups are used by the dynamic binding process to do the 859 | * binding (indirectly through the module table and the reference symbol 860 | * table when this is a dynamically linked shared library file). 861 | */ 862 | uint32_t ilocalsym; /* index to local symbols */ 863 | uint32_t nlocalsym; /* number of local symbols */ 864 | 865 | uint32_t iextdefsym;/* index to externally defined symbols */ 866 | uint32_t nextdefsym;/* number of externally defined symbols */ 867 | 868 | uint32_t iundefsym; /* index to undefined symbols */ 869 | uint32_t nundefsym; /* number of undefined symbols */ 870 | 871 | /* 872 | * For the for the dynamic binding process to find which module a symbol 873 | * is defined in the table of contents is used (analogous to the ranlib 874 | * structure in an archive) which maps defined external symbols to modules 875 | * they are defined in. This exists only in a dynamically linked shared 876 | * library file. For executable and object modules the defined external 877 | * symbols are sorted by name and is use as the table of contents. 878 | */ 879 | uint32_t tocoff; /* file offset to table of contents */ 880 | uint32_t ntoc; /* number of entries in table of contents */ 881 | 882 | /* 883 | * To support dynamic binding of "modules" (whole object files) the symbol 884 | * table must reflect the modules that the file was created from. This is 885 | * done by having a module table that has indexes and counts into the merged 886 | * tables for each module. The module structure that these two entries 887 | * refer to is described below. This exists only in a dynamically linked 888 | * shared library file. For executable and object modules the file only 889 | * contains one module so everything in the file belongs to the module. 890 | */ 891 | uint32_t modtaboff; /* file offset to module table */ 892 | uint32_t nmodtab; /* number of module table entries */ 893 | 894 | /* 895 | * To support dynamic module binding the module structure for each module 896 | * indicates the external references (defined and undefined) each module 897 | * makes. For each module there is an offset and a count into the 898 | * reference symbol table for the symbols that the module references. 899 | * This exists only in a dynamically linked shared library file. For 900 | * executable and object modules the defined external symbols and the 901 | * undefined external symbols indicates the external references. 902 | */ 903 | uint32_t extrefsymoff; /* offset to referenced symbol table */ 904 | uint32_t nextrefsyms; /* number of referenced symbol table entries */ 905 | 906 | /* 907 | * The sections that contain "symbol pointers" and "routine stubs" have 908 | * indexes and (implied counts based on the size of the section and fixed 909 | * size of the entry) into the "indirect symbol" table for each pointer 910 | * and stub. For every section of these two types the index into the 911 | * indirect symbol table is stored in the section header in the field 912 | * reserved1. An indirect symbol table entry is simply a 32bit index into 913 | * the symbol table to the symbol that the pointer or stub is referring to. 914 | * The indirect symbol table is ordered to match the entries in the section. 915 | */ 916 | uint32_t indirectsymoff; /* file offset to the indirect symbol table */ 917 | uint32_t nindirectsyms; /* number of indirect symbol table entries */ 918 | 919 | /* 920 | * To support relocating an individual module in a library file quickly the 921 | * external relocation entries for each module in the library need to be 922 | * accessed efficiently. Since the relocation entries can't be accessed 923 | * through the section headers for a library file they are separated into 924 | * groups of local and external entries further grouped by module. In this 925 | * case the presents of this load command who's extreloff, nextrel, 926 | * locreloff and nlocrel fields are non-zero indicates that the relocation 927 | * entries of non-merged sections are not referenced through the section 928 | * structures (and the reloff and nreloc fields in the section headers are 929 | * set to zero). 930 | * 931 | * Since the relocation entries are not accessed through the section headers 932 | * this requires the r_address field to be something other than a section 933 | * offset to identify the item to be relocated. In this case r_address is 934 | * set to the offset from the vmaddr of the first LC_SEGMENT command. 935 | * For MH_SPLIT_SEGS images r_address is set to the the offset from the 936 | * vmaddr of the first read-write LC_SEGMENT command. 937 | * 938 | * The relocation entries are grouped by module and the module table 939 | * entries have indexes and counts into them for the group of external 940 | * relocation entries for that the module. 941 | * 942 | * For sections that are merged across modules there must not be any 943 | * remaining external relocation entries for them (for merged sections 944 | * remaining relocation entries must be local). 945 | */ 946 | uint32_t extreloff; /* offset to external relocation entries */ 947 | uint32_t nextrel; /* number of external relocation entries */ 948 | 949 | /* 950 | * All the local relocation entries are grouped together (they are not 951 | * grouped by their module since they are only used if the object is moved 952 | * from it staticly link edited address). 953 | */ 954 | uint32_t locreloff; /* offset to local relocation entries */ 955 | uint32_t nlocrel; /* number of local relocation entries */ 956 | 957 | }; 958 | 959 | /* 960 | * An indirect symbol table entry is simply a 32bit index into the symbol table 961 | * to the symbol that the pointer or stub is refering to. Unless it is for a 962 | * non-lazy symbol pointer section for a defined symbol which strip(1) as 963 | * removed. In which case it has the value INDIRECT_SYMBOL_LOCAL. If the 964 | * symbol was also absolute INDIRECT_SYMBOL_ABS is or'ed with that. 965 | */ 966 | #define INDIRECT_SYMBOL_LOCAL 0x80000000 967 | #define INDIRECT_SYMBOL_ABS 0x40000000 968 | 969 | 970 | /* a table of contents entry */ 971 | struct dylib_table_of_contents { 972 | uint32_t symbol_index; /* the defined external symbol 973 | (index into the symbol table) */ 974 | uint32_t module_index; /* index into the module table this symbol 975 | is defined in */ 976 | }; 977 | 978 | /* a module table entry */ 979 | struct dylib_module { 980 | uint32_t module_name; /* the module name (index into string table) */ 981 | 982 | uint32_t iextdefsym; /* index into externally defined symbols */ 983 | uint32_t nextdefsym; /* number of externally defined symbols */ 984 | uint32_t irefsym; /* index into reference symbol table */ 985 | uint32_t nrefsym; /* number of reference symbol table entries */ 986 | uint32_t ilocalsym; /* index into symbols for local symbols */ 987 | uint32_t nlocalsym; /* number of local symbols */ 988 | 989 | uint32_t iextrel; /* index into external relocation entries */ 990 | uint32_t nextrel; /* number of external relocation entries */ 991 | 992 | uint32_t iinit_iterm; /* low 16 bits are the index into the init 993 | section, high 16 bits are the index into 994 | the term section */ 995 | uint32_t ninit_nterm; /* low 16 bits are the number of init section 996 | entries, high 16 bits are the number of 997 | term section entries */ 998 | 999 | uint32_t /* for this module address of the start of */ 1000 | objc_module_info_addr; /* the (__OBJC,__module_info) section */ 1001 | uint32_t /* for this module size of */ 1002 | objc_module_info_size; /* the (__OBJC,__module_info) section */ 1003 | }; 1004 | 1005 | /* a 64-bit module table entry */ 1006 | struct dylib_module_64 { 1007 | uint32_t module_name; /* the module name (index into string table) */ 1008 | 1009 | uint32_t iextdefsym; /* index into externally defined symbols */ 1010 | uint32_t nextdefsym; /* number of externally defined symbols */ 1011 | uint32_t irefsym; /* index into reference symbol table */ 1012 | uint32_t nrefsym; /* number of reference symbol table entries */ 1013 | uint32_t ilocalsym; /* index into symbols for local symbols */ 1014 | uint32_t nlocalsym; /* number of local symbols */ 1015 | 1016 | uint32_t iextrel; /* index into external relocation entries */ 1017 | uint32_t nextrel; /* number of external relocation entries */ 1018 | 1019 | uint32_t iinit_iterm; /* low 16 bits are the index into the init 1020 | section, high 16 bits are the index into 1021 | the term section */ 1022 | uint32_t ninit_nterm; /* low 16 bits are the number of init section 1023 | entries, high 16 bits are the number of 1024 | term section entries */ 1025 | 1026 | uint32_t /* for this module size of */ 1027 | objc_module_info_size; /* the (__OBJC,__module_info) section */ 1028 | uint64_t /* for this module address of the start of */ 1029 | objc_module_info_addr; /* the (__OBJC,__module_info) section */ 1030 | }; 1031 | 1032 | /* 1033 | * The entries in the reference symbol table are used when loading the module 1034 | * (both by the static and dynamic link editors) and if the module is unloaded 1035 | * or replaced. Therefore all external symbols (defined and undefined) are 1036 | * listed in the module's reference table. The flags describe the type of 1037 | * reference that is being made. The constants for the flags are defined in 1038 | * as they are also used for symbol table entries. 1039 | */ 1040 | struct dylib_reference { 1041 | uint32_t isym:24, /* index into the symbol table */ 1042 | flags:8; /* flags to indicate the type of reference */ 1043 | }; 1044 | 1045 | /* 1046 | * The twolevel_hints_command contains the offset and number of hints in the 1047 | * two-level namespace lookup hints table. 1048 | */ 1049 | struct twolevel_hints_command { 1050 | uint32_t cmd; /* LC_TWOLEVEL_HINTS */ 1051 | uint32_t cmdsize; /* sizeof(struct twolevel_hints_command) */ 1052 | uint32_t offset; /* offset to the hint table */ 1053 | uint32_t nhints; /* number of hints in the hint table */ 1054 | }; 1055 | 1056 | /* 1057 | * The entries in the two-level namespace lookup hints table are twolevel_hint 1058 | * structs. These provide hints to the dynamic link editor where to start 1059 | * looking for an undefined symbol in a two-level namespace image. The 1060 | * isub_image field is an index into the sub-images (sub-frameworks and 1061 | * sub-umbrellas list) that made up the two-level image that the undefined 1062 | * symbol was found in when it was built by the static link editor. If 1063 | * isub-image is 0 the the symbol is expected to be defined in library and not 1064 | * in the sub-images. If isub-image is non-zero it is an index into the array 1065 | * of sub-images for the umbrella with the first index in the sub-images being 1066 | * 1. The array of sub-images is the ordered list of sub-images of the umbrella 1067 | * that would be searched for a symbol that has the umbrella recorded as its 1068 | * primary library. The table of contents index is an index into the 1069 | * library's table of contents. This is used as the starting point of the 1070 | * binary search or a directed linear search. 1071 | */ 1072 | struct twolevel_hint { 1073 | uint32_t 1074 | isub_image:8, /* index into the sub images */ 1075 | itoc:24; /* index into the table of contents */ 1076 | }; 1077 | 1078 | /* 1079 | * The prebind_cksum_command contains the value of the original check sum for 1080 | * prebound files or zero. When a prebound file is first created or modified 1081 | * for other than updating its prebinding information the value of the check sum 1082 | * is set to zero. When the file has it prebinding re-done and if the value of 1083 | * the check sum is zero the original check sum is calculated and stored in 1084 | * cksum field of this load command in the output file. If when the prebinding 1085 | * is re-done and the cksum field is non-zero it is left unchanged from the 1086 | * input file. 1087 | */ 1088 | struct prebind_cksum_command { 1089 | uint32_t cmd; /* LC_PREBIND_CKSUM */ 1090 | uint32_t cmdsize; /* sizeof(struct prebind_cksum_command) */ 1091 | uint32_t cksum; /* the check sum or zero */ 1092 | }; 1093 | 1094 | /* 1095 | * The uuid load command contains a single 128-bit unique random number that 1096 | * identifies an object produced by the static link editor. 1097 | */ 1098 | struct uuid_command { 1099 | uint32_t cmd; /* LC_UUID */ 1100 | uint32_t cmdsize; /* sizeof(struct uuid_command) */ 1101 | uint8_t uuid[16]; /* the 128-bit uuid */ 1102 | }; 1103 | 1104 | /* 1105 | * The rpath_command contains a path which at runtime should be added to 1106 | * the current run path used to find @rpath prefixed dylibs. 1107 | */ 1108 | struct rpath_command { 1109 | uint32_t cmd; /* LC_RPATH */ 1110 | uint32_t cmdsize; /* includes string */ 1111 | union lc_str path; /* path to add to run path */ 1112 | }; 1113 | 1114 | /* 1115 | * The linkedit_data_command contains the offsets and sizes of a blob 1116 | * of data in the __LINKEDIT segment. 1117 | */ 1118 | struct linkedit_data_command { 1119 | uint32_t cmd; /* LC_CODE_SIGNATURE or LC_SEGMENT_SPLIT_INFO */ 1120 | uint32_t cmdsize; /* sizeof(struct linkedit_data_command) */ 1121 | uint32_t dataoff; /* file offset of data in __LINKEDIT segment */ 1122 | uint32_t datasize; /* file size of data in __LINKEDIT segment */ 1123 | }; 1124 | 1125 | /* 1126 | * The encryption_info_command contains the file offset and size of an 1127 | * of an encrypted segment. 1128 | */ 1129 | struct encryption_info_command { 1130 | uint32_t cmd; /* LC_ENCRYPTION_INFO */ 1131 | uint32_t cmdsize; /* sizeof(struct encryption_info_command) */ 1132 | uint32_t cryptoff; /* file offset of encrypted range */ 1133 | uint32_t cryptsize; /* file size of encrypted range */ 1134 | uint32_t cryptid; /* which enryption system, 1135 | 0 means not-encrypted yet */ 1136 | }; 1137 | 1138 | /* 1139 | * The dyld_info_command contains the file offsets and sizes of 1140 | * the new compressed form of the information dyld needs to 1141 | * load the image. This information is used by dyld on Mac OS X 1142 | * 10.6 and later. All information pointed to by this command 1143 | * is encoded using byte streams, so no endian swapping is needed 1144 | * to interpret it. 1145 | */ 1146 | struct dyld_info_command { 1147 | uint32_t cmd; /* LC_DYLD_INFO or LC_DYLD_INFO_ONLY */ 1148 | uint32_t cmdsize; /* sizeof(struct dyld_info_command) */ 1149 | 1150 | /* 1151 | * Dyld rebases an image whenever dyld loads it at an address different 1152 | * from its preferred address. The rebase information is a stream 1153 | * of byte sized opcodes whose symbolic names start with REBASE_OPCODE_. 1154 | * Conceptually the rebase information is a table of tuples: 1155 | * 1156 | * The opcodes are a compressed way to encode the table by only 1157 | * encoding when a column changes. In addition simple patterns 1158 | * like "every n'th offset for m times" can be encoded in a few 1159 | * bytes. 1160 | */ 1161 | uint32_t rebase_off; /* file offset to rebase info */ 1162 | uint32_t rebase_size; /* size of rebase info */ 1163 | 1164 | /* 1165 | * Dyld binds an image during the loading process, if the image 1166 | * requires any pointers to be initialized to symbols in other images. 1167 | * The rebase information is a stream of byte sized 1168 | * opcodes whose symbolic names start with BIND_OPCODE_. 1169 | * Conceptually the bind information is a table of tuples: 1170 | * 1171 | * The opcodes are a compressed way to encode the table by only 1172 | * encoding when a column changes. In addition simple patterns 1173 | * like for runs of pointers initialzed to the same value can be 1174 | * encoded in a few bytes. 1175 | */ 1176 | uint32_t bind_off; /* file offset to binding info */ 1177 | uint32_t bind_size; /* size of binding info */ 1178 | 1179 | /* 1180 | * Some C++ programs require dyld to unique symbols so that all 1181 | * images in the process use the same copy of some code/data. 1182 | * This step is done after binding. The content of the weak_bind 1183 | * info is an opcode stream like the bind_info. But it is sorted 1184 | * alphabetically by symbol name. This enable dyld to walk 1185 | * all images with weak binding information in order and look 1186 | * for collisions. If there are no collisions, dyld does 1187 | * no updating. That means that some fixups are also encoded 1188 | * in the bind_info. For instance, all calls to "operator new" 1189 | * are first bound to libstdc++.dylib using the information 1190 | * in bind_info. Then if some image overrides operator new 1191 | * that is detected when the weak_bind information is processed 1192 | * and the call to operator new is then rebound. 1193 | */ 1194 | uint32_t weak_bind_off; /* file offset to weak binding info */ 1195 | uint32_t weak_bind_size; /* size of weak binding info */ 1196 | 1197 | /* 1198 | * Some uses of external symbols do not need to be bound immediately. 1199 | * Instead they can be lazily bound on first use. The lazy_bind 1200 | * are contains a stream of BIND opcodes to bind all lazy symbols. 1201 | * Normal use is that dyld ignores the lazy_bind section when 1202 | * loading an image. Instead the static linker arranged for the 1203 | * lazy pointer to initially point to a helper function which 1204 | * pushes the offset into the lazy_bind area for the symbol 1205 | * needing to be bound, then jumps to dyld which simply adds 1206 | * the offset to lazy_bind_off to get the information on what 1207 | * to bind. 1208 | */ 1209 | uint32_t lazy_bind_off; /* file offset to lazy binding info */ 1210 | uint32_t lazy_bind_size; /* size of lazy binding infs */ 1211 | 1212 | /* 1213 | * The symbols exported by a dylib are encoded in a trie. This 1214 | * is a compact representation that factors out common prefixes. 1215 | * It also reduces LINKEDIT pages in RAM because it encodes all 1216 | * information (name, address, flags) in one small, contiguous range. 1217 | * The export area is a stream of nodes. The first node sequentially 1218 | * is the start node for the trie. 1219 | * 1220 | * Nodes for a symbol start with a byte that is the length of 1221 | * the exported symbol information for the string so far. 1222 | * If there is no exported symbol, the byte is zero. If there 1223 | * is exported info, it follows the length byte. The exported 1224 | * info normally consists of a flags and offset both encoded 1225 | * in uleb128. The offset is location of the content named 1226 | * by the symbol. It is the offset from the mach_header for 1227 | * the image. 1228 | * 1229 | * After the initial byte and optional exported symbol information 1230 | * is a byte of how many edges (0-255) that this node has leaving 1231 | * it, followed by each edge. 1232 | * Each edge is a zero terminated cstring of the addition chars 1233 | * in the symbol, followed by a uleb128 offset for the node that 1234 | * edge points to. 1235 | * 1236 | */ 1237 | uint32_t export_off; /* file offset to lazy binding info */ 1238 | uint32_t export_size; /* size of lazy binding infs */ 1239 | }; 1240 | 1241 | /* 1242 | * The following are used to encode rebasing information 1243 | */ 1244 | #define REBASE_TYPE_POINTER 1 1245 | #define REBASE_TYPE_TEXT_ABSOLUTE32 2 1246 | #define REBASE_TYPE_TEXT_PCREL32 3 1247 | 1248 | #define REBASE_OPCODE_MASK 0xF0 1249 | #define REBASE_IMMEDIATE_MASK 0x0F 1250 | #define REBASE_OPCODE_DONE 0x00 1251 | #define REBASE_OPCODE_SET_TYPE_IMM 0x10 1252 | #define REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB 0x20 1253 | #define REBASE_OPCODE_ADD_ADDR_ULEB 0x30 1254 | #define REBASE_OPCODE_ADD_ADDR_IMM_SCALED 0x40 1255 | #define REBASE_OPCODE_DO_REBASE_IMM_TIMES 0x50 1256 | #define REBASE_OPCODE_DO_REBASE_ULEB_TIMES 0x60 1257 | #define REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB 0x70 1258 | #define REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB 0x80 1259 | 1260 | 1261 | /* 1262 | * The following are used to encode binding information 1263 | */ 1264 | #define BIND_TYPE_POINTER 1 1265 | #define BIND_TYPE_TEXT_ABSOLUTE32 2 1266 | #define BIND_TYPE_TEXT_PCREL32 3 1267 | 1268 | #define BIND_SPECIAL_DYLIB_SELF 0 1269 | #define BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE -1 1270 | #define BIND_SPECIAL_DYLIB_FLAT_LOOKUP -2 1271 | 1272 | #define BIND_SYMBOL_FLAGS_WEAK_IMPORT 0x1 1273 | #define BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION 0x8 1274 | 1275 | #define BIND_OPCODE_MASK 0xF0 1276 | #define BIND_IMMEDIATE_MASK 0x0F 1277 | #define BIND_OPCODE_DONE 0x00 1278 | #define BIND_OPCODE_SET_DYLIB_ORDINAL_IMM 0x10 1279 | #define BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB 0x20 1280 | #define BIND_OPCODE_SET_DYLIB_SPECIAL_IMM 0x30 1281 | #define BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM 0x40 1282 | #define BIND_OPCODE_SET_TYPE_IMM 0x50 1283 | #define BIND_OPCODE_SET_ADDEND_SLEB 0x60 1284 | #define BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB 0x70 1285 | #define BIND_OPCODE_ADD_ADDR_ULEB 0x80 1286 | #define BIND_OPCODE_DO_BIND 0x90 1287 | #define BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB 0xA0 1288 | #define BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED 0xB0 1289 | #define BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB 0xC0 1290 | 1291 | 1292 | /* 1293 | * The following are used on the flags byte of a terminal node 1294 | * in the export information. 1295 | */ 1296 | #define EXPORT_SYMBOL_FLAGS_KIND_MASK 0x03 1297 | #define EXPORT_SYMBOL_FLAGS_KIND_REGULAR 0x00 1298 | #define EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL 0x01 1299 | #define EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION 0x04 1300 | #define EXPORT_SYMBOL_FLAGS_INDIRECT_DEFINITION 0x08 1301 | #define EXPORT_SYMBOL_FLAGS_HAS_SPECIALIZATIONS 0x10 1302 | 1303 | /* 1304 | * The symseg_command contains the offset and size of the GNU style 1305 | * symbol table information as described in the header file . 1306 | * The symbol roots of the symbol segments must also be aligned properly 1307 | * in the file. So the requirement of keeping the offsets aligned to a 1308 | * multiple of a 4 bytes translates to the length field of the symbol 1309 | * roots also being a multiple of a long. Also the padding must again be 1310 | * zeroed. (THIS IS OBSOLETE and no longer supported). 1311 | */ 1312 | struct symseg_command { 1313 | uint32_t cmd; /* LC_SYMSEG */ 1314 | uint32_t cmdsize; /* sizeof(struct symseg_command) */ 1315 | uint32_t offset; /* symbol segment offset */ 1316 | uint32_t size; /* symbol segment size in bytes */ 1317 | }; 1318 | 1319 | /* 1320 | * The ident_command contains a free format string table following the 1321 | * ident_command structure. The strings are null terminated and the size of 1322 | * the command is padded out with zero bytes to a multiple of 4 bytes/ 1323 | * (THIS IS OBSOLETE and no longer supported). 1324 | */ 1325 | struct ident_command { 1326 | uint32_t cmd; /* LC_IDENT */ 1327 | uint32_t cmdsize; /* strings that follow this command */ 1328 | }; 1329 | 1330 | /* 1331 | * The fvmfile_command contains a reference to a file to be loaded at the 1332 | * specified virtual address. (Presently, this command is reserved for 1333 | * internal use. The kernel ignores this command when loading a program into 1334 | * memory). 1335 | */ 1336 | struct fvmfile_command { 1337 | uint32_t cmd; /* LC_FVMFILE */ 1338 | uint32_t cmdsize; /* includes pathname string */ 1339 | union lc_str name; /* files pathname */ 1340 | uint32_t header_addr; /* files virtual address */ 1341 | }; 1342 | 1343 | #endif /* _MACHO_LOADER_H_ */ 1344 | -------------------------------------------------------------------------------- /sizeof.tsv: -------------------------------------------------------------------------------- 1 | sizeof(XXX) libc-2.18-x64 libc-2.18-i686 libc-2.17-x32 libc-2.9-nacl-x64 libc-2.9-nacl-i686 2 | abort_msg_s 4 (struct) 4 (struct) 4 (struct) ??? ??? 3 | accepted_reply 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 4 | accept_stat 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 5 | ACTION ??? () ??? () ??? () ??? () ??? () 6 | action 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 7 | addrinfo 48 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 8 | ad_private 1160 (struct) 1128 (struct) 1128 (struct) 1128 (struct) 1128 (struct) 9 | ai_response_header ??? () ??? () ??? () ??? () ??? () 10 | aliasent 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 11 | alias_map 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 12 | allowmask 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 13 | arc 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 14 | archmapped 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 15 | area 360 (struct) 344 (struct) 344 (struct) 344 (struct) 344 (struct) 16 | argp 56 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 17 | argp_child 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 18 | argp_fmtstream 72 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 19 | argp_fmtstream_t 8 (argp_fmtstream*) 4 (argp_fmtstream*) 4 (argp_fmtstream*) 4 (argp_fmtstream*) 4 (argp_fmtstream*) 20 | argp_option 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 21 | argp_parser_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 22 | argp_state 96 (struct) 56 (struct) 56 (struct) 56 (struct) 56 (struct) 23 | atomic64_t 8 (long int) ??? 8 (long long int) ??? ??? 24 | audata 464 (struct) 432 (struct) 432 (struct) 432 (struct) 432 (struct) 25 | auditstate 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 26 | audit_ifaces 72 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 27 | AUTH 72 (struct) 40 (struct) 40 (struct) 40 (struct) 40 (struct) 28 | authdes_cred 40 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 29 | authdes_fullname 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 30 | authdes_namekind 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 31 | authdes_verf 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 32 | authnone_private_s 96 (struct) 64 (struct) 64 (struct) 64 (struct) 64 (struct) 33 | authunix_parms 40 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 34 | auth_errtab 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 35 | auth_ops 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 36 | auth_stat 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 37 | base_table_t ??? 12 (struct) ??? 20 (struct) 12 (struct) 38 | binding 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 39 | bin_tree_storage_t 968 (struct) 996 (struct) 996 (struct) 996 (struct) 996 (struct) 40 | bin_tree_t 64 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 41 | bitset_t 8 (long unsigned int[]) 4 (long unsigned int[]) 4 (long unsigned int[]) 4 (long unsigned int[]) 4 (long unsigned int[]) 42 | bitset_word_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 43 | bool_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 44 | bracket_elem_t ??? () ??? () ??? () ??? () ??? () 45 | bracket_elem_type ??? () ??? () ??? () ??? () ??? () 46 | bsdcred 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 47 | builtin_map 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 48 | byte 1 (unsigned char) ??? 1 (unsigned char) 1 (unsigned char) ??? 49 | cached_data 24 (struct) 16 (struct) 16 (struct) ??? ??? 50 | cache_entry 40 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 51 | cache_node 72 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 52 | cache_ptr 8 (cache_node*) 4 (cache_node*) 4 (cache_node*) 4 (cache_node*) 4 (cache_node*) 53 | caddr_t 8 (char*) 4 (char*) 4 (char*) 4 (char*) 4 (char*) 54 | callrpc_private_s 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 55 | call_body 80 (struct) 40 (struct) 40 (struct) 40 (struct) 40 (struct) 56 | call_dl_lookup_args 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 57 | catalog_info 56 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 58 | catalog_obj 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 59 | catnamestr_t 137 (struct) 137 (struct) 137 (struct) 137 (struct) 137 (struct) 60 | cc_t 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 61 | char 1 (basic) 1 (basic) 1 (basic) 1 (basic) 1 (basic) 62 | char16_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) ??? ??? 63 | cleanup_arg 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 64 | CLIENT 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 65 | clntraw_private_s 8904 (struct) 8864 (struct) 8864 (struct) 8864 (struct) 8864 (struct) 66 | clnt_ops 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 67 | clnt_stat 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 68 | clockid_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 69 | clock_t 8 (long int) 4 (long int) 8 (long long int) 4 (long int) 4 (long int) 70 | cmd 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 71 | cmessage 40 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 72 | cmsghdr 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 73 | codestrs_t_11 67 (struct) 67 (struct) 67 (struct) ??? ??? 74 | codestrs_t_17 207 (struct) 207 (struct) 207 (struct) ??? ??? 75 | codestrs_t_29 130 (struct) 130 (struct) 130 (struct) ??? ??? 76 | codestrs_t_4 145 (struct) 145 (struct) 145 (struct) ??? ??? 77 | codestrs_t_5 38 (struct) 38 (struct) 38 (struct) ??? ??? 78 | codestrs_t_7 86 (struct) 86 (struct) 86 (struct) ??? ??? 79 | codestrs_t_8 205 (struct) 205 (struct) 205 (struct) ??? ??? 80 | coll_seq ??? () ??? () ??? ??? ??? 81 | coll_sort_rule 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 82 | const_node 8 (node_t*) 4 (node_t*) 4 (node_t*) 4 (node_t*) 4 (node_t*) 83 | converted_domain 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 84 | cookie_io_functions_t ??? () ??? () ??? () ??? () ??? () 85 | cpuid_registers 16 (struct) ??? 16 (struct) ??? ??? 86 | cpu_features 68 (struct) ??? 52 (struct) ??? ??? 87 | cpu_features_kind 4 (struct) ??? 4 (struct) ??? ??? 88 | cpu_set_t ??? () ??? () ??? () ??? () ??? () 89 | cryptkeyarg 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 90 | cryptkeyarg2 32 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 91 | cryptkeyres 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 92 | ct_data 248 (struct) 196 (struct) 208 (struct) 208 (struct) 208 (struct) 93 | cu_data 160 (struct) 100 (struct) 120 (struct) 120 (struct) 120 (struct) 94 | database_pers_head 120 (struct) 120 (struct) 120 (struct) 104 (struct) 104 (struct) 95 | datahead 24 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 96 | db_lookup_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 97 | decoded_futex_operation ??? ??? ??? 4 (struct) 4 (struct) 98 | deleted_handler 16 (struct) 8 (struct) 8 (struct) ??? ??? 99 | derivation_step 48 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 100 | desdir 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 101 | desmode 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 102 | desparams 48 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 103 | dests_alloc 12288 (struct) 11264 (struct) 11264 (struct) 11264 (struct) 11264 (struct) 104 | des_block 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 105 | dev_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 106 | DIR 48 (__dirstream) 28 (__dirstream) 32 (__dirstream) 32 (__dirstream) 32 (__dirstream) 107 | dirent 280 (struct) 268 (struct) 280 (struct) 280 (struct) 280 (struct) 108 | dirent64 280 (struct) 276 (struct) 280 (struct) 280 (struct) 280 (struct) 109 | dir_data 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 110 | DItype ??? 8 (long long int) ??? ??? 8 (???) 111 | div_t ??? () ??? () ??? () ??? () ??? () 112 | Dl_info ??? () ??? () ??? () ??? () ??? () 113 | dl_open_hook 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 114 | dl_phdr_info 64 (struct) 40 (struct) 40 (struct) 48 (struct) 40 (struct) 115 | dl_scope_free_list 408 (struct) 204 (struct) 204 (struct) 204 (struct) 204 (struct) 116 | dl_tls_index 16 (struct) 8 (struct) 16 (struct) 16 (struct) 8 (struct) 117 | double 8 (basic) 8 (basic) 8 (basic) 8 (basic) 8 (basic) 118 | do_dlopen_args 32 (struct) 16 (struct) 16 (struct) 12 (struct) 12 (struct) 119 | do_dlsym_args 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 120 | drand48_data 24 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 121 | dtor_func 8 (*) 4 (*) ??? ??? ??? 122 | dtor_list 32 (struct) 16 (struct) ??? ??? ??? 123 | dtv 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 124 | dtv_slotinfo 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 125 | dtv_slotinfo_list 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 126 | dtv_t 16 (dtv) 8 (dtv) 8 (dtv) 8 (dtv) 8 (dtv) 127 | dwarf_call_frame_info ??? 4 (struct) ??? ??? 4 (struct) 128 | dwarf_cie ??? 12 (struct) ??? ??? 12 (struct) 129 | dwarf_eh_bases ??? 12 (struct) ??? ??? 12 (struct) 130 | dwarf_fde ??? 8 (struct) ??? ??? 8 (struct) 131 | DWstruct ??? 8 (struct) ??? ??? 8 (struct) 132 | DWunion ??? ??? () ??? ??? ??? () 133 | Elf32_Addr 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 134 | Elf32_auxv_t ??? ??? () ??? () ??? ??? 135 | Elf32_Dyn ??? ??? () ??? () ??? ??? () 136 | Elf32_Ehdr ??? ??? () ??? () ??? ??? 137 | Elf32_Half ??? 2 (short unsigned int) 2 (short unsigned int) ??? 2 (short unsigned int) 138 | Elf32_Off ??? 4 (unsigned int) 4 (unsigned int) ??? 4 (unsigned int) 139 | Elf32_Phdr ??? ??? () ??? () ??? ??? () 140 | Elf32_Section 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 141 | Elf32_Sword ??? 4 (int) 4 (int) ??? 4 (int) 142 | Elf32_Sym ??? () ??? () ??? () ??? () ??? () 143 | Elf32_Versym ??? 2 (short unsigned int) 2 (short unsigned int) ??? 2 (short unsigned int) 144 | Elf32_Word 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 145 | Elf64_Addr 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 146 | Elf64_auxv_t ??? () ??? ??? ??? ??? 147 | Elf64_Dyn ??? () ??? ??? ??? () ??? 148 | Elf64_Ehdr ??? () ??? ??? ??? () ??? 149 | Elf64_Half 2 (short unsigned int) ??? ??? 2 (short unsigned int) ??? 150 | Elf64_Off 8 (long unsigned int) ??? ??? 8 (long long unsigned int) ??? 151 | Elf64_Phdr ??? () ??? ??? ??? () ??? 152 | Elf64_Section 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 153 | Elf64_Sxword 8 (long int) ??? ??? 8 (???) ??? 154 | Elf64_Sym ??? () ??? () ??? () ??? () ??? () 155 | Elf64_Versym 2 (short unsigned int) ??? ??? 2 (short unsigned int) ??? 156 | Elf64_Word 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 157 | Elf64_Xword 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 158 | Elf_Symndx 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 159 | encoded_futex_operation ??? ??? ??? 4 (struct) 4 (struct) 160 | endent_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 161 | end_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 162 | ENTRY 16 (entry) 8 (entry) 8 (entry) 8 (entry) 8 (entry) 163 | entry 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 164 | enum_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 165 | epoll_data 8 (struct) ??? 8 (struct) 8 (struct) 8 (struct) 166 | epoll_data_t 8 (epoll_data) ??? 8 (epoll_data) 8 (epoll_data) 8 (epoll_data) 167 | epoll_event 12 (struct) ??? 12 (struct) 12 (struct) 16 (struct) 168 | era_entry 72 (struct) 52 (struct) 52 (struct) 52 (struct) 52 (struct) 169 | error_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 170 | etherent 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 171 | ether_addr 6 (struct) 6 (struct) 6 (struct) 6 (struct) 6 (struct) 172 | eventfd_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 173 | exit_function 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 174 | exit_function_list 1040 (struct) 520 (struct) 520 (struct) 520 (struct) 520 (struct) 175 | exit_status 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 176 | expression 32 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 177 | extra_entry 2 (struct) 2 (struct) 2 (struct) 2 (struct) 2 (struct) 178 | extra_entry_module 6 (struct) 6 (struct) 6 (struct) 6 (struct) 6 (struct) 179 | fde ??? 8 (dwarf_fde) ??? ??? 8 (dwarf_fde) 180 | fde_accumulator ??? 8 (struct) ??? ??? 8 (struct) 181 | fde_compare_t ??? 4 (*) ??? ??? 4 (*) 182 | fde_table ??? 8 (struct) ??? ??? 8 (struct) 183 | fde_vector ??? 8 (struct) ??? ??? 8 (struct) 184 | fd_mask 8 (long int) 4 (long int) 4 (long int) 4 (long int) 4 (long int) 185 | fd_set ??? () ??? () ??? () ??? () ??? () 186 | FILE 216 (_IO_FILE) 148 (_IO_FILE) 152 (_IO_FILE) 152 (_IO_FILE) 152 (_IO_FILE) 187 | float 4 (basic) 4 (basic) 4 (basic) 4 (basic) 4 (basic) 188 | flock 32 (struct) 16 (struct) 32 (struct) 32 (struct) 32 (struct) 189 | flock64 ??? 24 (struct) ??? ??? ??? 190 | fmemopen_cookie_struct 40 (struct) 28 (struct) 32 (struct) 32 (struct) 32 (struct) 191 | fmemopen_cookie_t 40 (fmemopen_cookie_struct) 28 (fmemopen_cookie_struct) 32 (fmemopen_cookie_struct) 32 (fmemopen_cookie_struct) 32 (fmemopen_cookie_struct) 192 | fnmatch_struct 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 193 | fnwmatch_struct 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 194 | fork_handler 48 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 195 | fork_handler_pool 2312 (struct) 1348 (struct) 1348 (struct) ??? ??? 196 | fpos_t ??? () ??? () ??? () ??? () ??? () 197 | fpregset_t 8 (_libc_fpstate*) ??? 4 (_libc_fpstate*) 4 (_libc_fpstate*) 4 (_libc_fpstate*) 198 | fpu_control_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 199 | framesf ??? 4 (*) ??? ??? 4 (*) 200 | frame_state ??? 112 (struct) ??? ??? 112 (struct) 201 | frame_state_reg_info ??? 148 (struct) ??? ??? 148 (struct) 202 | fstab 48 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 203 | fstab_state 104 (struct) 60 (struct) 60 (struct) 60 (struct) 60 (struct) 204 | FTS ??? () ??? () ??? () ??? () ??? () 205 | FTSENT 120 (_ftsent) 72 (_ftsent) 80 (_ftsent) 80 (_ftsent) 80 (_ftsent) 206 | FTW 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 207 | ftw_data 88 (struct) 52 (struct) 56 (struct) 56 (struct) 56 (struct) 208 | f_owner_ex 8 (struct) ??? 8 (struct) ??? ??? 209 | gaih_addrtuple 40 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 210 | gaih_service 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 211 | gaih_servtuple 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 212 | gaih_typeproto 20 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 213 | gconvcache_header 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 214 | gconv_alias 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 215 | gconv_fcts 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 216 | gconv_module 56 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 217 | getcpu_cache ??? ??? ??? ??? 128 (struct) 218 | getcredres 32 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 219 | getent_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 220 | getent_r_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 221 | get_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 222 | gidx_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 223 | gid_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 224 | glob64_t ??? ??? () ??? ??? ??? 225 | globnames 528 (struct) 264 (struct) 264 (struct) 264 (struct) 264 (struct) 226 | glob_t ??? () ??? () ??? () ??? () ??? () 227 | gmonparam 104 (struct) 52 (struct) 52 (struct) 52 (struct) 52 (struct) 228 | gmon_cg_arc_record 20 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 229 | gmon_hdr ??? ??? ??? 20 (struct) 20 (struct) 230 | gmon_hist_hdr ??? ??? ??? 32 (struct) 32 (struct) 231 | gregset_t 8 (long long int[]) ??? 4 (long long int[]) 4 (long int[]) 4 (int[]) 232 | greg_t 8 (long long int) ??? 8 (long long int) 4 (long int) 4 (int) 233 | group 72 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 234 | group_filter 272 (struct) 268 (struct) 268 (struct) 268 (struct) 268 (struct) 235 | gr_response_header ??? () ??? () ??? () ??? () ??? () 236 | hashentry 32 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 237 | hash_entry 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 238 | hconf 72 (struct) 48 (struct) 48 (struct) 48 (struct) 48 (struct) 239 | hdr 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 240 | heap_info 32 (_heap_info) 16 (_heap_info) 24 (_heap_info) 16 (_heap_info) 16 (_heap_info) 241 | helper_file 576 (struct) 356 (struct) 368 (struct) 368 (struct) 368 (struct) 242 | hol 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 243 | hol_cluster 48 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 244 | hol_entry 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 245 | hol_help_state 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 246 | hostent 32 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 247 | host_addr_list_t 8 (char*[]) 4 (char*[]) 4 (char*[]) 4 (char*[]) 4 (char*[]) 248 | host_addr_t 8 (unsigned char[]) 4 (unsigned char[]) 4 (unsigned char[]) 4 (unsigned char[]) 4 (unsigned char[]) 249 | hp_timing_t 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) ??? 250 | hsearch_data 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 251 | hst_response_header ??? () ??? () ??? () ??? () ??? () 252 | iaddr 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 253 | iconv_t 8 (void*) 4 (void*) 4 (void*) 4 (void*) 4 (void*) 254 | idtype_t ??? () ??? () ??? () ??? () ??? () 255 | id_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 256 | ieee754_double 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 257 | ieee754_float 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 258 | ieee854_long_double 16 (struct) 12 (struct) 16 (struct) 16 (struct) 16 (struct) 259 | ieee_double_shape_type ??? ??? () ??? ??? () ??? () 260 | ieee_float_shape_type ??? ??? () ??? ??? () ??? () 261 | ieee_long_double_shape_type ??? () ??? () ??? () ??? ??? () 262 | ifaddrmsg 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 263 | ifaddrs 56 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 264 | ifaddrs_storage 184 (struct) 156 (struct) 156 (struct) 156 (struct) 156 (struct) 265 | ifconf 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 266 | ifinfomsg 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 267 | ifmap 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 268 | ifreq 40 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 269 | if_nameindex 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 270 | in6addrinfo 24 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 271 | in6ailist 32 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 272 | in6_addr 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 273 | initgroups_dyn_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 274 | initgr_response_header ??? () ??? () ??? () ??? () ??? () 275 | innetgroup_response_header ??? () ??? () ??? () ??? ??? 276 | ino64_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 277 | ino_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 278 | int 4 (basic) 4 (basic) 4 (basic) 4 (basic) 4 (basic) 279 | int16_t 2 (short int) 2 (short int) 2 (short int) 2 (short int) 2 (short int) 280 | int32_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 281 | int64_t 8 (long int) 8 (long long int) 8 (long long int) 8 (???) 8 (???) 282 | int8_t 1 (signed char) 1 (signed char) 1 (signed char) 1 (signed char) 1 (signed char) 283 | intel_02_cache_info 8 (struct) 8 (struct) 8 (struct) 20 (struct) 20 (struct) 284 | intmax_t 8 (long int) 8 (long long int) 8 (long long int) 8 (???) 8 (???) 285 | intptr_t 8 (long int) 4 (int) 4 (int) 4 (int) 4 (int) 286 | int_fast32_t 8 (long int) 4 (int) 4 (int) 4 (int) 4 (int) 287 | in_addr 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 288 | in_addr_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 289 | in_pktinfo 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 290 | in_port_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 291 | iovec 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 292 | ip6_ext 2 (struct) 2 (struct) 2 (struct) 2 (struct) 2 (struct) 293 | ip6_hbh 2 (struct) 2 (struct) 2 (struct) 2 (struct) 2 (struct) 294 | ip6_opt 2 (struct) 2 (struct) 2 (struct) 2 (struct) 2 (struct) 295 | ip6_rthdr 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 296 | ip6_rthdr0 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 297 | ipc_kludge ??? 8 (struct) ??? ??? 8 (struct) 298 | ipc_perm ??? 36 (struct) ??? ??? 36 (struct) 299 | ip_msfilter 20 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 300 | itimerval 32 (struct) 16 (struct) 32 (struct) 32 (struct) 32 (struct) 301 | kernel_dirent 280 (struct) 268 (struct) 280 (struct) ??? ??? 302 | kernel_dirent64 ??? 276 (struct) 280 (struct) ??? ??? 303 | kernel_sigaction 152 (struct) 140 (struct) 140 (struct) ??? ??? 304 | kernel_stat ??? 64 (struct) ??? ??? ??? 305 | keybuf 8 (char[]) 4 (char[]) 4 (char[]) 4 (char[]) 4 (char[]) 306 | keystatus 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 307 | key_call_private 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 308 | key_netstarg 104 (struct) 100 (struct) 100 (struct) 100 (struct) 100 (struct) 309 | key_netstres 112 (struct) 104 (struct) 104 (struct) 104 (struct) 104 (struct) 310 | key_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 311 | known_derivation 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 312 | known_function ??? () ??? () ??? () ??? () ??? () 313 | known_object 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 314 | known_trans 88 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 315 | known_translation_t 64 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 316 | layout ??? 8 (struct) ??? ??? 8 (struct) 317 | La_alpha_regs ??? ??? ??? ??? ??? 318 | La_alpha_retval ??? ??? ??? ??? ??? 319 | La_i86_regs ??? 20 (struct) ??? ??? 20 (struct) 320 | La_i86_retval ??? 32 (struct) ??? ??? 24 (struct) 321 | La_ia64_regs ??? ??? ??? ??? ??? 322 | La_ia64_retval ??? ??? ??? ??? ??? 323 | La_ppc32_regs ??? ??? ??? ??? ??? 324 | La_ppc32_retval ??? ??? ??? ??? ??? 325 | La_ppc64_regs ??? ??? ??? ??? ??? 326 | La_ppc64_retval ??? ??? ??? ??? ??? 327 | La_s390_32_regs ??? ??? ??? ??? ??? 328 | La_s390_32_retval ??? ??? ??? ??? ??? 329 | La_s390_64_regs ??? ??? ??? ??? ??? 330 | La_s390_64_retval ??? ??? ??? ??? ??? 331 | La_sh_regs ??? ??? ??? ??? ??? 332 | La_sh_retval ??? ??? ??? ??? ??? 333 | La_sparc32_regs ??? ??? ??? ??? ??? 334 | La_sparc32_retval ??? ??? ??? ??? ??? 335 | La_sparc64_regs ??? ??? ??? ??? ??? 336 | La_x86_64_regs 704 (struct) ??? 704 (struct) 192 (struct) ??? 337 | La_x86_64_retval 208 (struct) ??? 208 (struct) 64 (struct) ??? 338 | La_x86_64_vector ??? () ??? ??? () ??? ??? 339 | La_x86_64_xmm 8 (float[]) ??? 4 (float[]) 4 (float[]) ??? 340 | La_x86_64_ymm 8 (float[]) ??? 4 (float[]) ??? ??? 341 | lconv 96 (struct) 56 (struct) 56 (struct) 56 (struct) 56 (struct) 342 | lc_time_data 48 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 343 | ldiv_t ??? () ??? () ??? () ??? () ??? () 344 | leap 16 (struct) 8 (struct) 16 (struct) 16 (struct) 16 (struct) 345 | libc_ifunc_impl 24 (struct) 12 (struct) 12 (struct) ??? ??? 346 | libname_list 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 347 | link_map 1136 (struct) 604 (struct) 600 (struct) 648 (struct) 600 (struct) 348 | link_map_machine 24 (struct) 12 (struct) 12 (struct) 24 (struct) 12 (struct) 349 | link_map_public 40 (struct) 20 (struct) 20 (struct) 24 (struct) 20 (struct) 350 | link_map_reldeps 8 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 351 | link_namespaces 144 (struct) 76 (struct) 84 (struct) 48 (struct) 36 (struct) 352 | list_head 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 353 | list_t 16 (list_head) 8 (list_head) 8 (list_head) 8 (list_head) 8 (list_head) 354 | lldiv_t ??? () ??? () ??? () ??? () ??? () 355 | Lmid_t 8 (long int) 4 (long int) 4 (long int) 4 (long int) 4 (long int) 356 | loaded_domain 200 (struct) 104 (struct) 116 (struct) 128 (struct) 104 (struct) 357 | loaded_l10nfile 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 358 | locale_data ??? ??? ??? 40 (struct) 40 (struct) 359 | locale_data_value 8 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 360 | locale_in_archive 120 (struct) 60 (struct) 60 (struct) 60 (struct) 60 (struct) 361 | locale_t 8 (__locale_struct*) 4 (__locale_struct*) 4 (__locale_struct*) 4 (__locale_struct*) 4 (__locale_struct*) 362 | locarhead 56 (struct) 56 (struct) 56 (struct) 56 (struct) 56 (struct) 363 | locked_FILE 600 (struct) 368 (struct) 376 (struct) 376 (struct) 376 (struct) 364 | locked_map_ptr 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 365 | locrecent 108 (struct) 108 (struct) 108 (struct) 108 (struct) 108 (struct) 366 | loff_t ??? 8 (long long int) ??? 8 (???) 8 (???) 367 | long double 16 (basic) 12 (basic) 16 (basic) 8 (basic) 8 (basic) 368 | long int 8 (basic) 4 (basic) 4 (basic) 4 (basic) 4 (basic) 369 | long long int 8 (basic) 8 (basic) 8 (basic) ??? ??? 370 | long long unsigned int 8 (basic) 8 (basic) 8 (basic) 8 (basic) 8 (basic) 371 | long unsigned int 8 (basic) 4 (basic) 4 (basic) 4 (basic) 4 (basic) 372 | long_int 8 (long int) 8 (long long int) 8 (long long int) ??? ??? 373 | lookup_actions ??? () ??? () ??? () ??? () ??? () 374 | lookup_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 375 | lookup_t 8 (link_map*) 4 (link_map*) 4 (link_map*) 4 (link_map*) 4 (link_map*) 376 | mallinfo 40 (struct) 40 (struct) 40 (struct) 40 (struct) 40 (struct) 377 | malloc_chunk 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 378 | malloc_par 88 (struct) 52 (struct) 52 (struct) 48 (struct) 48 (struct) 379 | malloc_save_state 2216 (struct) 1112 (struct) 1112 (struct) 1096 (struct) 1096 (struct) 380 | malloc_state 2184 (struct) 1104 (struct) 1108 (struct) 1100 (struct) 1100 (struct) 381 | mapped_database 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 382 | mbinptr 8 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 383 | mbstate_t ??? () ??? () ??? () ??? () ??? () 384 | mcheck_status 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 385 | mchunkptr 8 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 386 | mcontext_t ??? () ??? ??? () ??? () ??? () 387 | mfastbinptr 8 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 4 (malloc_chunk*) 388 | mmsghdr 64 (struct) 32 (struct) 32 (struct) ??? ??? 389 | mntent 40 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 390 | mode_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 391 | module_entry 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 392 | mo_file_header 48 (struct) 48 (struct) 48 (struct) 48 (struct) 48 (struct) 393 | mp_limb_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 394 | mp_power 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 395 | mp_ptr 8 (long unsigned int*) 4 (long unsigned int*) 4 (long long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 396 | mp_size_t 8 (long int) 4 (long int) 4 (long int) 4 (long int) 4 (long int) 397 | mp_srcptr 8 (long unsigned int*) 4 (long unsigned int*) 4 (long long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 398 | msg ??? ??? ??? ??? ??? 399 | msghdr 56 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 400 | msglen_t ??? 4 (long unsigned int) ??? ??? 4 (long unsigned int) 401 | msgqnum_t ??? 4 (long unsigned int) ??? ??? 4 (long unsigned int) 402 | msgstr_t 485 (struct) 485 (struct) 485 (struct) 485 (struct) 485 (struct) 403 | msg_type 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 404 | msort_param 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 405 | msqid_ds ??? 88 (struct) ??? ??? 112 (struct) 406 | mstate 8 (malloc_state*) 4 (malloc_state*) 4 (malloc_state*) 4 (malloc_state*) 4 (malloc_state*) 407 | mutex_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 408 | nacl_abi_blkcnt_t ??? ??? ??? 4 (long int) 4 (long int) 409 | nacl_abi_blksize_t ??? ??? ??? 4 (long int) 4 (long int) 410 | nacl_abi_dev_t ??? ??? ??? 8 (???) 8 (???) 411 | nacl_abi_dirent ??? ??? ??? 280 (struct) 280 (struct) 412 | nacl_abi_gid_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 413 | nacl_abi_ino_t ??? ??? ??? 8 (???) 8 (???) 414 | nacl_abi_mode_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 415 | nacl_abi_nlink_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 416 | nacl_abi_off_t ??? ??? ??? 8 (???) 8 (???) 417 | nacl_abi_stat ??? ??? ??? 104 (struct) 104 (struct) 418 | nacl_abi_time_t ??? ??? ??? 8 (???) 8 (???) 419 | nacl_abi_uid_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 420 | nacl_abi__off_t ??? ??? ??? 8 (???) 8 (???) 421 | nacl_abi___blkcnt_t ??? ??? ??? 4 (long int) 4 (long int) 422 | nacl_abi___blksize_t ??? ??? ??? 4 (long int) 4 (long int) 423 | nacl_abi___dev_t ??? ??? ??? 8 (???) 8 (???) 424 | nacl_abi___gid_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 425 | nacl_abi___ino_t ??? ??? ??? 8 (???) 8 (???) 426 | nacl_abi___mode_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 427 | nacl_abi___nlink_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 428 | nacl_abi___time_t ??? ??? ??? 8 (???) 8 (???) 429 | nacl_abi___uid_t ??? ??? ??? 4 (unsigned int) 4 (unsigned int) 430 | namehashent 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 431 | name_database 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 432 | name_database_entry 24 (struct) 12 (struct) 12 (struct) 8 (struct) 8 (struct) 433 | name_list 8 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 434 | netaddr 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 435 | netent 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 436 | netgroup_response_header ??? () ??? () ??? () ??? ??? 437 | netlink_handle 32 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 438 | netlink_res 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 439 | netname2user_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 440 | netnamestr 8 (char*) 4 (char*) 4 (char*) 4 (char*) 4 (char*) 441 | netobj 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 442 | nfds_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 443 | nlink_t 8 (long unsigned int) 4 (unsigned int) 8 (long long unsigned int) 4 (unsigned int) 4 (unsigned int) 444 | nlmsgerr 20 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 445 | nlmsghdr 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 446 | nls_uint32 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 447 | nl_catd 8 (void*) 4 (void*) 4 (void*) 4 (void*) 4 (void*) 448 | nl_item 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 449 | node 8 (node_t*) 4 (node_t*) 4 (node_t*) 4 (node_t*) 4 (node_t*) 450 | node_t 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 451 | nscd_ai_result 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 452 | nscd_ssize_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 453 | nscd_time_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 454 | nss_getcanonname_r 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 455 | nss_gethostbyname3_r 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 456 | nss_gethostbyname4_r 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 457 | nss_status 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 458 | ntptimeval 72 (struct) 36 (struct) 48 (struct) 24 (struct) 24 (struct) 459 | object ??? 24 (struct) ??? ??? 24 (struct) 460 | obstack 88 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 461 | obstack_FILE 232 (struct) 156 (struct) 168 (struct) 168 (struct) 168 (struct) 462 | off64_t 8 (long int) 8 (long long int) 8 (long long int) 8 (???) 8 (???) 463 | off_t 8 (long int) 4 (long int) 8 (long long int) 8 (???) 8 (???) 464 | old_kernel_dirent ??? 268 (struct) ??? ??? ??? 465 | old_kernel_dirent64 ??? 276 (struct) ??? ??? ??? 466 | opaque_auth 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 467 | operator 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 468 | option 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 469 | option_list 16 (struct) 8 (struct) 8 (struct) ??? ??? 470 | parser 216 (struct) 128 (struct) 128 (struct) 128 (struct) 128 (struct) 471 | parser_convert_state 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 472 | parser_data ??? ??? ??? ??? ??? 473 | parser_sizes 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 474 | parse_args 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 475 | parse_cbs 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 476 | passwd 48 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 477 | path_elem 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 478 | patternlist 16 (struct) 8 (struct) 8 (struct) 4 (struct) 4 (struct) 479 | pentry_state 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 480 | pid_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 481 | pmap 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 482 | pmaplist 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 483 | pollfd 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 484 | posix_spawnattr_t ??? () ??? () ??? () ??? () ??? () 485 | posix_spawn_file_actions_t ??? () ??? () ??? () ??? () ??? () 486 | prefixentry 24 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 487 | prefixlist 32 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 488 | printf_arg 16 (struct) 12 (struct) 16 (struct) 8 (struct) 8 (struct) 489 | printf_arginfo_function ??? () ??? () ??? () ??? () ??? () 490 | printf_arginfo_size_function ??? () ??? () ??? () ??? ??? 491 | printf_function ??? () ??? () ??? () ??? () ??? () 492 | printf_info 20 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 493 | printf_modifier_record 16 (struct) 8 (struct) 8 (struct) ??? ??? 494 | printf_spec 72 (struct) 52 (struct) 52 (struct) 48 (struct) 48 (struct) 495 | printf_va_arg_function ??? () ??? () ??? () ??? ??? 496 | priority_protection_data 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 497 | prof 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 498 | prof_info 216 (struct) 172 (struct) 192 (struct) 192 (struct) 192 (struct) 499 | proglst_ 40 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 500 | protoent 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 501 | pthread 2304 (struct) 1216 (struct) 1728 (struct) 1216 (struct) 1152 (struct) 502 | pthread_attr_t 56 (struct) 36 (struct) 32 (struct) ??? () ??? () 503 | pthread_condattr_t ??? () ??? () ??? () ??? () ??? () 504 | pthread_cond_2_0_t ??? () ??? () ??? () ??? () ??? () 505 | pthread_cond_t ??? () ??? () ??? () ??? () ??? () 506 | pthread_functions 432 (struct) 216 (struct) 216 (struct) 212 (struct) 212 (struct) 507 | pthread_key_data 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 508 | pthread_key_struct 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 509 | pthread_key_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 510 | pthread_mutexattr_t ??? () ??? () ??? () ??? () ??? () 511 | pthread_mutex_t ??? () ??? () ??? () ??? () ??? () 512 | pthread_once_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 513 | pthread_rwlock_t ??? () ??? () ??? () ??? () ??? () 514 | pthread_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 515 | pthread_unwind_buf 104 (struct) 44 (struct) 88 (struct) 88 (struct) 44 (struct) 516 | ptime_locale_status 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 517 | ptrdiff_t 8 (long int) 4 (int) 4 (int) 4 (int) 4 (int) 518 | ptrhack 432 (struct) 216 (struct) 216 (struct) 212 (struct) 212 (struct) 519 | ptrs_to_free 272 (struct) 136 (struct) 136 (struct) 136 (struct) 136 (struct) 520 | public_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 521 | pw_response_header ??? () ??? () ??? () ??? () ??? () 522 | qelem 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 523 | quad_t 8 (long int) 8 (long long int) 8 (long long int) 8 (???) 8 (???) 524 | random_data 48 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 525 | random_poly_info 40 (struct) 40 (struct) 40 (struct) 40 (struct) 40 (struct) 526 | range 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 527 | real_gmon_hdr 20 (struct) 20 (struct) 20 (struct) ??? ??? 528 | real_gmon_hist_hdr 40 (struct) 32 (struct) 32 (struct) ??? ??? 529 | RECSTREAM 128 (rec_strm) 68 (rec_strm) 68 (rec_strm) 68 (rec_strm) 68 (rec_strm) 530 | rec_strm 128 (struct) 68 (struct) 68 (struct) 68 (struct) 68 (struct) 531 | ref_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 532 | regex_t 64 (re_pattern_buffer) 32 (re_pattern_buffer) 32 (re_pattern_buffer) 32 (re_pattern_buffer) 32 (re_pattern_buffer) 533 | region 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 534 | regmatch_t ??? () ??? () ??? () ??? () ??? () 535 | regoff_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 536 | reg_errcode_t ??? () ??? () ??? () ??? () ??? () 537 | reg_syntax_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 538 | rejected_reply 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 539 | reject_stat 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 540 | reloc_result 32 (struct) 20 (struct) 20 (struct) 24 (struct) 20 (struct) 541 | reply_body 56 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 542 | reply_stat 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 543 | req 20 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 544 | request_header ??? () ??? () ??? () ??? () ??? () 545 | request_type ??? () ??? () ??? () ??? () ??? () 546 | resultproc_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 547 | res_sendhookact ??? () ??? () ??? () ??? () ??? () 548 | res_send_qhook 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 549 | res_send_rhook 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 550 | res_state 8 (__res_state*) 4 (__res_state*) 4 (__res_state*) 4 (__res_state*) 4 (__res_state*) 551 | re_backref_cache_entry 20 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 552 | re_bitset_ptr_t 8 (long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 553 | re_charset_t ??? () ??? () ??? () ??? () ??? () 554 | re_const_bitset_ptr_t 8 (long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 4 (long unsigned int*) 555 | re_context_type ??? () ??? () ??? () ??? () ??? () 556 | re_dfastate_t 88 (struct) 56 (struct) 56 (struct) 56 (struct) 56 (struct) 557 | re_dfa_t 224 (struct) 140 (struct) 140 (struct) 140 (struct) 140 (struct) 558 | re_fail_stack_ent_t 32 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 559 | re_fail_stack_t 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 560 | re_match_context_t ??? () ??? () ??? () ??? () ??? () 561 | re_node_set ??? () ??? () ??? () ??? () ??? () 562 | re_pattern_buffer 64 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 563 | re_registers 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 564 | re_sift_context_t ??? () ??? () ??? () ??? () ??? () 565 | re_state_table_entry 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 566 | re_string_t 112 (struct) 84 (struct) 84 (struct) 84 (struct) 84 (struct) 567 | re_sub_match_last_t ??? () ??? () ??? () ??? () ??? () 568 | re_sub_match_top_t ??? () ??? () ??? () ??? () ??? () 569 | re_token_t ??? () ??? () ??? () ??? () ??? () 570 | re_token_type_t ??? () ??? () ??? () ??? () ??? () 571 | rlim64_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) ??? ??? 572 | rlimit 16 (struct) 8 (struct) 16 (struct) 16 (struct) 16 (struct) 573 | rlimit64 16 (struct) 16 (struct) 16 (struct) ??? ??? 574 | rlim_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 575 | rmtcallargs 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 576 | rmtcallres 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 577 | robust_list_head 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 578 | rpcent 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 579 | rpcproc_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 580 | rpcprog_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 581 | rpcprot_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) ??? ??? 582 | rpcvers_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 583 | rpc_createerr 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 584 | rpc_err 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 585 | rpc_errtab 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 586 | rpc_msg 96 (struct) 48 (struct) 48 (struct) 48 (struct) 48 (struct) 587 | rpc_thread_variables 264 (struct) 196 (struct) 196 (struct) 196 (struct) 196 (struct) 588 | rpc_timeval 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 589 | rtattr 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 590 | rtgenmsg 1 (struct) 1 (struct) 1 (struct) 1 (struct) 1 (struct) 591 | rtld_global 3968 (struct) 2104 (struct) 2256 (struct) 1696 (struct) 1424 (struct) 592 | rtld_global_ro 304 (struct) 472 (struct) 192 (struct) 192 (struct) 440 (struct) 593 | rusage 144 (struct) 72 (struct) 144 (struct) 88 (struct) 88 (struct) 594 | r_debug 40 (struct) 20 (struct) 20 (struct) 32 (struct) 20 (struct) 595 | r_dir_status 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 596 | r_found_version 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 597 | r_scope_elem 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 598 | r_search_path_elem 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 599 | r_search_path_struct 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 600 | sa_family_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 601 | scandir_cancel_struct 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 602 | sched_param 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 603 | scopeentry 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 604 | scopelist 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 605 | secret_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 606 | segment_pair 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 607 | sem ??? ??? ??? ??? ??? 608 | sembuf ??? 6 (struct) ??? 6 (struct) 6 (struct) 609 | semid_ds ??? 64 (struct) ??? ??? 80 (struct) 610 | seminfo ??? 40 (struct) ??? ??? 40 (struct) 611 | semun ??? 4 (struct) ??? ??? 4 (struct) 612 | sem_queue ??? ??? ??? ??? ??? 613 | sem_undo ??? ??? ??? ??? ??? 614 | servent 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 615 | service_library 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 616 | service_user 56 (struct) 36 (struct) 36 (struct) 32 (struct) 32 (struct) 617 | serv_response_header ??? () ??? () ??? () ??? () ??? () 618 | setent_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 619 | set_function 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 620 | severity_info 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 621 | sgrp 32 (struct) 16 (struct) 16 (struct) ??? ??? 622 | sgttyb ??? ??? ??? ??? ??? 623 | shmatt_t ??? 4 (long unsigned int) ??? ??? 4 (long unsigned int) 624 | shmid_ds ??? 84 (struct) ??? ??? 104 (struct) 625 | short int 2 (basic) 2 (basic) 2 (basic) 2 (basic) 2 (basic) 626 | short unsigned int 2 (basic) 2 (basic) 2 (basic) 2 (basic) 2 (basic) 627 | sigaction 152 (struct) 140 (struct) 140 (struct) 140 (struct) 140 (struct) 628 | sigaltstack 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 629 | sigcontext 256 (struct) 88 (struct) 256 (struct) 132 (struct) 88 (struct) 630 | sighandler_t 8 (*) 4 (*) 4 (*) ??? ??? 631 | siginfo ??? ??? ??? 124 (struct) 128 (struct) 632 | siginfo_t ??? () ??? () ??? () 124 (siginfo) 128 (siginfo) 633 | signed char 1 (basic) 1 (basic) 1 (basic) 1 (basic) 1 (basic) 634 | sigset_t ??? () ??? () ??? () ??? () ??? () 635 | sigstack 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 636 | sigval 8 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 637 | sigval_t 8 (sigval) 4 (sigval) 4 (sigval) 4 (sigval) 4 (sigval) 638 | sigvec 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 639 | SItype ??? 4 (int) ??? ??? 4 (int) 640 | sizetype 8 (basic) 4 (basic) 4 (basic) ??? ??? 641 | size_t 8 (long unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 642 | sockaddr 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 643 | sockaddr_at ??? ??? ??? ??? ??? 644 | sockaddr_ax25 ??? ??? ??? ??? ??? 645 | sockaddr_dl ??? ??? ??? ??? ??? 646 | sockaddr_eon ??? ??? ??? ??? ??? 647 | sockaddr_in 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 648 | sockaddr_in6 28 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 649 | sockaddr_inarp ??? ??? ??? ??? ??? 650 | sockaddr_ipx ??? ??? ??? ??? ??? 651 | sockaddr_iso ??? ??? ??? ??? ??? 652 | sockaddr_ll_max 36 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 653 | sockaddr_nl 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 654 | sockaddr_ns ??? ??? ??? ??? ??? 655 | sockaddr_storage 128 (struct) 128 (struct) 128 (struct) 128 (struct) 128 (struct) 656 | sockaddr_un 110 (struct) 110 (struct) 110 (struct) 110 (struct) 110 (struct) 657 | sockaddr_x25 ??? ??? ??? ??? ??? 658 | socklen_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 659 | sock_extended_err 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 660 | sort_result 48 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 661 | sort_result_combo 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 662 | speed_struct 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 663 | speed_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 664 | spwd 72 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 665 | ssize_t 8 (long int) 4 (int) 4 (int) 4 (int) 4 (int) 666 | stack_node ??? () ??? () ??? () ??? () ??? () 667 | stack_t 24 (sigaltstack) 12 (sigaltstack) 12 (sigaltstack) 12 (sigaltstack) 12 (sigaltstack) 668 | stat 144 (struct) 88 (struct) 144 (struct) 112 (struct) 112 (struct) 669 | stat64 144 (struct) 96 (struct) 144 (struct) 112 (struct) 112 (struct) 670 | state_array_t ??? () ??? () ??? () ??? () ??? () 671 | statfs 120 (struct) 64 (struct) 120 (struct) 88 (struct) 88 (struct) 672 | statfs64 ??? 84 (struct) ??? ??? 88 (struct) 673 | statvfs 112 (struct) 72 (struct) 96 (struct) 96 (struct) 96 (struct) 674 | statvfs64 112 (struct) 96 (struct) 96 (struct) 96 (struct) 96 (struct) 675 | strbuf 16 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 676 | string_desc 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 677 | str_list 24 (struct) 12 (struct) 12 (struct) ??? ??? 678 | svcraw_private_s 9584 (struct) 9532 (struct) 9532 (struct) 9532 (struct) 9532 (struct) 679 | svcudp_data 472 (struct) 436 (struct) 436 (struct) 436 (struct) 436 (struct) 680 | SVCXPRT 336 (struct) 308 (struct) 308 (struct) 308 (struct) 308 (struct) 681 | svc_callout 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 682 | svc_req 64 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 683 | sword ??? 4 (int) ??? ??? 4 (int) 684 | sysdep_segment 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 685 | sysdep_string 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 686 | sysdep_string_desc 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 687 | tcbhead_t ??? () ??? () ??? () ??? () ??? () 688 | tcflag_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 689 | tcp_conn 464 (struct) 432 (struct) 432 (struct) 432 (struct) 432 (struct) 690 | tcp_rendezvous 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 691 | td_eventbuf_t ??? () ??? () ??? () ??? () ??? () 692 | td_event_e ??? () ??? () ??? () ??? () ??? () 693 | td_thr_events 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 694 | td_thr_events_t 8 (td_thr_events) 8 (td_thr_events) 8 (td_thr_events) 8 (td_thr_events) 8 (td_thr_events) 695 | termios 60 (struct) 60 (struct) 60 (struct) 60 (struct) 60 (struct) 696 | thread_wait_list_node ??? ??? ??? 24 (struct) 24 (struct) 697 | timeb 16 (struct) 12 (struct) 16 (struct) 16 (struct) 16 (struct) 698 | timespec 16 (struct) 8 (struct) 16 (struct) 16 (struct) 16 (struct) 699 | timeval 16 (struct) 8 (struct) 16 (struct) 16 (struct) 16 (struct) 700 | timex 208 (struct) 128 (struct) 208 (struct) 144 (struct) 144 (struct) 701 | timezone 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 702 | time_t 8 (long int) 4 (long int) 8 (long long int) 8 (???) 8 (???) 703 | tls_index 16 (dl_tls_index) 8 (dl_tls_index) 16 (dl_tls_index) 16 (dl_tls_index) 8 (dl_tls_index) 704 | tm 56 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 705 | tms 32 (struct) 16 (struct) 32 (struct) 16 (struct) 16 (struct) 706 | toktab 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 707 | tostruct 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 708 | traced_file ??? ??? ??? ??? ??? 709 | trace_arg 24 (struct) 20 (struct) 24 (struct) 12 (struct) 20 (struct) 710 | transmem_block_t 8 (transmem_list) 4 (transmem_list) 4 (transmem_list) 4 (transmem_list) 4 (transmem_list) 711 | transmem_list 8 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 712 | trans_struct 64 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 713 | tsd_key_t 8 (int[]) 4 (int[]) 4 (int[]) 4 (int[]) 4 (int[]) 714 | ttinfo 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 715 | ttyent 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 716 | tzhead 44 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 717 | tzstring_l 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 718 | tz_rule ??? () ??? () ??? () ??? () ??? () 719 | uaddr ??? 4 (unsigned int) ??? ??? 4 (unsigned int) 720 | ubyte ??? 1 (unsigned char) ??? ??? 1 (unsigned char) 721 | ucontext 936 (struct) ??? 920 (struct) 792 (struct) 348 (struct) 722 | ucontext_t 936 (ucontext) ??? 920 (ucontext) 792 (ucontext) 348 (ucontext) 723 | ucred 12 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 724 | UDItype 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) ??? 8 (long long unsigned int) 725 | udp_cache 72 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 726 | UHWtype ??? ??? ??? 4 (unsigned int) ??? 727 | uid_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 728 | uint16_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 729 | uint32_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 730 | uint64_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 731 | uint8_t 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 732 | uintmax_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 733 | uintptr_t 8 (long unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 734 | uint_fast32_t 8 (long unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 735 | unaligned ??? 8 (struct) ??? ??? 8 (struct) 736 | unique_sym 32 (struct) 16 (struct) 16 (struct) ??? ??? 737 | unique_sym_table 72 (struct) 40 (struct) 48 (struct) ??? ??? 738 | unixcred 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 739 | unix_conn 464 (struct) 432 (struct) 432 (struct) 432 (struct) 432 (struct) 740 | unix_rendezvous 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 741 | unsigned char 1 (basic) 1 (basic) 1 (basic) 1 (basic) 1 (basic) 742 | unsigned int 4 (basic) 4 (basic) 4 (basic) 4 (basic) 4 (basic) 743 | unw_eh_callback_data ??? 20 (struct) ??? ??? 20 (struct) 744 | unw_eh_frame_hdr ??? 4 (struct) ??? ??? 4 (struct) 745 | uparams 36 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 746 | uparam_name 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 747 | UQItype ??? ??? ??? 1 (unsigned char) ??? 748 | useconds_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 749 | used_handler 16 (struct) 8 (struct) 8 (struct) ??? ??? 750 | USItype ??? 4 (unsigned int) ??? ??? 4 (unsigned int) 751 | ustat 32 (struct) 20 (struct) 32 (struct) 32 (struct) 32 (struct) 752 | utfuncs 56 (struct) 28 (struct) 28 (struct) 28 (struct) 28 (struct) 753 | utimbuf ??? ??? ??? 16 (struct) 16 (struct) 754 | utmp 384 (struct) 384 (struct) 384 (struct) 384 (struct) 400 (struct) 755 | utmpx 384 (struct) 384 (struct) 384 (struct) 384 (struct) 400 (struct) 756 | utsname 390 (struct) 390 (struct) 390 (struct) 390 (struct) 390 (struct) 757 | uword ??? 4 (unsigned int) ??? ??? 4 (unsigned int) 758 | UWtype ??? ??? ??? 4 (long unsigned int) ??? 759 | u_char 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 760 | u_int 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 761 | u_int16_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 762 | u_int32_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 763 | u_int8_t 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 764 | u_long 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 765 | u_quad_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 766 | u_short 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 767 | value_type 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 768 | va_list 8 (__va_list_tag[]) 4 (char*) 4 (__va_list_tag[]) 4 (__va_list_tag[]) 4 (__va_list_tag[]) 769 | VISIT ??? () ??? () ??? () ??? () ??? () 770 | vm_area_struct ??? ??? ??? ??? ??? 771 | vtimes 40 (struct) 40 (struct) 40 (struct) 40 (struct) 40 (struct) 772 | wait 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 773 | wait_queue ??? ??? ??? ??? ??? 774 | wchar_t 4 (int) 4 (long int) 4 (long int) 4 (long int) 4 (long int) 775 | wctrans_t 8 (int*) 4 (int*) 4 (int*) 4 (int*) 4 (int*) 776 | wctype_t 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 777 | wint_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 778 | wordexp_t ??? () ??? () ??? () ??? () ??? () 779 | XDR 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 780 | xdrproc_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 781 | xdr_discrim 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 782 | xdr_op 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 783 | xdr_ops 80 (struct) 40 (struct) 40 (struct) 40 (struct) 40 (struct) 784 | XFtype ??? 12 (long double) ??? ??? ??? 785 | xid_command 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 786 | xprt_stat 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 787 | xp_ops 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 788 | yyalloc 8 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 789 | yystype ??? ??? ??? ??? () ??? () 790 | YYSTYPE 8 (struct) 4 (struct) 4 (struct) ??? ??? 791 | yytype_int16 2 (short int) 2 (short int) 2 (short int) ??? ??? 792 | yytype_int8 1 (signed char) 1 (signed char) 1 (signed char) ??? ??? 793 | yytype_uint8 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) ??? ??? 794 | _Bool 1 (basic) 1 (basic) 1 (basic) 1 (basic) 1 (basic) 795 | _ENTRY 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 796 | _fpreg ??? 10 (struct) ??? ??? 10 (struct) 797 | _fpstate 512 (struct) 624 (struct) 512 (struct) 512 (struct) 624 (struct) 798 | _fpxreg 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 799 | _ftsent 120 (struct) 72 (struct) 80 (struct) 80 (struct) 80 (struct) 800 | _getopt_data 56 (struct) 40 (struct) 40 (struct) 40 (struct) 40 (struct) 801 | _G_fpos64_t ??? ??? () ??? ??? ??? 802 | _G_fpos_t ??? () ??? () ??? () ??? () ??? () 803 | _G_iconv_t ??? () ??? () ??? () ??? () ??? () 804 | _heap_info 32 (struct) 16 (struct) 24 (struct) 16 (struct) 16 (struct) 805 | _IO_alloc_type 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 806 | _IO_close_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 807 | _IO_codecvt 208 (struct) 120 (struct) 120 (struct) 120 (struct) 120 (struct) 808 | _IO_cookie_file 264 (struct) 172 (struct) 184 (struct) 184 (struct) 184 (struct) 809 | _IO_cookie_io_functions_t ??? () ??? () ??? () ??? () ??? () 810 | _IO_doallocate_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 811 | _IO_FILE 216 (struct) 148 (struct) 152 (struct) 152 (struct) 152 (struct) 812 | _IO_FILE_complete ??? 148 (struct) ??? ??? 152 (struct) 813 | _IO_FILE_complete_plus ??? 152 (struct) ??? ??? 160 (struct) 814 | _IO_FILE_memstream 256 (struct) 168 (struct) 176 (struct) 176 (struct) 176 (struct) 815 | _IO_FILE_plus 224 (struct) 152 (struct) 160 (struct) 160 (struct) 160 (struct) 816 | _IO_FILE_wmemstream 256 (struct) 168 (struct) 176 (struct) 176 (struct) 176 (struct) 817 | _IO_finish_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 818 | _IO_free_type 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 819 | _IO_imbue_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 820 | _IO_ITER 8 (_IO_FILE*) 4 (_IO_FILE*) 4 (_IO_FILE*) 4 (_IO_FILE*) 4 (_IO_FILE*) 821 | _IO_jump_t 168 (struct) 84 (struct) 84 (struct) 84 (struct) 84 (struct) 822 | _IO_lock_t ??? () ??? () ??? () ??? () ??? () 823 | _IO_marker 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 824 | _IO_obstack_file 232 (struct) 156 (struct) 168 (struct) 168 (struct) 168 (struct) 825 | _IO_overflow_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 826 | _IO_pbackfail_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 827 | _IO_proc_file 240 (struct) 160 (struct) 168 (struct) 168 (struct) 168 (struct) 828 | _IO_read_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 829 | _IO_seekoff_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 830 | _IO_seekpos_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 831 | _IO_seek_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 832 | _IO_setbuf_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 833 | _IO_showmanyc_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 834 | _IO_stat_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 835 | _IO_streambuf 224 (struct) 152 (struct) 160 (struct) 160 (struct) 160 (struct) 836 | _IO_strfile 240 (_IO_strfile_) 160 (_IO_strfile_) 168 (_IO_strfile_) 168 (_IO_strfile_) 168 (_IO_strfile_) 837 | _IO_strfile_ 240 (struct) 160 (struct) 168 (struct) 168 (struct) 168 (struct) 838 | _IO_strnfile ??? () ??? () ??? () ??? () ??? () 839 | _IO_str_fields 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 840 | _IO_sync_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 841 | _IO_underflow_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 842 | _IO_wide_data 328 (struct) 188 (struct) 188 (struct) 188 (struct) 188 (struct) 843 | _IO_write_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 844 | _IO_wstrnfile ??? () ??? () ??? () ??? () ??? () 845 | _IO_xsgetn_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 846 | _IO_xsputn_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 847 | _libc_fpreg ??? ??? ??? ??? 10 (struct) 848 | _libc_fpstate 512 (struct) ??? 512 (struct) 512 (struct) 112 (struct) 849 | _libc_fpxreg 16 (struct) ??? 16 (struct) 16 (struct) ??? 850 | _libc_xmmreg 16 (struct) ??? 16 (struct) 16 (struct) ??? 851 | _obstack_chunk 24 (struct) 12 (struct) 12 (struct) 12 (struct) 12 (struct) 852 | _pthread_cleanup_buffer 32 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 853 | _Unwind_Action 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 854 | _Unwind_Context ??? 100 (struct) ??? ??? 100 (struct) 855 | _Unwind_Exception 32 (struct) 32 (struct) 32 (struct) 32 (struct) 32 (struct) 856 | _Unwind_Exception_Class 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 857 | _Unwind_Exception_Cleanup_Fn 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 858 | _Unwind_FrameState ??? ??? () ??? ??? ??? () 859 | _Unwind_Internal_Ptr ??? 4 (unsigned int) ??? ??? 4 (unsigned int) 860 | _Unwind_Personality_Fn ??? 4 (*) ??? ??? 4 (*) 861 | _Unwind_Ptr 8 (long unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 862 | _Unwind_Reason_Code ??? () ??? () ??? () ??? () ??? () 863 | _Unwind_Sword ??? 4 (int) ??? ??? 4 (int) 864 | _Unwind_Trace_Fn 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 865 | _Unwind_Word 8 (long unsigned int) 4 (unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 4 (unsigned int) 866 | _xmmreg 16 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 867 | __128bits ??? () ??? ??? () ??? ??? 868 | __action_fn_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 869 | __bb 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 870 | __blkcnt64_t 8 (long int) 8 (long long int) 8 (long long int) 8 (???) 8 (???) 871 | __blkcnt_t 8 (long int) 4 (long int) 8 (long long int) ??? ??? 872 | __blksize_t 8 (long int) 4 (long int) 8 (long long int) 8 (???) 8 (???) 873 | __caddr_t 8 (char*) 4 (char*) 4 (char*) 4 (char*) 4 (char*) 874 | __clockid_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 875 | __clock_t 8 (long int) 4 (long int) 8 (long long int) 4 (long int) 4 (long int) 876 | __codecvt_result 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 877 | __compar_d_fn_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 878 | __compar_fn_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 879 | __CONST_SOCKADDR_ARG ??? () ??? () ??? () ??? ??? 880 | __cpu_mask 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 881 | __daddr_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 882 | __dev_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 883 | __dirstream 48 (struct) 28 (struct) 32 (struct) 32 (struct) 32 (struct) 884 | __dispatch_fn_t 8 (*) 4 (*) 4 (*) ??? ??? 885 | __exit_status 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 886 | __fd_mask 8 (long int) 4 (long int) 4 (long int) 4 (long int) 4 (long int) 887 | __FILE 216 (_IO_FILE) 148 (_IO_FILE) 152 (_IO_FILE) 152 (_IO_FILE) 152 (_IO_FILE) 888 | __free_fn_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 889 | __fsblkcnt64_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 890 | __fsblkcnt_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 891 | __fsfilcnt64_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 892 | __fsfilcnt_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 893 | __fsid_t ??? () ??? () ??? () ??? () ??? () 894 | __fsword_t 8 (long int) 4 (int) 8 (long long int) ??? ??? 895 | __ftw64_func_t ??? 4 (*) ??? ??? ??? 896 | __ftw_func_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 897 | __gconv_btowc_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 898 | __gconv_end_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 899 | __gconv_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 900 | __gconv_info 16 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 901 | __gconv_init_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 902 | __gconv_loaded_object 48 (struct) 24 (struct) 24 (struct) 24 (struct) 24 (struct) 903 | __gconv_step 104 (struct) 60 (struct) 60 (struct) 60 (struct) 60 (struct) 904 | __gconv_step_data 56 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 905 | __gconv_t 8 (__gconv_info*) 4 (__gconv_info*) 4 (__gconv_info*) 4 (__gconv_info*) 4 (__gconv_info*) 906 | __gconv_trans_context_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 907 | __gconv_trans_data 40 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 908 | __gconv_trans_end_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 909 | __gconv_trans_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 910 | __gconv_trans_init_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 911 | __gconv_trans_query_fct 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 912 | __gid_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 913 | __gnuc_va_list 8 (__va_list_tag[]) 4 (char*) 4 (__va_list_tag[]) 4 (__va_list_tag[]) 4 (__va_list_tag[]) 914 | __gwchar_t 4 (int) 4 (long int) 4 (long int) ??? ??? 915 | __id_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 916 | __ino64_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 917 | __ino_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 918 | __int128 unsigned 16 (basic) ??? ??? ??? ??? 919 | __int32_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 920 | __intptr_t 8 (long int) 4 (int) 4 (int) 4 (int) 4 (int) 921 | __io_close_fn ??? () ??? () ??? () ??? () ??? () 922 | __io_read_fn ??? () ??? () ??? () ??? () ??? () 923 | __io_seek_fn ??? () ??? () ??? () ??? () ??? () 924 | __io_write_fn ??? () ??? () ??? () ??? () ??? () 925 | __ipc_pid_t ??? 2 (short unsigned int) ??? ??? 2 (short unsigned int) 926 | __itimer_which 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 927 | __jmp_buf 8 (long int[]) 4 (int[]) 4 (long long int[]) 4 (???[]) 4 (int[]) 928 | __jmp_buf_tag 200 (struct) 156 (struct) 200 (struct) 200 (struct) 156 (struct) 929 | __kernel_long_t 8 (long int) 4 (long int) 8 (long long int) ??? ??? 930 | __kernel_off_t 8 (long int) 4 (long int) 8 (long long int) ??? ??? 931 | __kernel_sa_family_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) ??? ??? 932 | __kernel_termios 36 (struct) 36 (struct) 36 (struct) 36 (struct) 36 (struct) 933 | __key_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 934 | __libc_key_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 935 | __libc_lock_recursive_t ??? () ??? () ??? () ??? () ??? () 936 | __libc_lock_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 937 | __libc_rwlock_t ??? () ??? () ??? () ??? () ??? () 938 | __locale_data 64 (struct) 36 (struct) 40 (struct) ??? ??? 939 | __locale_struct 232 (struct) 116 (struct) 116 (struct) 116 (struct) 116 (struct) 940 | __locale_t 8 (__locale_struct*) 4 (__locale_struct*) 4 (__locale_struct*) 4 (__locale_struct*) 4 (__locale_struct*) 941 | __loff_t ??? 8 (long long int) ??? 8 (???) 8 (???) 942 | __m128i 8 (long long int[]) ??? 4 (long long int[]) ??? ??? 943 | __mbstate_t ??? () ??? () ??? () ??? () ??? () 944 | __mode_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 945 | __netgrent 88 (struct) 44 (struct) 44 (struct) 44 (struct) 44 (struct) 946 | __nftw64_func_t ??? 4 (*) ??? ??? ??? 947 | __nftw_func_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 948 | __nlink_t 8 (long unsigned int) 4 (unsigned int) 8 (long long unsigned int) 4 (unsigned int) 4 (unsigned int) 949 | __nl_catd 8 (catalog_info*) 4 (catalog_info*) 4 (catalog_info*) 4 (catalog_info*) 4 (catalog_info*) 950 | __ns_sect 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 951 | __off64_t 8 (long int) 8 (long long int) 8 (long long int) 8 (???) 8 (???) 952 | __off_t 8 (long int) 4 (long int) 8 (long long int) 8 (???) 8 (???) 953 | __old_dirent64 ??? 272 (struct) ??? ??? ??? 954 | __old_ipc_perm ??? 16 (struct) ??? ??? 16 (struct) 955 | __old_msqid_ds ??? 56 (struct) ??? ??? 72 (struct) 956 | __old_semid_ds ??? 44 (struct) ??? ??? 56 (struct) 957 | __old_shmid_ds ??? 48 (struct) ??? ??? 64 (struct) 958 | __pid_t 4 (int) 4 (int) 4 (int) 4 (int) 4 (int) 959 | __pid_type 4 (struct) ??? 4 (struct) ??? ??? 960 | __priority_which 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 961 | __priority_which_t 4 (__priority_which) 4 (__priority_which) 4 (__priority_which) ??? ??? 962 | __pthread_cleanup_frame 24 (struct) 16 (struct) 16 (struct) 16 (struct) 16 (struct) 963 | __pthread_internal_list 16 (struct) ??? 8 (struct) 8 (struct) ??? 964 | __pthread_internal_slist ??? 4 (struct) ??? ??? 4 (struct) 965 | __pthread_list_t 16 (__pthread_internal_list) ??? 8 (__pthread_internal_list) 8 (__pthread_internal_list) ??? 966 | __pthread_mutex_s 40 (struct) 24 (struct) 32 (struct) 32 (struct) 24 (struct) 967 | __pthread_slist_t ??? 4 (__pthread_internal_slist) ??? ??? 4 (__pthread_internal_slist) 968 | __pthread_unwind_buf_t ??? () ??? () ??? () ??? () ??? () 969 | __ptrace_request 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 970 | __quad_t 8 (long int) 8 (long long int) 8 (long long int) 8 (???) 8 (???) 971 | __res_state 568 (struct) 512 (struct) 512 (struct) 512 (struct) 512 (struct) 972 | __rlim64_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) ??? ??? 973 | __rlimit_resource 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 974 | __rlimit_resource_t 4 (__rlimit_resource) 4 (__rlimit_resource) 4 (__rlimit_resource) ??? ??? 975 | __rlim_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 976 | __rtld_lock_recursive_t ??? () ??? () ??? () ??? () ??? () 977 | __rusage_who 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 978 | __sigchld_clock_t 8 (long int) 4 (long int) 8 (long long int) ??? ??? 979 | __sighandler_t 8 (*) 4 (*) 4 (*) 4 (*) 4 (*) 980 | __sigset_t ??? () ??? () ??? () ??? () ??? () 981 | __size_t 8 (long unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 982 | __SOCKADDR_ARG ??? () ??? () ??? () ??? () ??? () 983 | __socket_type 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 984 | __socklen_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 985 | __spawn_action 32 (struct) 20 (struct) 20 (struct) 20 (struct) 20 (struct) 986 | __ssize_t 8 (long int) 4 (int) 4 (int) 4 (int) 4 (int) 987 | __strptime_state 8 (struct) 8 (struct) 8 (struct) 8 (struct) 8 (struct) 988 | __str_list ??? ??? ??? 12 (struct) 12 (struct) 989 | __suseconds_t 8 (long int) 4 (long int) 8 (long long int) 4 (long int) 4 (long int) 990 | __syscall_slong_t 8 (long int) 4 (long int) 8 (long long int) ??? ??? 991 | __syscall_ulong_t 8 (long unsigned int) 4 (long unsigned int) 8 (long long unsigned int) ??? ??? 992 | __sysctl_args 80 (struct) 40 (struct) ??? 40 (struct) 40 (struct) 993 | __time_t 8 (long int) 4 (long int) 8 (long long int) 8 (???) 8 (???) 994 | __u16 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 995 | __u32 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 996 | __u8 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 997 | __uid_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 998 | __uint16_t 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 999 | __uint32_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 1000 | __uint64_t 8 (long unsigned int) ??? 8 (long long unsigned int) 8 (long long unsigned int) ??? 1001 | __useconds_t 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 1002 | __u_char 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1 (unsigned char) 1003 | __u_int 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 4 (unsigned int) 1004 | __u_long 8 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 4 (long unsigned int) 1005 | __u_quad_t 8 (long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 8 (long long unsigned int) 1006 | __u_short 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 2 (short unsigned int) 1007 | __v16qi 8 (char[]) ??? 4 (char[]) ??? ??? 1008 | __v2di ??? ??? 4 (long long int[]) ??? ??? 1009 | __v4si ??? ??? 4 (int[]) ??? ??? 1010 | __va_list_tag 24 (struct) ??? 16 (struct) 16 (struct) 16 (struct) 1011 | __vlimit_resource 4 (struct) 4 (struct) 4 (struct) 4 (struct) 4 (struct) 1012 | __WAIT_STATUS ??? () ??? () ??? () ??? () ??? () 1013 | ____libc_atexit_hook_function_t ??? () ??? () ??? () ??? ??? 1014 | ____libc_subfreeres_hook_function_t ??? () ??? () ??? () ??? ??? 1015 | ____libc_thread_subfreeres_hook_function_t ??? () ??? () ??? () ??? ??? 1016 | ??? ??? ??? ??? 8 (basic) 8 (basic) 1017 | --------------------------------------------------------------------------------