1*f3e7f55eSRobert Mustacchi /* 2*f3e7f55eSRobert Mustacchi 3*f3e7f55eSRobert Mustacchi Copyright (C) 2000,2004 Silicon Graphics, Inc. All Rights Reserved. 4*f3e7f55eSRobert Mustacchi Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved. 5*f3e7f55eSRobert Mustacchi 6*f3e7f55eSRobert Mustacchi This program is free software; you can redistribute it and/or modify it 7*f3e7f55eSRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 8*f3e7f55eSRobert Mustacchi as published by the Free Software Foundation. 9*f3e7f55eSRobert Mustacchi 10*f3e7f55eSRobert Mustacchi This program is distributed in the hope that it would be useful, but 11*f3e7f55eSRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 12*f3e7f55eSRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13*f3e7f55eSRobert Mustacchi 14*f3e7f55eSRobert Mustacchi Further, this software is distributed without any warranty that it is 15*f3e7f55eSRobert Mustacchi free of the rightful claim of any third person regarding infringement 16*f3e7f55eSRobert Mustacchi or the like. Any license provided herein, whether implied or 17*f3e7f55eSRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 18*f3e7f55eSRobert Mustacchi any, provided herein do not apply to combinations of this program with 19*f3e7f55eSRobert Mustacchi other software, or any other product whatsoever. 20*f3e7f55eSRobert Mustacchi 21*f3e7f55eSRobert Mustacchi You should have received a copy of the GNU Lesser General Public 22*f3e7f55eSRobert Mustacchi License along with this program; if not, write the Free Software 23*f3e7f55eSRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 24*f3e7f55eSRobert Mustacchi USA. 25*f3e7f55eSRobert Mustacchi 26*f3e7f55eSRobert Mustacchi Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, 27*f3e7f55eSRobert Mustacchi Mountain View, CA 94043, or: 28*f3e7f55eSRobert Mustacchi 29*f3e7f55eSRobert Mustacchi http://www.sgi.com 30*f3e7f55eSRobert Mustacchi 31*f3e7f55eSRobert Mustacchi For further information regarding this notice, see: 32*f3e7f55eSRobert Mustacchi 33*f3e7f55eSRobert Mustacchi http://oss.sgi.com/projects/GenInfo/NoticeExplan 34*f3e7f55eSRobert Mustacchi 35*f3e7f55eSRobert Mustacchi */ 36*f3e7f55eSRobert Mustacchi 37*f3e7f55eSRobert Mustacchi 38*f3e7f55eSRobert Mustacchi 39*f3e7f55eSRobert Mustacchi #define VERSION 2 40*f3e7f55eSRobert Mustacchi #ifdef __i386 41*f3e7f55eSRobert Mustacchi #define MIN_INST_LENGTH 1 42*f3e7f55eSRobert Mustacchi #else 43*f3e7f55eSRobert Mustacchi #define MIN_INST_LENGTH 4 44*f3e7f55eSRobert Mustacchi #endif 45*f3e7f55eSRobert Mustacchi #define DEFAULT_IS_STMT false 46*f3e7f55eSRobert Mustacchi /* line base and range are temporarily defines. 47*f3e7f55eSRobert Mustacchi They need to be calculated later */ 48*f3e7f55eSRobert Mustacchi #define LINE_BASE -1 49*f3e7f55eSRobert Mustacchi #define LINE_RANGE 4 50*f3e7f55eSRobert Mustacchi 51*f3e7f55eSRobert Mustacchi #define OPCODE_BASE 10 52*f3e7f55eSRobert Mustacchi #define MAX_OPCODE 255 53*f3e7f55eSRobert Mustacchi 54*f3e7f55eSRobert Mustacchi 55*f3e7f55eSRobert Mustacchi /* 56*f3e7f55eSRobert Mustacchi This struct is used to hold entries in the include directories 57*f3e7f55eSRobert Mustacchi part of statement prologue. 58*f3e7f55eSRobert Mustacchi */ 59*f3e7f55eSRobert Mustacchi struct Dwarf_P_Inc_Dir_s { 60*f3e7f55eSRobert Mustacchi char *did_name; /* name of directory */ 61*f3e7f55eSRobert Mustacchi Dwarf_P_Inc_Dir did_next; 62*f3e7f55eSRobert Mustacchi }; 63*f3e7f55eSRobert Mustacchi 64*f3e7f55eSRobert Mustacchi 65*f3e7f55eSRobert Mustacchi /* 66*f3e7f55eSRobert Mustacchi This struct holds file entries for the statement prologue. 67*f3e7f55eSRobert Mustacchi Defined in pro_line.h 68*f3e7f55eSRobert Mustacchi */ 69*f3e7f55eSRobert Mustacchi struct Dwarf_P_F_Entry_s { 70*f3e7f55eSRobert Mustacchi char *dfe_name; 71*f3e7f55eSRobert Mustacchi char *dfe_args; /* has dir index, time of modification, 72*f3e7f55eSRobert Mustacchi length in bytes. Encodes as leb128 */ 73*f3e7f55eSRobert Mustacchi int dfe_nbytes; /* number of bytes in args */ 74*f3e7f55eSRobert Mustacchi Dwarf_P_F_Entry dfe_next; 75*f3e7f55eSRobert Mustacchi }; 76*f3e7f55eSRobert Mustacchi 77*f3e7f55eSRobert Mustacchi 78*f3e7f55eSRobert Mustacchi /* 79*f3e7f55eSRobert Mustacchi Struct holding line number information for each of the producer 80*f3e7f55eSRobert Mustacchi line entries 81*f3e7f55eSRobert Mustacchi */ 82*f3e7f55eSRobert Mustacchi struct Dwarf_P_Line_s { 83*f3e7f55eSRobert Mustacchi /* code address */ 84*f3e7f55eSRobert Mustacchi Dwarf_Addr dpl_address; 85*f3e7f55eSRobert Mustacchi 86*f3e7f55eSRobert Mustacchi /* file index, index into file entry */ 87*f3e7f55eSRobert Mustacchi Dwarf_Word dpl_file; 88*f3e7f55eSRobert Mustacchi 89*f3e7f55eSRobert Mustacchi /* line number */ 90*f3e7f55eSRobert Mustacchi Dwarf_Word dpl_line; 91*f3e7f55eSRobert Mustacchi 92*f3e7f55eSRobert Mustacchi /* column number */ 93*f3e7f55eSRobert Mustacchi Dwarf_Word dpl_column; 94*f3e7f55eSRobert Mustacchi 95*f3e7f55eSRobert Mustacchi /* whether its a beginning of a stmt */ 96*f3e7f55eSRobert Mustacchi Dwarf_Ubyte dpl_is_stmt; 97*f3e7f55eSRobert Mustacchi 98*f3e7f55eSRobert Mustacchi /* whether its a beginning of basic blk */ 99*f3e7f55eSRobert Mustacchi Dwarf_Ubyte dpl_basic_block; 100*f3e7f55eSRobert Mustacchi 101*f3e7f55eSRobert Mustacchi /* used to store opcodes set_address, and end_seq */ 102*f3e7f55eSRobert Mustacchi Dwarf_Ubyte dpl_opc; 103*f3e7f55eSRobert Mustacchi 104*f3e7f55eSRobert Mustacchi /* 105*f3e7f55eSRobert Mustacchi Used only for relocations. Has index of symbol relative to 106*f3e7f55eSRobert Mustacchi which relocation has to be done (the S part in S + A) */ 107*f3e7f55eSRobert Mustacchi Dwarf_Unsigned dpl_r_symidx; 108*f3e7f55eSRobert Mustacchi 109*f3e7f55eSRobert Mustacchi Dwarf_P_Line dpl_next; 110*f3e7f55eSRobert Mustacchi }; 111*f3e7f55eSRobert Mustacchi 112*f3e7f55eSRobert Mustacchi /* 113*f3e7f55eSRobert Mustacchi to initialize state machine registers, definition in 114*f3e7f55eSRobert Mustacchi pro_line.c 115*f3e7f55eSRobert Mustacchi */ 116*f3e7f55eSRobert Mustacchi void _dwarf_pro_reg_init(Dwarf_P_Line); 117