1260684Skaiw/*- 2260684Skaiw * Copyright (c) 2009 Kai Wang 3260684Skaiw * All rights reserved. 4260684Skaiw * 5260684Skaiw * Redistribution and use in source and binary forms, with or without 6260684Skaiw * modification, are permitted provided that the following conditions 7260684Skaiw * are met: 8260684Skaiw * 1. Redistributions of source code must retain the above copyright 9260684Skaiw * notice, this list of conditions and the following disclaimer. 10260684Skaiw * 2. Redistributions in binary form must reproduce the above copyright 11260684Skaiw * notice, this list of conditions and the following disclaimer in the 12260684Skaiw * documentation and/or other materials provided with the distribution. 13260684Skaiw * 14260684Skaiw * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15260684Skaiw * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16260684Skaiw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17260684Skaiw * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18260684Skaiw * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19260684Skaiw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20260684Skaiw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21260684Skaiw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22260684Skaiw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23260684Skaiw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24260684Skaiw * SUCH DAMAGE. 25260684Skaiw */ 26260684Skaiw 27260684Skaiw#include "_libdwarf.h" 28260684Skaiw 29260684SkaiwELFTC_VCSID("$Id: dwarf_pro_init.c 2074 2011-10-27 03:34:33Z jkoshy $"); 30260684Skaiw 31260684SkaiwDwarf_P_Debug 32260684Skaiwdwarf_producer_init(Dwarf_Unsigned flags, Dwarf_Callback_Func func, 33260684Skaiw Dwarf_Handler errhand, Dwarf_Ptr errarg, Dwarf_Error *error) 34260684Skaiw{ 35260684Skaiw Dwarf_P_Debug dbg; 36260684Skaiw int mode; 37260684Skaiw 38260684Skaiw if (flags & DW_DLC_READ || flags & DW_DLC_RDWR) { 39260684Skaiw DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT); 40260684Skaiw return (DW_DLV_BADADDR); 41260684Skaiw } 42260684Skaiw 43260684Skaiw if (flags & DW_DLC_WRITE) 44260684Skaiw mode = DW_DLC_WRITE; 45260684Skaiw else { 46260684Skaiw DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT); 47260684Skaiw return (DW_DLV_BADADDR); 48260684Skaiw } 49260684Skaiw 50260684Skaiw if (func == NULL) { 51260684Skaiw DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT); 52260684Skaiw return (DW_DLV_BADADDR); 53260684Skaiw } 54260684Skaiw 55260684Skaiw if (_dwarf_alloc(&dbg, DW_DLC_WRITE, error) != DW_DLE_NONE) 56260684Skaiw return (DW_DLV_BADADDR); 57260684Skaiw 58260684Skaiw dbg->dbg_mode = mode; 59260684Skaiw 60260684Skaiw if (_dwarf_init(dbg, flags, errhand, errarg, error) != DW_DLE_NONE) { 61260684Skaiw free(dbg); 62260684Skaiw return (DW_DLV_BADADDR); 63260684Skaiw } 64260684Skaiw 65260684Skaiw dbg->dbgp_func = func; 66260684Skaiw 67260684Skaiw return (dbg); 68260684Skaiw} 69260684Skaiw 70260684SkaiwDwarf_P_Debug 71260684Skaiwdwarf_producer_init_b(Dwarf_Unsigned flags, Dwarf_Callback_Func_b func, 72260684Skaiw Dwarf_Handler errhand, Dwarf_Ptr errarg, Dwarf_Error *error) 73260684Skaiw{ 74260684Skaiw Dwarf_P_Debug dbg; 75260684Skaiw int mode; 76260684Skaiw 77260684Skaiw if (flags & DW_DLC_READ || flags & DW_DLC_RDWR) { 78260684Skaiw DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT); 79260684Skaiw return (DW_DLV_BADADDR); 80260684Skaiw } 81260684Skaiw 82260684Skaiw if (flags & DW_DLC_WRITE) 83260684Skaiw mode = DW_DLC_WRITE; 84260684Skaiw else { 85260684Skaiw DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT); 86260684Skaiw return (DW_DLV_BADADDR); 87260684Skaiw } 88260684Skaiw 89260684Skaiw if (func == NULL) { 90260684Skaiw DWARF_SET_ERROR(NULL, error, DW_DLE_ARGUMENT); 91260684Skaiw return (DW_DLV_BADADDR); 92260684Skaiw } 93260684Skaiw 94260684Skaiw if (_dwarf_alloc(&dbg, DW_DLC_WRITE, error) != DW_DLE_NONE) 95260684Skaiw return (DW_DLV_BADADDR); 96260684Skaiw 97260684Skaiw dbg->dbg_mode = mode; 98260684Skaiw 99260684Skaiw if (_dwarf_init(dbg, flags, errhand, errarg, error) != DW_DLE_NONE) { 100260684Skaiw free(dbg); 101260684Skaiw return (DW_DLV_BADADDR); 102260684Skaiw } 103260684Skaiw 104260684Skaiw dbg->dbgp_func_b = func; 105260684Skaiw 106260684Skaiw return (dbg); 107260684Skaiw} 108260684Skaiw 109260684Skaiwint 110260684Skaiwdwarf_producer_set_isa(Dwarf_P_Debug dbg, enum Dwarf_ISA isa, 111260684Skaiw Dwarf_Error *error) 112260684Skaiw{ 113260684Skaiw 114260684Skaiw if (dbg == NULL || isa >= DW_ISA_MAX) { 115260684Skaiw DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT); 116260684Skaiw return (DW_DLV_ERROR); 117260684Skaiw } 118260684Skaiw 119260684Skaiw dbg->dbgp_isa = isa; 120260684Skaiw 121260684Skaiw return (DW_DLV_OK); 122260684Skaiw} 123