Blame libasm/libasm.h

Packit Service 97d2fb
/* Interface for libasm.
Packit Service 97d2fb
   Copyright (C) 2002, 2005, 2008 Red Hat, Inc.
Packit Service 97d2fb
   This file is part of elfutils.
Packit Service 97d2fb
Packit Service 97d2fb
   This file is free software; you can redistribute it and/or modify
Packit Service 97d2fb
   it under the terms of either
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU Lesser General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 3 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 2 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or both in parallel, as here.
Packit Service 97d2fb
Packit Service 97d2fb
   elfutils is distributed in the hope that it will be useful, but
Packit Service 97d2fb
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 97d2fb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 97d2fb
   General Public License for more details.
Packit Service 97d2fb
Packit Service 97d2fb
   You should have received copies of the GNU General Public License and
Packit Service 97d2fb
   the GNU Lesser General Public License along with this program.  If
Packit Service 97d2fb
   not, see <http://www.gnu.org/licenses/>.  */
Packit Service 97d2fb
Packit Service 97d2fb
#ifndef _LIBASM_H
Packit Service 97d2fb
#define _LIBASM_H 1
Packit Service 97d2fb
Packit Service 97d2fb
#include <stdbool.h>
Packit Service 97d2fb
#include <stdint.h>
Packit Service 97d2fb
#include <gelf.h>
Packit Service 97d2fb
Packit Service 97d2fb
typedef struct ebl Ebl;
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Opaque type for the assembler context descriptor.  */
Packit Service 97d2fb
typedef struct AsmCtx AsmCtx_t;
Packit Service 97d2fb
Packit Service 97d2fb
/* Opaque type for a section.  */
Packit Service 97d2fb
typedef struct AsmScn AsmScn_t;
Packit Service 97d2fb
Packit Service 97d2fb
/* Opaque type for a section group.  */
Packit Service 97d2fb
typedef struct AsmScnGrp AsmScnGrp_t;
Packit Service 97d2fb
Packit Service 97d2fb
/* Opaque type for a symbol.  */
Packit Service 97d2fb
typedef struct AsmSym AsmSym_t;
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Opaque type for the disassembler context descriptor.  */
Packit Service 97d2fb
typedef struct DisasmCtx DisasmCtx_t;
Packit Service 97d2fb
Packit Service 97d2fb
/* Type used for callback functions to retrieve symbol name.  The
Packit Service 97d2fb
   symbol reference is in the section designated by the second parameter
Packit Service 97d2fb
   at an offset described by the first parameter.  The value is the
Packit Service 97d2fb
   third parameter.  */
Packit Service 97d2fb
typedef int (*DisasmGetSymCB_t) (GElf_Addr, Elf32_Word, GElf_Addr, char **,
Packit Service 97d2fb
				 size_t *, void *);
Packit Service 97d2fb
Packit Service 97d2fb
/* Output function callback.  */
Packit Service 97d2fb
typedef int (*DisasmOutputCB_t) (char *, size_t, void *);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef __cplusplus
Packit Service 97d2fb
extern "C" {
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
/* Create output file and return descriptor for assembler context.  If
Packit Service 97d2fb
   TEXTP is true the output is an assembler format text file.
Packit Service 97d2fb
   Otherwise an object file is created.  The MACHINE parameter
Packit Service 97d2fb
   corresponds to an EM_ constant from <elf.h>, KLASS specifies the
Packit Service 97d2fb
   class (32- or 64-bit), and DATA specifies the byte order (little or
Packit Service 97d2fb
   big endian).  */
Packit Service 97d2fb
extern AsmCtx_t *asm_begin (const char *fname, Ebl *ebl, bool textp);
Packit Service 97d2fb
Packit Service 97d2fb
/* Abort the operation on the assembler context and free all resources.  */
Packit Service 97d2fb
extern int asm_abort (AsmCtx_t *ctx);
Packit Service 97d2fb
Packit Service 97d2fb
/* Finalize output file and free all resources.  */
Packit Service 97d2fb
extern int asm_end (AsmCtx_t *ctx);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Return handle for the named section.  If it was not used before
Packit Service 97d2fb
   create it.  */
Packit Service 97d2fb
extern AsmScn_t *asm_newscn (AsmCtx_t *ctx, const char *scnname,
Packit Service 97d2fb
			     GElf_Word type, GElf_Xword flags);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Similar to 'asm_newscn', but make it part of section group GRP.  */
Packit Service 97d2fb
extern AsmScn_t *asm_newscn_ingrp (AsmCtx_t *ctx, const char *scnname,
Packit Service 97d2fb
				   GElf_Word type, GElf_Xword flags,
Packit Service 97d2fb
				   AsmScnGrp_t *grp);
Packit Service 97d2fb
Packit Service 97d2fb
/* Create new subsection NR in the given section.  */
Packit Service 97d2fb
extern AsmScn_t *asm_newsubscn (AsmScn_t *asmscn, unsigned int nr);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Return handle for new section group.  The signature symbol can be
Packit Service 97d2fb
   set later.  */
Packit Service 97d2fb
extern AsmScnGrp_t *asm_newscngrp (AsmCtx_t *ctx, const char *grpname,
Packit Service 97d2fb
				   AsmSym_t *signature, Elf32_Word flags);
Packit Service 97d2fb
Packit Service 97d2fb
/* Set or overwrite signature symbol for group.  */
Packit Service 97d2fb
extern int asm_scngrp_newsignature (AsmScnGrp_t *grp, AsmSym_t *signature);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Add zero terminated string STR of size LEN to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_addstrz (AsmScn_t *asmscn, const char *str, size_t len);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 8-bit signed integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_addint8 (AsmScn_t *asmscn, int8_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 8-bit unsigned integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_adduint8 (AsmScn_t *asmscn, uint8_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 16-bit signed integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_addint16 (AsmScn_t *asmscn, int16_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 16-bit unsigned integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_adduint16 (AsmScn_t *asmscn, uint16_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 32-bit signed integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_addint32 (AsmScn_t *asmscn, int32_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 32-bit unsigned integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_adduint32 (AsmScn_t *asmscn, uint32_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 64-bit signed integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_addint64 (AsmScn_t *asmscn, int64_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add 64-bit unsigned integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_adduint64 (AsmScn_t *asmscn, uint64_t num);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Add signed little endian base 128 integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_addsleb128 (AsmScn_t *asmscn, int32_t num);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add unsigned little endian base 128 integer NUM to (sub)section ASMSCN.  */
Packit Service 97d2fb
extern int asm_adduleb128 (AsmScn_t *asmscn, uint32_t num);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Define new symbol NAME for current position in given section ASMSCN.  */
Packit Service 97d2fb
extern AsmSym_t *asm_newsym (AsmScn_t *asmscn, const char *name,
Packit Service 97d2fb
			     GElf_Xword size, int type, int binding);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Define new common symbol NAME with given SIZE and alignment.  */
Packit Service 97d2fb
extern AsmSym_t *asm_newcomsym (AsmCtx_t *ctx, const char *name,
Packit Service 97d2fb
				GElf_Xword size, GElf_Addr align);
Packit Service 97d2fb
Packit Service 97d2fb
/* Define new common symbol NAME with given SIZE, VALUE, TYPE, and BINDING.  */
Packit Service 97d2fb
extern AsmSym_t *asm_newabssym (AsmCtx_t *ctx, const char *name,
Packit Service 97d2fb
				GElf_Xword size, GElf_Addr value,
Packit Service 97d2fb
				int type, int binding);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Align (sub)section offset according to VALUE.  */
Packit Service 97d2fb
extern int asm_align (AsmScn_t *asmscn, GElf_Word value);
Packit Service 97d2fb
Packit Service 97d2fb
/* Set the byte pattern used to fill gaps created by alignment.  */
Packit Service 97d2fb
extern int asm_fill (AsmScn_t *asmscn, void *bytes, size_t len);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Return ELF descriptor created for the output file of the given context.  */
Packit Service 97d2fb
extern Elf *asm_getelf (AsmCtx_t *ctx);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Return error code of last failing function call.  This value is kept
Packit Service 97d2fb
   separately for each thread.  */
Packit Service 97d2fb
extern int asm_errno (void);
Packit Service 97d2fb
Packit Service 97d2fb
/* Return error string for ERROR.  If ERROR is zero, return error string
Packit Service 97d2fb
   for most recent error or NULL is none occurred.  If ERROR is -1 the
Packit Service 97d2fb
   behaviour is similar to the last case except that not NULL but a legal
Packit Service 97d2fb
   string is returned.  */
Packit Service 97d2fb
extern const char *asm_errmsg (int __error);
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Create context descriptor for disassembler.  */
Packit Service 97d2fb
extern DisasmCtx_t *disasm_begin (Ebl *ebl, Elf *elf, DisasmGetSymCB_t symcb);
Packit Service 97d2fb
Packit Service 97d2fb
/* Release descriptor for disassembler.  */
Packit Service 97d2fb
extern int disasm_end (DisasmCtx_t *ctx);
Packit Service 97d2fb
Packit Service 97d2fb
/* Produce of disassembly output for given memory, store text in
Packit Service 97d2fb
   provided buffer.  */
Packit Service 97d2fb
extern int disasm_str (DisasmCtx_t *ctx, const uint8_t **startp,
Packit Service 97d2fb
		       const uint8_t *end, GElf_Addr addr, const char *fmt,
Packit Service 97d2fb
		       char **bufp, size_t len, void *symcbarg);
Packit Service 97d2fb
Packit Service 97d2fb
/* Produce disassembly output for given memory and output it using the
Packit Service 97d2fb
   given callback functions.  */
Packit Service 97d2fb
extern int disasm_cb (DisasmCtx_t *ctx, const uint8_t **startp,
Packit Service 97d2fb
		      const uint8_t *end, GElf_Addr addr, const char *fmt,
Packit Service 97d2fb
		      DisasmOutputCB_t outcb, void *outcbarg, void *symcbarg);
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef __cplusplus
Packit Service 97d2fb
}
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#endif	/* libasm.h */