#ifndef _LIBNLM_H_
#define _LIBNLM_H_ 1
#ifdef ARCH_SIZE
# define NLM_ARCH_SIZE ARCH_SIZE
#endif
#include "nlm/common.h"
#include "nlm/internal.h"
#include "nlm/external.h"
struct nlm_relent
{
asection *section;
arelent reloc;
};
typedef struct
{
asymbol symbol;
bfd_size_type rcnt;
struct nlm_relent *relocs;
} nlmNAME(symbol_type);
extern bfd_boolean nlm_mkobject
PARAMS ((bfd *));
extern bfd_boolean nlm_set_arch_mach
PARAMS ((bfd *, enum bfd_architecture, unsigned long));
extern void nlmNAME(get_symbol_info)
PARAMS ((bfd *, asymbol *, symbol_info *));
extern long nlmNAME(get_symtab_upper_bound)
PARAMS ((bfd *));
extern long nlmNAME(get_symtab)
PARAMS ((bfd *, asymbol **));
extern asymbol *nlmNAME(make_empty_symbol)
PARAMS ((bfd *));
extern void nlmNAME(print_symbol)
PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
extern long nlmNAME(get_reloc_upper_bound)
PARAMS ((bfd *, asection *));
extern long nlmNAME(canonicalize_reloc)
PARAMS ((bfd *, asection *, arelent **, asymbol **));
extern const bfd_target *nlmNAME(object_p)
PARAMS ((bfd *));
extern bfd_boolean nlmNAME(set_arch_mach)
PARAMS ((bfd *, enum bfd_architecture, unsigned long));
extern bfd_boolean nlmNAME(set_section_contents)
PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type));
extern bfd_boolean nlmNAME(write_object_contents)
PARAMS ((bfd *));
struct nlm_obj_tdata
{
Nlm_Internal_Fixed_Header nlm_fixed_hdr[1];
Nlm_Internal_Variable_Header nlm_variable_hdr[1];
Nlm_Internal_Version_Header nlm_version_hdr[1];
Nlm_Internal_Copyright_Header nlm_copyright_hdr[1];
Nlm_Internal_Extended_Header nlm_extended_hdr[1];
Nlm_Internal_Custom_Header nlm_custom_hdr[1];
Nlm_Internal_Cygnus_Ext_Header nlm_cygnus_ext_hdr[1];
nlmNAME(symbol_type) *nlm_symbols;
bfd_vma nlm_text_low;
bfd_vma nlm_data_low;
arelent * nlm_reloc_fixups;
asection ** nlm_reloc_fixup_secs;
union
{
struct
{
bfd_vma gp;
bfd_vma lita_address;
bfd_size_type lita_size;
}
alpha_backend_data;
}
backend_data;
};
#define nlm_tdata(bfd) ((bfd) -> tdata.nlm_obj_data)
#define nlm_fixed_header(bfd) (nlm_tdata(bfd) -> nlm_fixed_hdr)
#define nlm_variable_header(bfd) (nlm_tdata(bfd) -> nlm_variable_hdr)
#define nlm_version_header(bfd) (nlm_tdata(bfd) -> nlm_version_hdr)
#define nlm_copyright_header(bfd) (nlm_tdata(bfd) -> nlm_copyright_hdr)
#define nlm_extended_header(bfd) (nlm_tdata(bfd) -> nlm_extended_hdr)
#define nlm_custom_header(bfd) (nlm_tdata(bfd) -> nlm_custom_hdr)
#define nlm_cygnus_ext_header(bfd) (nlm_tdata(bfd) -> nlm_cygnus_ext_hdr)
#define nlm_get_symbols(bfd) (nlm_tdata(bfd) -> nlm_symbols)
#define nlm_set_symbols(bfd, p) (nlm_tdata(bfd) -> nlm_symbols = (p))
#define nlm_set_text_low(bfd, i) (nlm_tdata(bfd) -> nlm_text_low = (i))
#define nlm_get_text_low(bfd) (nlm_tdata(bfd) -> nlm_text_low)
#define nlm_set_data_low(bfd, i) (nlm_tdata(bfd) -> nlm_data_low = (i))
#define nlm_get_data_low(bfd) (nlm_tdata(bfd) -> nlm_data_low)
#define nlm_relocation_fixups(bfd) (nlm_tdata(bfd) -> nlm_reloc_fixups)
#define nlm_relocation_fixup_secs(bfd) (nlm_tdata(bfd)->nlm_reloc_fixup_secs)
#define nlm_alpha_backend_data(bfd) \
(&nlm_tdata (bfd)->backend_data.alpha_backend_data)
struct reloc_and_sec
{
arelent *rel;
asection *sec;
};
struct nlm_backend_data
{
char signature[NLM_SIGNATURE_SIZE];
bfd_size_type fixed_header_size;
bfd_size_type optional_prefix_size;
enum bfd_architecture arch;
unsigned int mach;
bfd_boolean no_uninitialized_data;
bfd_boolean (*nlm_backend_object_p) PARAMS ((bfd *));
bfd_boolean (*nlm_write_prefix) PARAMS ((bfd *));
bfd_boolean (*nlm_read_reloc)
PARAMS ((bfd *, nlmNAME(symbol_type) *, asection **, arelent *));
bfd_boolean (*nlm_mangle_relocs)
PARAMS ((bfd *, asection *, PTR data, bfd_vma offset, bfd_size_type count));
bfd_boolean (*nlm_read_import) PARAMS ((bfd *, nlmNAME(symbol_type) *));
bfd_boolean (*nlm_write_import) PARAMS ((bfd *, asection *, arelent *));
bfd_boolean (*nlm_set_public_section)
PARAMS ((bfd *, nlmNAME(symbol_type) *));
bfd_vma (*nlm_get_public_offset) PARAMS ((bfd *, asymbol *));
void (*nlm_swap_fhdr_in)
PARAMS ((bfd *, PTR, Nlm_Internal_Fixed_Header *));
void (*nlm_swap_fhdr_out)
PARAMS ((bfd *, struct nlm_internal_fixed_header *, PTR));
bfd_boolean (*nlm_write_external)
PARAMS ((bfd *, bfd_size_type, asymbol *, struct reloc_and_sec *));
bfd_boolean (*nlm_write_export) PARAMS ((bfd *, asymbol *, bfd_vma));
};
#define nlm_backend(bfd) \
((struct nlm_backend_data *)((bfd) -> xvec -> backend_data))
#define nlm_signature(bfd) \
(nlm_backend(bfd) -> signature)
#define nlm_fixed_header_size(bfd) \
(nlm_backend(bfd) -> fixed_header_size)
#define nlm_optional_prefix_size(bfd) \
(nlm_backend(bfd) -> optional_prefix_size)
#define nlm_architecture(bfd) \
(nlm_backend(bfd) -> arch)
#define nlm_machine(bfd) \
(nlm_backend(bfd) -> mach)
#define nlm_no_uninitialized_data(bfd) \
(nlm_backend(bfd) -> no_uninitialized_data)
#define nlm_backend_object_p_func(bfd) \
(nlm_backend(bfd) -> nlm_backend_object_p)
#define nlm_write_prefix_func(bfd) \
(nlm_backend(bfd) -> nlm_write_prefix)
#define nlm_read_reloc_func(bfd) \
(nlm_backend(bfd) -> nlm_read_reloc)
#define nlm_mangle_relocs_func(bfd) \
(nlm_backend(bfd) -> nlm_mangle_relocs)
#define nlm_read_import_func(bfd) \
(nlm_backend(bfd) -> nlm_read_import)
#define nlm_write_import_func(bfd) \
(nlm_backend(bfd) -> nlm_write_import)
#define nlm_set_public_section_func(bfd) \
(nlm_backend(bfd) -> nlm_set_public_section)
#define nlm_get_public_offset_func(bfd) \
(nlm_backend(bfd) -> nlm_get_public_offset)
#define nlm_swap_fixed_header_in_func(bfd) \
(nlm_backend(bfd) -> nlm_swap_fhdr_in)
#define nlm_swap_fixed_header_out_func(bfd) \
(nlm_backend(bfd) -> nlm_swap_fhdr_out)
#define nlm_write_external_func(bfd) \
(nlm_backend(bfd) -> nlm_write_external)
#define nlm_write_export_func(bfd) \
(nlm_backend(bfd) -> nlm_write_export)
#define NLM_CODE_NAME ".text"
#define NLM_INITIALIZED_DATA_NAME ".data"
#define NLM_UNINITIALIZED_DATA_NAME ".bss"
#endif