Blame libasm/libasm.h.libasm-ebl

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