1 /* $NetBSD: dwarf_sections.c,v 1.4 2024/03/03 17:37:32 christos Exp $ */ 2 3 /*- 4 * Copyright (c) 2014 Kai Wang 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #include "_libdwarf.h" 30 31 __RCSID("$NetBSD: dwarf_sections.c,v 1.4 2024/03/03 17:37:32 christos Exp $"); 32 ELFTC_VCSID("Id: dwarf_sections.c 3902 2020-11-24 21:17:41Z jkoshy"); 33 34 #define SET(N, V) \ 35 do { \ 36 if ((N) != NULL) \ 37 *(N) = (V); \ 38 } while (/* CONSTCOND */ 0) 39 40 int 41 dwarf_get_section_max_offsets_b(Dwarf_Debug dbg, Dwarf_Unsigned *debug_info, 42 Dwarf_Unsigned *debug_abbrev, Dwarf_Unsigned *debug_line, 43 Dwarf_Unsigned *debug_loc, Dwarf_Unsigned *debug_aranges, 44 Dwarf_Unsigned *debug_macinfo, Dwarf_Unsigned *debug_pubnames, 45 Dwarf_Unsigned *debug_str, Dwarf_Unsigned *debug_frame, 46 Dwarf_Unsigned *debug_ranges, Dwarf_Unsigned *debug_pubtypes, 47 Dwarf_Unsigned *debug_types) 48 { 49 const char *n; 50 Dwarf_Unsigned sz; 51 int i; 52 53 if (dbg == NULL) 54 return (DW_DLV_ERROR); 55 56 SET(debug_info, 0); 57 SET(debug_abbrev, 0); 58 SET(debug_line, 0); 59 SET(debug_loc, 0); 60 SET(debug_aranges, 0); 61 SET(debug_macinfo, 0); 62 SET(debug_pubnames, 0); 63 SET(debug_str, 0); 64 SET(debug_frame, 0); 65 SET(debug_ranges, 0); 66 SET(debug_pubtypes, 0); 67 SET(debug_types, 0); 68 69 for (i = 0; (Dwarf_Unsigned) i < dbg->dbg_seccnt; i++) { 70 n = dbg->dbg_section[i].ds_name; 71 sz = dbg->dbg_section[i].ds_size; 72 if (!strcmp(n, ".debug_info")) 73 SET(debug_info, sz); 74 else if (!strcmp(n, ".debug_abbrev")) 75 SET(debug_abbrev, sz); 76 else if (!strcmp(n, ".debug_line")) 77 SET(debug_line, sz); 78 else if (!strcmp(n, ".debug_loc")) 79 SET(debug_loc, sz); 80 else if (!strcmp(n, ".debug_aranges")) 81 SET(debug_aranges, sz); 82 else if (!strcmp(n, ".debug_macinfo")) 83 SET(debug_macinfo, sz); 84 else if (!strcmp(n, ".debug_pubnames")) 85 SET(debug_pubnames, sz); 86 else if (!strcmp(n, ".debug_str")) 87 SET(debug_str, sz); 88 else if (!strcmp(n, ".debug_frame")) 89 SET(debug_frame, sz); 90 else if (!strcmp(n, ".debug_ranges")) 91 SET(debug_ranges, sz); 92 else if (!strcmp(n, ".debug_pubtypes")) 93 SET(debug_pubtypes, sz); 94 else if (!strcmp(n, ".debug_types")) 95 SET(debug_types, sz); 96 } 97 98 return (DW_DLV_OK); 99 } 100 101 int 102 dwarf_get_section_max_offsets(Dwarf_Debug dbg, Dwarf_Unsigned *debug_info, 103 Dwarf_Unsigned *debug_abbrev, Dwarf_Unsigned *debug_line, 104 Dwarf_Unsigned *debug_loc, Dwarf_Unsigned *debug_aranges, 105 Dwarf_Unsigned *debug_macinfo, Dwarf_Unsigned *debug_pubnames, 106 Dwarf_Unsigned *debug_str, Dwarf_Unsigned *debug_frame, 107 Dwarf_Unsigned *debug_ranges, Dwarf_Unsigned *debug_pubtypes) 108 { 109 110 return (dwarf_get_section_max_offsets_b(dbg, debug_info, debug_abbrev, 111 debug_line, debug_loc, debug_aranges, debug_macinfo, 112 debug_pubnames, debug_str, debug_frame, debug_ranges, 113 debug_pubtypes, NULL)); 114 } 115