diff options
Diffstat (limited to 'usr/src/tools/ctf/dwarf/common/pro_line.c')
-rw-r--r-- | usr/src/tools/ctf/dwarf/common/pro_line.c | 300 |
1 files changed, 0 insertions, 300 deletions
diff --git a/usr/src/tools/ctf/dwarf/common/pro_line.c b/usr/src/tools/ctf/dwarf/common/pro_line.c deleted file mode 100644 index 69d3e339f0..0000000000 --- a/usr/src/tools/ctf/dwarf/common/pro_line.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - - Copyright (C) 2000,2004 Silicon Graphics, Inc. All Rights Reserved. - - This program is free software; you can redistribute it and/or modify it - under the terms of version 2.1 of the GNU Lesser General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it would be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - Further, this software is distributed without any warranty that it is - free of the rightful claim of any third person regarding infringement - or the like. Any license provided herein, whether implied or - otherwise, applies only to this software file. Patent licenses, if - any, provided herein do not apply to combinations of this program with - other software, or any other product whatsoever. - - You should have received a copy of the GNU Lesser General Public - License along with this program; if not, write the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, - USA. - - Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, - Mountain View, CA 94043, or: - - http://www.sgi.com - - For further information regarding this notice, see: - - http://oss.sgi.com/projects/GenInfo/NoticeExplan - -*/ - - - -#include "config.h" -#include "libdwarfdefs.h" -#include <stdio.h> -#include <string.h> -#ifdef HAVE_ELF_H -#include <elf.h> -#endif -#include "pro_incl.h" -#include "pro_line.h" - -Dwarf_Unsigned _dwarf_pro_add_line_entry(Dwarf_P_Debug, - Dwarf_Unsigned file_index, - Dwarf_Addr code_address, - Dwarf_Unsigned symidx, - Dwarf_Unsigned line_no, - Dwarf_Signed col_no, - Dwarf_Bool is_stmt_begin, - Dwarf_Bool is_bb_begin, - Dwarf_Ubyte opc, - Dwarf_Error * error); - -/*------------------------------------------------------------------------- - Add a entry to the line information section - file_index: index of file in file entries, obtained from - add_file_entry() call. - - This function actually calls _dwarf_pro_add_line_entry(), with - an extra parameter, the opcode. Done so that interface calls - dwarf_lne_set_address() and dwarf_lne_end_sequence() can use - this internal routine. ----------------------------------------------------------------------------*/ -Dwarf_Unsigned -dwarf_add_line_entry(Dwarf_P_Debug dbg, - Dwarf_Unsigned file_index, - Dwarf_Addr code_address, - Dwarf_Unsigned line_no, - Dwarf_Signed col_no, - Dwarf_Bool is_stmt_begin, - Dwarf_Bool is_bb_begin, Dwarf_Error * error) -{ - Dwarf_Unsigned retval; - - retval = _dwarf_pro_add_line_entry(dbg, file_index, code_address, 0, - line_no, col_no, is_stmt_begin, - is_bb_begin, 0, error); - return retval; -} - -/*------------------------------------------------------------------------ - Ask to emit DW_LNE_set_address opcode explicitly. Used by be - to emit start of a new .text section, or to force a relocated - address into debug line information entry. --------------------------------------------------------------------------*/ -Dwarf_Unsigned -dwarf_lne_set_address(Dwarf_P_Debug dbg, - Dwarf_Addr offs, - Dwarf_Unsigned symidx, Dwarf_Error * error) -{ - Dwarf_Ubyte opc; - Dwarf_Unsigned retval; - - opc = DW_LNE_set_address; - retval = - _dwarf_pro_add_line_entry(dbg, 0, offs, symidx, 0, 0, 0, 0, opc, - error); - return retval; -} - -/*------------------------------------------------------------------------ - Ask to emit end_seqence opcode. Used normally at the end of a - compilation unit. Can also be used in the middle if there - are gaps in the region described by the code address. --------------------------------------------------------------------------*/ -Dwarf_Unsigned -dwarf_lne_end_sequence(Dwarf_P_Debug dbg, - Dwarf_Addr end_address, Dwarf_Error * error) -{ - Dwarf_Ubyte opc; - Dwarf_Unsigned retval; - - opc = DW_LNE_end_sequence; - retval = - _dwarf_pro_add_line_entry(dbg, 0, end_address, 0, 0, 0, 0, 0, - opc, error); - return retval; -} - -/*---------------------------------------------------------------------------- - Add an entry in the internal list of lines mantained by producer. - Opc indicates if an opcode needs to be generated, rather than just - an entry in the matrix. During opcodes generation time, these - opcodes will be used. ------------------------------------------------------------------------------*/ -Dwarf_Unsigned -_dwarf_pro_add_line_entry(Dwarf_P_Debug dbg, - Dwarf_Unsigned file_index, - Dwarf_Addr code_address, - Dwarf_Unsigned symidx, - Dwarf_Unsigned line_no, - Dwarf_Signed col_no, - Dwarf_Bool is_stmt_begin, - Dwarf_Bool is_bb_begin, - Dwarf_Ubyte opc, Dwarf_Error * error) -{ - if (dbg->de_lines == NULL) { - dbg->de_lines = (Dwarf_P_Line) - _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Line_s)); - if (dbg->de_lines == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_LINE_ALLOC, DW_DLV_NOCOUNT); - } - dbg->de_last_line = dbg->de_lines; - _dwarf_pro_reg_init(dbg->de_lines); - - } else { - dbg->de_last_line->dpl_next = (Dwarf_P_Line) - _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Line_s)); - if (dbg->de_last_line->dpl_next == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_LINE_ALLOC, DW_DLV_NOCOUNT); - } - dbg->de_last_line = dbg->de_last_line->dpl_next; - _dwarf_pro_reg_init(dbg->de_last_line); - } - dbg->de_last_line->dpl_address = code_address; - dbg->de_last_line->dpl_file = (unsigned long) file_index; - dbg->de_last_line->dpl_line = (unsigned long) line_no; - dbg->de_last_line->dpl_column = (unsigned long) col_no; - dbg->de_last_line->dpl_is_stmt = is_stmt_begin; - dbg->de_last_line->dpl_basic_block = is_bb_begin; - dbg->de_last_line->dpl_opc = opc; - dbg->de_last_line->dpl_r_symidx = symidx; - - return (0); -} - -/*----------------------------------------------------------------------- - Add a directory declaration to the debug_line section. Stored - in linked list. -------------------------------------------------------------------------*/ -Dwarf_Unsigned -dwarf_add_directory_decl(Dwarf_P_Debug dbg, - char *name, Dwarf_Error * error) -{ - if (dbg->de_inc_dirs == NULL) { - dbg->de_inc_dirs = (Dwarf_P_Inc_Dir) - _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Inc_Dir_s)); - if (dbg->de_inc_dirs == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_INCDIR_ALLOC, DW_DLV_NOCOUNT); - } - dbg->de_last_inc_dir = dbg->de_inc_dirs; - dbg->de_n_inc_dirs = 1; - } else { - dbg->de_last_inc_dir->did_next = (Dwarf_P_Inc_Dir) - _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Inc_Dir_s)); - if (dbg->de_last_inc_dir->did_next == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_INCDIR_ALLOC, DW_DLV_NOCOUNT); - } - dbg->de_last_inc_dir = dbg->de_last_inc_dir->did_next; - dbg->de_n_inc_dirs++; - } - dbg->de_last_inc_dir->did_name = - (char *) _dwarf_p_get_alloc(dbg, strlen(name) + 1); - if (dbg->de_last_inc_dir->did_name == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_STRING_ALLOC, DW_DLV_NOCOUNT); - } - strcpy(dbg->de_last_inc_dir->did_name, name); - dbg->de_last_inc_dir->did_next = NULL; - - return dbg->de_n_inc_dirs; -} - -/*----------------------------------------------------------------------- - Add a file entry declaration to the debug_line section. Stored - in linked list. The data is immediately encodes as leb128 - and stored in Dwarf_P_F_Entry_s struct. -------------------------------------------------------------------------*/ -Dwarf_Unsigned -dwarf_add_file_decl(Dwarf_P_Debug dbg, - char *name, - Dwarf_Unsigned dir_idx, - Dwarf_Unsigned time_mod, - Dwarf_Unsigned length, Dwarf_Error * error) -{ - Dwarf_P_F_Entry cur; - char *ptr; - int nbytes_idx, nbytes_time, nbytes_len; - char buffidx[ENCODE_SPACE_NEEDED]; - char bufftime[ENCODE_SPACE_NEEDED]; - char bufflen[ENCODE_SPACE_NEEDED]; - int res; - - if (dbg->de_file_entries == NULL) { - dbg->de_file_entries = (Dwarf_P_F_Entry) - _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_F_Entry_s)); - if (dbg->de_file_entries == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_FILE_ENTRY_ALLOC, - DW_DLV_NOCOUNT); - } - cur = dbg->de_file_entries; - dbg->de_last_file_entry = cur; - dbg->de_n_file_entries = 1; - } else { - cur = dbg->de_last_file_entry; - cur->dfe_next = (Dwarf_P_F_Entry) - _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_F_Entry_s)); - if (cur->dfe_next == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_FILE_ENTRY_ALLOC, - DW_DLV_NOCOUNT); - } - cur = cur->dfe_next; - dbg->de_last_file_entry = cur; - dbg->de_n_file_entries++; - } - cur->dfe_name = (char *) _dwarf_p_get_alloc(dbg, strlen(name) + 1); - if (cur->dfe_name == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT); - } - strcpy((char *) cur->dfe_name, name); - res = _dwarf_pro_encode_leb128_nm(dir_idx, &nbytes_idx, - buffidx, sizeof(buffidx)); - if (res != DW_DLV_OK) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT); - } - res = _dwarf_pro_encode_leb128_nm(time_mod, &nbytes_time, - bufftime, sizeof(bufftime)); - if (res != DW_DLV_OK) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT); - } - res = _dwarf_pro_encode_leb128_nm(length, &nbytes_len, - bufflen, sizeof(bufflen)); - cur->dfe_args = (char *) - _dwarf_p_get_alloc(dbg, nbytes_idx + nbytes_time + nbytes_len); - if (cur->dfe_args == NULL) { - DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT); - } - ptr = cur->dfe_args; - memcpy((void *) ptr, buffidx, nbytes_idx); - ptr += nbytes_idx; - memcpy((void *) ptr, bufftime, nbytes_time); - ptr += nbytes_time; - memcpy((void *) ptr, bufflen, nbytes_len); - ptr += nbytes_len; - cur->dfe_nbytes = nbytes_idx + nbytes_time + nbytes_len; - cur->dfe_next = NULL; - - return dbg->de_n_file_entries; -} - - -/*--------------------------------------------------------------------- - Initialize a row of the matrix for line numbers, meaning - initialize the struct corresponding to it -----------------------------------------------------------------------*/ -void -_dwarf_pro_reg_init(Dwarf_P_Line cur_line) -{ - cur_line->dpl_address = 0; - cur_line->dpl_file = 1; - cur_line->dpl_line = 1; - cur_line->dpl_column = 0; - cur_line->dpl_is_stmt = DEFAULT_IS_STMT; - cur_line->dpl_basic_block = false; - cur_line->dpl_next = NULL; -} |