Branch data Line data Source code
1 : : /* Return segment type name. 2 : : Copyright (C) 2001, 2002, 2004 Red Hat, Inc. 3 : : This file is part of elfutils. 4 : : Written by Ulrich Drepper <drepper@redhat.com>, 2001. 5 : : 6 : : This file is free software; you can redistribute it and/or modify 7 : : it under the terms of either 8 : : 9 : : * the GNU Lesser General Public License as published by the Free 10 : : Software Foundation; either version 3 of the License, or (at 11 : : your option) any later version 12 : : 13 : : or 14 : : 15 : : * the GNU General Public License as published by the Free 16 : : Software Foundation; either version 2 of the License, or (at 17 : : your option) any later version 18 : : 19 : : or both in parallel, as here. 20 : : 21 : : elfutils is distributed in the hope that it will be useful, but 22 : : WITHOUT ANY WARRANTY; without even the implied warranty of 23 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24 : : General Public License for more details. 25 : : 26 : : You should have received copies of the GNU General Public License and 27 : : the GNU Lesser General Public License along with this program. If 28 : : not, see <http://www.gnu.org/licenses/>. */ 29 : : 30 : : #ifdef HAVE_CONFIG_H 31 : : # include <config.h> 32 : : #endif 33 : : 34 : : #include <stdio.h> 35 : : #include <libeblP.h> 36 : : 37 : : 38 : : const char * 39 : 1100 : ebl_segment_type_name (Ebl *ebl, int segment, char *buf, size_t len) 40 : : { 41 : 1100 : const char *res; 42 : : 43 [ + - ]: 1100 : res = ebl != NULL ? ebl->segment_type_name (segment, buf, len) : NULL; 44 [ + + ]: 1100 : if (res == NULL) 45 : : { 46 : 1099 : static const char *ptypes[PT_NUM] = 47 : : { 48 : : #define PTYPE(name) [PT_##name] = #name 49 : : PTYPE (NULL), 50 : : PTYPE (LOAD), 51 : : PTYPE (DYNAMIC), 52 : : PTYPE (INTERP), 53 : : PTYPE (NOTE), 54 : : PTYPE (SHLIB), 55 : : PTYPE (PHDR), 56 : : PTYPE (TLS) 57 : : }; 58 : : 59 : : /* Is it one of the standard segment types? */ 60 [ + + ]: 1099 : if (segment >= PT_NULL && segment < PT_NUM) 61 : 773 : res = ptypes[segment]; 62 [ + + ]: 326 : else if (segment == PT_GNU_EH_FRAME) 63 : : res = "GNU_EH_FRAME"; 64 [ + + ]: 220 : else if (segment == PT_GNU_STACK) 65 : : res = "GNU_STACK"; 66 [ + + ]: 114 : else if (segment == PT_GNU_RELRO) 67 : : res = "GNU_RELRO"; 68 [ - + ]: 23 : else if (segment == PT_GNU_PROPERTY) 69 : : res = "GNU_PROPERTY"; 70 [ # # ]: 0 : else if (segment == PT_SUNWBSS) 71 : : res = "SUNWBSS"; 72 [ # # ]: 0 : else if (segment == PT_SUNWSTACK) 73 : : res = "SUNWSTACK"; 74 : : else 75 : : { 76 [ # # ]: 0 : if (segment >= PT_LOOS && segment <= PT_HIOS) 77 : 0 : snprintf (buf, len, "LOOS+%d", segment - PT_LOOS); 78 [ # # ]: 0 : else if (segment >= PT_LOPROC && segment <= PT_HIPROC) 79 : 0 : snprintf (buf, len, "LOPROC+%d", segment - PT_LOPROC); 80 : : else 81 : 0 : snprintf (buf, len, "%s: %d", _("<unknown>"), segment); 82 : : 83 : : res = buf; 84 : : } 85 : : } 86 : : 87 : 1100 : return res; 88 : : }