diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/nlmswap.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/bfd/nlmswap.h b/bfd/nlmswap.h new file mode 100644 index 0000000..c898f35 --- /dev/null +++ b/bfd/nlmswap.h @@ -0,0 +1,150 @@ +/* NLM (NetWare Loadable Module) swapping routines for BFD. + Copyright (C) 1993 Free Software Foundation, Inc. + + Written by Fred Fish @ Cygnus Support, using ELF support as the + template. + +This file is part of BFD, the Binary File Descriptor library. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* Although this is a header file, it defines functions. It is + included by NLM backends to define swapping functions that vary + from one NLM to another. The backend code must arrange for + Nlm_External_xxxx to be defined appropriately, and can then include + this file to get the swapping routines. + + At the moment this is only needed for one structure, the fixed NLM + file header. */ + +/* Translate an NLM fixed length file header in external format into an NLM + file header in internal format. */ + +static void +DEFUN (nlm_swap_fixed_header_in, (abfd, realsrc, dst), + bfd * abfd AND + PTR realsrc AND + Nlm_Internal_Fixed_Header * dst) +{ + Nlm_External_Fixed_Header *src = (Nlm_External_Fixed_Header*)realsrc; + memcpy (dst -> signature, src -> signature, NLM_SIGNATURE_SIZE); + memcpy (dst -> moduleName, src -> moduleName, NLM_MODULE_NAME_SIZE); + dst -> version = + bfd_h_get_32 (abfd, (bfd_byte *) src -> version); + dst -> codeImageOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> codeImageOffset); + dst -> codeImageSize = + bfd_h_get_32 (abfd, (bfd_byte *) src -> codeImageSize); + dst -> dataImageOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> dataImageOffset); + dst -> dataImageSize = + bfd_h_get_32 (abfd, (bfd_byte *) src -> dataImageSize); + dst -> uninitializedDataSize = + bfd_h_get_32 (abfd, (bfd_byte *) src -> uninitializedDataSize); + dst -> customDataOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> customDataOffset); + dst -> customDataSize = + bfd_h_get_32 (abfd, (bfd_byte *) src -> customDataSize); + dst -> moduleDependencyOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> moduleDependencyOffset); + dst -> numberOfModuleDependencies = + bfd_h_get_32 (abfd, (bfd_byte *) src -> numberOfModuleDependencies); + dst -> relocationFixupOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> relocationFixupOffset); + dst -> numberOfRelocationFixups = + bfd_h_get_32 (abfd, (bfd_byte *) src -> numberOfRelocationFixups); + dst -> externalReferencesOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> externalReferencesOffset); + dst -> numberOfExternalReferences = + bfd_h_get_32 (abfd, (bfd_byte *) src -> numberOfExternalReferences); + dst -> publicsOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> publicsOffset); + dst -> numberOfPublics = + bfd_h_get_32 (abfd, (bfd_byte *) src -> numberOfPublics); + dst -> debugInfoOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> debugInfoOffset); + dst -> numberOfDebugRecords = + bfd_h_get_32 (abfd, (bfd_byte *) src -> numberOfDebugRecords); + dst -> codeStartOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> codeStartOffset); + dst -> exitProcedureOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> exitProcedureOffset); + dst -> checkUnloadProcedureOffset = + bfd_h_get_32 (abfd, (bfd_byte *) src -> checkUnloadProcedureOffset); + dst -> moduleType = + bfd_h_get_32 (abfd, (bfd_byte *) src -> moduleType); + dst -> flags = + bfd_h_get_32 (abfd, (bfd_byte *) src -> flags); +} + +/* Translate an NLM fixed length file header in internal format into + an NLM file header in external format. */ + +static void +DEFUN (nlm_swap_fixed_header_out, (abfd, src, realdst), + bfd * abfd AND + Nlm_Internal_Fixed_Header * src AND + PTR realdst) +{ + Nlm_External_Fixed_Header * dst = (Nlm_External_Fixed_Header*)realdst; + memcpy (dst -> signature, src -> signature, NLM_SIGNATURE_SIZE); + memcpy (dst -> moduleName, src -> moduleName, NLM_MODULE_NAME_SIZE); + bfd_h_put_32 (abfd, (bfd_vma) src -> version, + (bfd_byte *) dst -> version); + bfd_h_put_32 (abfd, (bfd_vma) src -> codeImageOffset, + (bfd_byte *) dst -> codeImageOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> codeImageSize, + (bfd_byte *) dst -> codeImageSize); + bfd_h_put_32 (abfd, (bfd_vma) src -> dataImageOffset, + (bfd_byte *) dst -> dataImageOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> dataImageSize, + (bfd_byte *) dst -> dataImageSize); + bfd_h_put_32 (abfd, (bfd_vma) src -> uninitializedDataSize, + (bfd_byte *) dst -> uninitializedDataSize); + bfd_h_put_32 (abfd, (bfd_vma) src -> customDataOffset, + (bfd_byte *) dst -> customDataOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> customDataSize, + (bfd_byte *) dst -> customDataSize); + bfd_h_put_32 (abfd, (bfd_vma) src -> moduleDependencyOffset, + (bfd_byte *) dst -> moduleDependencyOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> numberOfModuleDependencies, + (bfd_byte *) dst -> numberOfModuleDependencies); + bfd_h_put_32 (abfd, (bfd_vma) src -> relocationFixupOffset, + (bfd_byte *) dst -> relocationFixupOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> numberOfRelocationFixups, + (bfd_byte *) dst -> numberOfRelocationFixups); + bfd_h_put_32 (abfd, (bfd_vma) src -> externalReferencesOffset, + (bfd_byte *) dst -> externalReferencesOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> numberOfExternalReferences, + (bfd_byte *) dst -> numberOfExternalReferences); + bfd_h_put_32 (abfd, (bfd_vma) src -> publicsOffset, + (bfd_byte *) dst -> publicsOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> numberOfPublics, + (bfd_byte *) dst -> numberOfPublics); + bfd_h_put_32 (abfd, (bfd_vma) src -> debugInfoOffset, + (bfd_byte *) dst -> debugInfoOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> numberOfDebugRecords, + (bfd_byte *) dst -> numberOfDebugRecords); + bfd_h_put_32 (abfd, (bfd_vma) src -> codeStartOffset, + (bfd_byte *) dst -> codeStartOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> exitProcedureOffset, + (bfd_byte *) dst -> exitProcedureOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> checkUnloadProcedureOffset, + (bfd_byte *) dst -> checkUnloadProcedureOffset); + bfd_h_put_32 (abfd, (bfd_vma) src -> moduleType, + (bfd_byte *) dst -> moduleType); + bfd_h_put_32 (abfd, (bfd_vma) src -> flags, + (bfd_byte *) dst -> flags); +} |