xref: /titanic_44/usr/src/tools/ctf/dwarf/common/pro_line.c (revision 07dc1947c362e187fb955d283b692f8769dd5def)
149d3bc91SRichard Lowe /*
249d3bc91SRichard Lowe 
3*07dc1947SRichard Lowe   Copyright (C) 2000,2004 Silicon Graphics, Inc.  All Rights Reserved.
449d3bc91SRichard Lowe 
549d3bc91SRichard Lowe   This program is free software; you can redistribute it and/or modify it
649d3bc91SRichard Lowe   under the terms of version 2.1 of the GNU Lesser General Public License
749d3bc91SRichard Lowe   as published by the Free Software Foundation.
849d3bc91SRichard Lowe 
949d3bc91SRichard Lowe   This program is distributed in the hope that it would be useful, but
1049d3bc91SRichard Lowe   WITHOUT ANY WARRANTY; without even the implied warranty of
1149d3bc91SRichard Lowe   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1249d3bc91SRichard Lowe 
1349d3bc91SRichard Lowe   Further, this software is distributed without any warranty that it is
1449d3bc91SRichard Lowe   free of the rightful claim of any third person regarding infringement
1549d3bc91SRichard Lowe   or the like.  Any license provided herein, whether implied or
1649d3bc91SRichard Lowe   otherwise, applies only to this software file.  Patent licenses, if
1749d3bc91SRichard Lowe   any, provided herein do not apply to combinations of this program with
1849d3bc91SRichard Lowe   other software, or any other product whatsoever.
1949d3bc91SRichard Lowe 
2049d3bc91SRichard Lowe   You should have received a copy of the GNU Lesser General Public
2149d3bc91SRichard Lowe   License along with this program; if not, write the Free Software
22*07dc1947SRichard Lowe   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
2349d3bc91SRichard Lowe   USA.
2449d3bc91SRichard Lowe 
25*07dc1947SRichard Lowe   Contact information:  Silicon Graphics, Inc., 1500 Crittenden Lane,
2649d3bc91SRichard Lowe   Mountain View, CA 94043, or:
2749d3bc91SRichard Lowe 
2849d3bc91SRichard Lowe   http://www.sgi.com
2949d3bc91SRichard Lowe 
3049d3bc91SRichard Lowe   For further information regarding this notice, see:
3149d3bc91SRichard Lowe 
3249d3bc91SRichard Lowe   http://oss.sgi.com/projects/GenInfo/NoticeExplan
3349d3bc91SRichard Lowe 
3449d3bc91SRichard Lowe */
3549d3bc91SRichard Lowe 
3649d3bc91SRichard Lowe 
3749d3bc91SRichard Lowe 
3849d3bc91SRichard Lowe #include "config.h"
3949d3bc91SRichard Lowe #include "libdwarfdefs.h"
4049d3bc91SRichard Lowe #include <stdio.h>
4149d3bc91SRichard Lowe #include <string.h>
4249d3bc91SRichard Lowe #ifdef HAVE_ELF_H
4349d3bc91SRichard Lowe #include <elf.h>
4449d3bc91SRichard Lowe #endif
4549d3bc91SRichard Lowe #include "pro_incl.h"
4649d3bc91SRichard Lowe #include "pro_line.h"
4749d3bc91SRichard Lowe 
4849d3bc91SRichard Lowe Dwarf_Unsigned _dwarf_pro_add_line_entry(Dwarf_P_Debug,
4949d3bc91SRichard Lowe                                          Dwarf_Unsigned file_index,
5049d3bc91SRichard Lowe                                          Dwarf_Addr code_address,
5149d3bc91SRichard Lowe                                          Dwarf_Unsigned symidx,
5249d3bc91SRichard Lowe                                          Dwarf_Unsigned line_no,
5349d3bc91SRichard Lowe                                          Dwarf_Signed col_no,
5449d3bc91SRichard Lowe                                          Dwarf_Bool is_stmt_begin,
5549d3bc91SRichard Lowe                                          Dwarf_Bool is_bb_begin,
5649d3bc91SRichard Lowe                                          Dwarf_Ubyte opc,
5749d3bc91SRichard Lowe                                          Dwarf_Error * error);
5849d3bc91SRichard Lowe 
5949d3bc91SRichard Lowe /*-------------------------------------------------------------------------
6049d3bc91SRichard Lowe         Add a entry to the line information section
6149d3bc91SRichard Lowe         file_index: index of file in file entries, obtained from
6249d3bc91SRichard Lowe         add_file_entry() call.
6349d3bc91SRichard Lowe 
6449d3bc91SRichard Lowe         This function actually calls _dwarf_pro_add_line_entry(), with
6549d3bc91SRichard Lowe         an extra parameter, the opcode. Done so that interface calls
6649d3bc91SRichard Lowe         dwarf_lne_set_address() and dwarf_lne_end_sequence() can use
6749d3bc91SRichard Lowe         this internal routine.
6849d3bc91SRichard Lowe ---------------------------------------------------------------------------*/
6949d3bc91SRichard Lowe 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)7049d3bc91SRichard Lowe dwarf_add_line_entry(Dwarf_P_Debug dbg,
7149d3bc91SRichard Lowe                      Dwarf_Unsigned file_index,
7249d3bc91SRichard Lowe                      Dwarf_Addr code_address,
7349d3bc91SRichard Lowe                      Dwarf_Unsigned line_no,
7449d3bc91SRichard Lowe                      Dwarf_Signed col_no,
7549d3bc91SRichard Lowe                      Dwarf_Bool is_stmt_begin,
7649d3bc91SRichard Lowe                      Dwarf_Bool is_bb_begin, Dwarf_Error * error)
7749d3bc91SRichard Lowe {
7849d3bc91SRichard Lowe     Dwarf_Unsigned retval;
7949d3bc91SRichard Lowe 
8049d3bc91SRichard Lowe     retval = _dwarf_pro_add_line_entry(dbg, file_index, code_address, 0,
8149d3bc91SRichard Lowe                                        line_no, col_no, is_stmt_begin,
8249d3bc91SRichard Lowe                                        is_bb_begin, 0, error);
8349d3bc91SRichard Lowe     return retval;
8449d3bc91SRichard Lowe }
8549d3bc91SRichard Lowe 
8649d3bc91SRichard Lowe /*------------------------------------------------------------------------
8749d3bc91SRichard Lowe         Ask to emit DW_LNE_set_address opcode explicitly. Used by be
8849d3bc91SRichard Lowe         to emit start of a new .text section, or to force a relocated
8949d3bc91SRichard Lowe         address into debug line information entry.
9049d3bc91SRichard Lowe -------------------------------------------------------------------------*/
9149d3bc91SRichard Lowe Dwarf_Unsigned
dwarf_lne_set_address(Dwarf_P_Debug dbg,Dwarf_Addr offs,Dwarf_Unsigned symidx,Dwarf_Error * error)9249d3bc91SRichard Lowe dwarf_lne_set_address(Dwarf_P_Debug dbg,
9349d3bc91SRichard Lowe                       Dwarf_Addr offs,
9449d3bc91SRichard Lowe                       Dwarf_Unsigned symidx, Dwarf_Error * error)
9549d3bc91SRichard Lowe {
9649d3bc91SRichard Lowe     Dwarf_Ubyte opc;
9749d3bc91SRichard Lowe     Dwarf_Unsigned retval;
9849d3bc91SRichard Lowe 
9949d3bc91SRichard Lowe     opc = DW_LNE_set_address;
10049d3bc91SRichard Lowe     retval =
10149d3bc91SRichard Lowe         _dwarf_pro_add_line_entry(dbg, 0, offs, symidx, 0, 0, 0, 0, opc,
10249d3bc91SRichard Lowe                                   error);
10349d3bc91SRichard Lowe     return retval;
10449d3bc91SRichard Lowe }
10549d3bc91SRichard Lowe 
10649d3bc91SRichard Lowe /*------------------------------------------------------------------------
10749d3bc91SRichard Lowe         Ask to emit end_seqence opcode. Used normally at the end of a
10849d3bc91SRichard Lowe         compilation unit. Can also be used in the middle if there
10949d3bc91SRichard Lowe         are gaps in the region described by the code address.
11049d3bc91SRichard Lowe -------------------------------------------------------------------------*/
11149d3bc91SRichard Lowe Dwarf_Unsigned
dwarf_lne_end_sequence(Dwarf_P_Debug dbg,Dwarf_Addr end_address,Dwarf_Error * error)11249d3bc91SRichard Lowe dwarf_lne_end_sequence(Dwarf_P_Debug dbg,
11349d3bc91SRichard Lowe                        Dwarf_Addr end_address, Dwarf_Error * error)
11449d3bc91SRichard Lowe {
11549d3bc91SRichard Lowe     Dwarf_Ubyte opc;
11649d3bc91SRichard Lowe     Dwarf_Unsigned retval;
11749d3bc91SRichard Lowe 
11849d3bc91SRichard Lowe     opc = DW_LNE_end_sequence;
11949d3bc91SRichard Lowe     retval =
12049d3bc91SRichard Lowe         _dwarf_pro_add_line_entry(dbg, 0, end_address, 0, 0, 0, 0, 0,
12149d3bc91SRichard Lowe                                   opc, error);
12249d3bc91SRichard Lowe     return retval;
12349d3bc91SRichard Lowe }
12449d3bc91SRichard Lowe 
12549d3bc91SRichard Lowe /*----------------------------------------------------------------------------
12649d3bc91SRichard Lowe         Add an entry in the internal list of lines mantained by producer.
12749d3bc91SRichard Lowe         Opc indicates if an opcode needs to be generated, rather than just
12849d3bc91SRichard Lowe         an entry in the matrix. During opcodes generation time, these
12949d3bc91SRichard Lowe         opcodes will be used.
13049d3bc91SRichard Lowe -----------------------------------------------------------------------------*/
13149d3bc91SRichard Lowe 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)13249d3bc91SRichard Lowe _dwarf_pro_add_line_entry(Dwarf_P_Debug dbg,
13349d3bc91SRichard Lowe                           Dwarf_Unsigned file_index,
13449d3bc91SRichard Lowe                           Dwarf_Addr code_address,
13549d3bc91SRichard Lowe                           Dwarf_Unsigned symidx,
13649d3bc91SRichard Lowe                           Dwarf_Unsigned line_no,
13749d3bc91SRichard Lowe                           Dwarf_Signed col_no,
13849d3bc91SRichard Lowe                           Dwarf_Bool is_stmt_begin,
13949d3bc91SRichard Lowe                           Dwarf_Bool is_bb_begin,
14049d3bc91SRichard Lowe                           Dwarf_Ubyte opc, Dwarf_Error * error)
14149d3bc91SRichard Lowe {
14249d3bc91SRichard Lowe     if (dbg->de_lines == NULL) {
14349d3bc91SRichard Lowe         dbg->de_lines = (Dwarf_P_Line)
14449d3bc91SRichard Lowe             _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Line_s));
14549d3bc91SRichard Lowe         if (dbg->de_lines == NULL) {
14649d3bc91SRichard Lowe             DWARF_P_DBG_ERROR(dbg, DW_DLE_LINE_ALLOC, DW_DLV_NOCOUNT);
14749d3bc91SRichard Lowe         }
14849d3bc91SRichard Lowe         dbg->de_last_line = dbg->de_lines;
14949d3bc91SRichard Lowe         _dwarf_pro_reg_init(dbg->de_lines);
15049d3bc91SRichard Lowe 
15149d3bc91SRichard Lowe     } else {
15249d3bc91SRichard Lowe         dbg->de_last_line->dpl_next = (Dwarf_P_Line)
15349d3bc91SRichard Lowe             _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Line_s));
15449d3bc91SRichard Lowe         if (dbg->de_last_line->dpl_next == NULL) {
15549d3bc91SRichard Lowe             DWARF_P_DBG_ERROR(dbg, DW_DLE_LINE_ALLOC, DW_DLV_NOCOUNT);
15649d3bc91SRichard Lowe         }
15749d3bc91SRichard Lowe         dbg->de_last_line = dbg->de_last_line->dpl_next;
15849d3bc91SRichard Lowe         _dwarf_pro_reg_init(dbg->de_last_line);
15949d3bc91SRichard Lowe     }
16049d3bc91SRichard Lowe     dbg->de_last_line->dpl_address = code_address;
16149d3bc91SRichard Lowe     dbg->de_last_line->dpl_file = (unsigned long) file_index;
16249d3bc91SRichard Lowe     dbg->de_last_line->dpl_line = (unsigned long) line_no;
16349d3bc91SRichard Lowe     dbg->de_last_line->dpl_column = (unsigned long) col_no;
16449d3bc91SRichard Lowe     dbg->de_last_line->dpl_is_stmt = is_stmt_begin;
16549d3bc91SRichard Lowe     dbg->de_last_line->dpl_basic_block = is_bb_begin;
16649d3bc91SRichard Lowe     dbg->de_last_line->dpl_opc = opc;
16749d3bc91SRichard Lowe     dbg->de_last_line->dpl_r_symidx = symidx;
16849d3bc91SRichard Lowe 
16949d3bc91SRichard Lowe     return (0);
17049d3bc91SRichard Lowe }
17149d3bc91SRichard Lowe 
17249d3bc91SRichard Lowe /*-----------------------------------------------------------------------
17349d3bc91SRichard Lowe         Add a directory declaration to the debug_line section. Stored
17449d3bc91SRichard Lowe         in linked list.
17549d3bc91SRichard Lowe ------------------------------------------------------------------------*/
17649d3bc91SRichard Lowe Dwarf_Unsigned
dwarf_add_directory_decl(Dwarf_P_Debug dbg,char * name,Dwarf_Error * error)17749d3bc91SRichard Lowe dwarf_add_directory_decl(Dwarf_P_Debug dbg,
17849d3bc91SRichard Lowe                          char *name, Dwarf_Error * error)
17949d3bc91SRichard Lowe {
18049d3bc91SRichard Lowe     if (dbg->de_inc_dirs == NULL) {
18149d3bc91SRichard Lowe         dbg->de_inc_dirs = (Dwarf_P_Inc_Dir)
18249d3bc91SRichard Lowe             _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Inc_Dir_s));
18349d3bc91SRichard Lowe         if (dbg->de_inc_dirs == NULL) {
18449d3bc91SRichard Lowe             DWARF_P_DBG_ERROR(dbg, DW_DLE_INCDIR_ALLOC, DW_DLV_NOCOUNT);
18549d3bc91SRichard Lowe         }
18649d3bc91SRichard Lowe         dbg->de_last_inc_dir = dbg->de_inc_dirs;
18749d3bc91SRichard Lowe         dbg->de_n_inc_dirs = 1;
18849d3bc91SRichard Lowe     } else {
18949d3bc91SRichard Lowe         dbg->de_last_inc_dir->did_next = (Dwarf_P_Inc_Dir)
19049d3bc91SRichard Lowe             _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Inc_Dir_s));
19149d3bc91SRichard Lowe         if (dbg->de_last_inc_dir->did_next == NULL) {
19249d3bc91SRichard Lowe             DWARF_P_DBG_ERROR(dbg, DW_DLE_INCDIR_ALLOC, DW_DLV_NOCOUNT);
19349d3bc91SRichard Lowe         }
19449d3bc91SRichard Lowe         dbg->de_last_inc_dir = dbg->de_last_inc_dir->did_next;
19549d3bc91SRichard Lowe         dbg->de_n_inc_dirs++;
19649d3bc91SRichard Lowe     }
19749d3bc91SRichard Lowe     dbg->de_last_inc_dir->did_name =
19849d3bc91SRichard Lowe         (char *) _dwarf_p_get_alloc(dbg, strlen(name) + 1);
19949d3bc91SRichard Lowe     if (dbg->de_last_inc_dir->did_name == NULL) {
20049d3bc91SRichard Lowe         DWARF_P_DBG_ERROR(dbg, DW_DLE_STRING_ALLOC, DW_DLV_NOCOUNT);
20149d3bc91SRichard Lowe     }
20249d3bc91SRichard Lowe     strcpy(dbg->de_last_inc_dir->did_name, name);
20349d3bc91SRichard Lowe     dbg->de_last_inc_dir->did_next = NULL;
20449d3bc91SRichard Lowe 
20549d3bc91SRichard Lowe     return dbg->de_n_inc_dirs;
20649d3bc91SRichard Lowe }
20749d3bc91SRichard Lowe 
20849d3bc91SRichard Lowe /*-----------------------------------------------------------------------
20949d3bc91SRichard Lowe         Add a file entry declaration to the debug_line section. Stored
21049d3bc91SRichard Lowe         in linked list. The data is immediately encodes as leb128
21149d3bc91SRichard Lowe         and stored in Dwarf_P_F_Entry_s struct.
21249d3bc91SRichard Lowe ------------------------------------------------------------------------*/
21349d3bc91SRichard Lowe 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)21449d3bc91SRichard Lowe dwarf_add_file_decl(Dwarf_P_Debug dbg,
21549d3bc91SRichard Lowe                     char *name,
21649d3bc91SRichard Lowe                     Dwarf_Unsigned dir_idx,
21749d3bc91SRichard Lowe                     Dwarf_Unsigned time_mod,
21849d3bc91SRichard Lowe                     Dwarf_Unsigned length, Dwarf_Error * error)
21949d3bc91SRichard Lowe {
22049d3bc91SRichard Lowe     Dwarf_P_F_Entry cur;
22149d3bc91SRichard Lowe     char *ptr;
22249d3bc91SRichard Lowe     int nbytes_idx, nbytes_time, nbytes_len;
22349d3bc91SRichard Lowe     char buffidx[ENCODE_SPACE_NEEDED];
22449d3bc91SRichard Lowe     char bufftime[ENCODE_SPACE_NEEDED];
22549d3bc91SRichard Lowe     char bufflen[ENCODE_SPACE_NEEDED];
22649d3bc91SRichard Lowe     int res;
22749d3bc91SRichard Lowe 
22849d3bc91SRichard Lowe     if (dbg->de_file_entries == NULL) {
22949d3bc91SRichard Lowe         dbg->de_file_entries = (Dwarf_P_F_Entry)
23049d3bc91SRichard Lowe             _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_F_Entry_s));
23149d3bc91SRichard Lowe         if (dbg->de_file_entries == NULL) {
23249d3bc91SRichard Lowe             DWARF_P_DBG_ERROR(dbg, DW_DLE_FILE_ENTRY_ALLOC,
23349d3bc91SRichard Lowe                               DW_DLV_NOCOUNT);
23449d3bc91SRichard Lowe         }
23549d3bc91SRichard Lowe         cur = dbg->de_file_entries;
23649d3bc91SRichard Lowe         dbg->de_last_file_entry = cur;
23749d3bc91SRichard Lowe         dbg->de_n_file_entries = 1;
23849d3bc91SRichard Lowe     } else {
23949d3bc91SRichard Lowe         cur = dbg->de_last_file_entry;
24049d3bc91SRichard Lowe         cur->dfe_next = (Dwarf_P_F_Entry)
24149d3bc91SRichard Lowe             _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_F_Entry_s));
24249d3bc91SRichard Lowe         if (cur->dfe_next == NULL) {
24349d3bc91SRichard Lowe             DWARF_P_DBG_ERROR(dbg, DW_DLE_FILE_ENTRY_ALLOC,
24449d3bc91SRichard Lowe                               DW_DLV_NOCOUNT);
24549d3bc91SRichard Lowe         }
24649d3bc91SRichard Lowe         cur = cur->dfe_next;
24749d3bc91SRichard Lowe         dbg->de_last_file_entry = cur;
24849d3bc91SRichard Lowe         dbg->de_n_file_entries++;
24949d3bc91SRichard Lowe     }
25049d3bc91SRichard Lowe     cur->dfe_name = (char *) _dwarf_p_get_alloc(dbg, strlen(name) + 1);
25149d3bc91SRichard Lowe     if (cur->dfe_name == NULL) {
25249d3bc91SRichard Lowe         DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT);
25349d3bc91SRichard Lowe     }
25449d3bc91SRichard Lowe     strcpy((char *) cur->dfe_name, name);
25549d3bc91SRichard Lowe     res = _dwarf_pro_encode_leb128_nm(dir_idx, &nbytes_idx,
25649d3bc91SRichard Lowe                                       buffidx, sizeof(buffidx));
25749d3bc91SRichard Lowe     if (res != DW_DLV_OK) {
25849d3bc91SRichard Lowe         DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT);
25949d3bc91SRichard Lowe     }
26049d3bc91SRichard Lowe     res = _dwarf_pro_encode_leb128_nm(time_mod, &nbytes_time,
26149d3bc91SRichard Lowe                                       bufftime, sizeof(bufftime));
26249d3bc91SRichard Lowe     if (res != DW_DLV_OK) {
26349d3bc91SRichard Lowe         DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT);
26449d3bc91SRichard Lowe     }
26549d3bc91SRichard Lowe     res = _dwarf_pro_encode_leb128_nm(length, &nbytes_len,
26649d3bc91SRichard Lowe                                       bufflen, sizeof(bufflen));
26749d3bc91SRichard Lowe     cur->dfe_args = (char *)
26849d3bc91SRichard Lowe         _dwarf_p_get_alloc(dbg, nbytes_idx + nbytes_time + nbytes_len);
26949d3bc91SRichard Lowe     if (cur->dfe_args == NULL) {
27049d3bc91SRichard Lowe         DWARF_P_DBG_ERROR(dbg, DW_DLE_ALLOC_FAIL, DW_DLV_NOCOUNT);
27149d3bc91SRichard Lowe     }
27249d3bc91SRichard Lowe     ptr = cur->dfe_args;
27349d3bc91SRichard Lowe     memcpy((void *) ptr, buffidx, nbytes_idx);
27449d3bc91SRichard Lowe     ptr += nbytes_idx;
27549d3bc91SRichard Lowe     memcpy((void *) ptr, bufftime, nbytes_time);
27649d3bc91SRichard Lowe     ptr += nbytes_time;
27749d3bc91SRichard Lowe     memcpy((void *) ptr, bufflen, nbytes_len);
27849d3bc91SRichard Lowe     ptr += nbytes_len;
27949d3bc91SRichard Lowe     cur->dfe_nbytes = nbytes_idx + nbytes_time + nbytes_len;
28049d3bc91SRichard Lowe     cur->dfe_next = NULL;
28149d3bc91SRichard Lowe 
28249d3bc91SRichard Lowe     return dbg->de_n_file_entries;
28349d3bc91SRichard Lowe }
28449d3bc91SRichard Lowe 
28549d3bc91SRichard Lowe 
28649d3bc91SRichard Lowe /*---------------------------------------------------------------------
28749d3bc91SRichard Lowe         Initialize a row of the matrix for line numbers, meaning
28849d3bc91SRichard Lowe         initialize the struct corresponding to it
28949d3bc91SRichard Lowe ----------------------------------------------------------------------*/
29049d3bc91SRichard Lowe void
_dwarf_pro_reg_init(Dwarf_P_Line cur_line)29149d3bc91SRichard Lowe _dwarf_pro_reg_init(Dwarf_P_Line cur_line)
29249d3bc91SRichard Lowe {
29349d3bc91SRichard Lowe     cur_line->dpl_address = 0;
29449d3bc91SRichard Lowe     cur_line->dpl_file = 1;
29549d3bc91SRichard Lowe     cur_line->dpl_line = 1;
29649d3bc91SRichard Lowe     cur_line->dpl_column = 0;
29749d3bc91SRichard Lowe     cur_line->dpl_is_stmt = DEFAULT_IS_STMT;
29849d3bc91SRichard Lowe     cur_line->dpl_basic_block = false;
29949d3bc91SRichard Lowe     cur_line->dpl_next = NULL;
30049d3bc91SRichard Lowe }
301