current commit
260929.11 · deps: update lief to 1.0.0
/* Copyright 2017 - 2026 R. Thomas
 * Copyright 2017 - 2026 Quarkslab
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "LIEF/MachO/enums.hpp"
#include "LIEF/MachO/EnumToString.hpp"
#include "frozen.hpp"


namespace LIEF::MachO {

const char* to_string(MACHO_TYPES e) {
  CONST_MAP(MACHO_TYPES, const char*, 7)
  enumStrings{{MACHO_TYPES::MAGIC, "MAGIC"},
              {MACHO_TYPES::CIGAM, "CIGAM"},
              {MACHO_TYPES::MAGIC_64, "MAGIC_64"},
              {MACHO_TYPES::CIGAM_64, "CIGAM_64"},
              {MACHO_TYPES::MAGIC_FAT, "MAGIC_FAT"},
              {MACHO_TYPES::CIGAM_FAT, "CIGAM_FAT"},
              {MACHO_TYPES::NEURAL_MODEL, "NEURAL_MODEL"}};
  const auto it = enumStrings.find(e);
  return it == enumStrings.end() ? "Out of range" : it->second;
}

const char* to_string(X86_RELOCATION e) {
  CONST_MAP(X86_RELOCATION, const char*, 6)
  enumStrings{
      {X86_RELOCATION::GENERIC_RELOC_VANILLA, "VANILLA"},
      {X86_RELOCATION::GENERIC_RELOC_PAIR, "PAIR"},
      {X86_RELOCATION::GENERIC_RELOC_SECTDIFF, "SECTDIFF"},
      {X86_RELOCATION::GENERIC_RELOC_PB_LA_PTR, "PB_LA_PTR"},
      {X86_RELOCATION::GENERIC_RELOC_LOCAL_SECTDIFF, "LOCAL_SECTDIFF"},
      {X86_RELOCATION::GENERIC_RELOC_TLV, "TLV"},
  };
  const auto it = enumStrings.find(e);
  return it == enumStrings.end() ? "Out of range" : it->second;
}


const char* to_string(X86_64_RELOCATION e) {
  CONST_MAP(X86_64_RELOCATION, const char*, 10)
  enumStrings{
      {X86_64_RELOCATION::X86_64_RELOC_UNSIGNED, "UNSIGNED"},
      {X86_64_RELOCATION::X86_64_RELOC_SIGNED, "SIGNED"},
      {X86_64_RELOCATION::X86_64_RELOC_BRANCH, "BRANCH"},
      {X86_64_RELOCATION::X86_64_RELOC_GOT_LOAD, "GOT_LOAD"},
      {X86_64_RELOCATION::X86_64_RELOC_GOT, "GOT"},
      {X86_64_RELOCATION::X86_64_RELOC_SUBTRACTOR, "SUBTRACTOR"},
      {X86_64_RELOCATION::X86_64_RELOC_SIGNED_1, "SIGNED_1"},
      {X86_64_RELOCATION::X86_64_RELOC_SIGNED_2, "SIGNED_2"},
      {X86_64_RELOCATION::X86_64_RELOC_SIGNED_4, "SIGNED_4"},
      {X86_64_RELOCATION::X86_64_RELOC_TLV, "TLV"},
  };
  const auto it = enumStrings.find(e);
  return it == enumStrings.end() ? "Out of range" : it->second;
}


const char* to_string(PPC_RELOCATION e) {
  CONST_MAP(PPC_RELOCATION, const char*, 16)
  enumStrings{
      {PPC_RELOCATION::PPC_RELOC_VANILLA, "VANILLA"},
      {PPC_RELOCATION::PPC_RELOC_PAIR, "PAIR"},
      {PPC_RELOCATION::PPC_RELOC_BR14, "BR14"},
      {PPC_RELOCATION::PPC_RELOC_BR24, "BR24"},
      {PPC_RELOCATION::PPC_RELOC_HI16, "HI16"},
      {PPC_RELOCATION::PPC_RELOC_LO16, "LO16"},
      {PPC_RELOCATION::PPC_RELOC_HA16, "HA16"},
      {PPC_RELOCATION::PPC_RELOC_LO14, "LO14"},
      {PPC_RELOCATION::PPC_RELOC_SECTDIFF, "SECTDIFF"},
      {PPC_RELOCATION::PPC_RELOC_PB_LA_PTR, "PB_LA_PTR"},
      {PPC_RELOCATION::PPC_RELOC_HI16_SECTDIFF, "HI16_SECTDIFF"},
      {PPC_RELOCATION::PPC_RELOC_LO16_SECTDIFF, "LO16_SECTDIFF"},
      {PPC_RELOCATION::PPC_RELOC_HA16_SECTDIFF, "HA16_SECTDIFF"},
      {PPC_RELOCATION::PPC_RELOC_JBSR, "JBSR"},
      {PPC_RELOCATION::PPC_RELOC_LO14_SECTDIFF, "LO14_SECTDIFF"},
      {PPC_RELOCATION::PPC_RELOC_LOCAL_SECTDIFF, "LOCAL_SECTDIFF"},
  };
  const auto it = enumStrings.find(e);
  return it == enumStrings.end() ? "Out of range" : it->second;
}


const char* to_string(ARM_RELOCATION e) {
  CONST_MAP(ARM_RELOCATION, const char*, 10)
  enumStrings{
      {ARM_RELOCATION::ARM_RELOC_VANILLA, "VANILLA"},
      {ARM_RELOCATION::ARM_RELOC_PAIR, "PAIR"},
      {ARM_RELOCATION::ARM_RELOC_SECTDIFF, "SECTDIFF"},
      {ARM_RELOCATION::ARM_RELOC_LOCAL_SECTDIFF, "LOCAL_SECTDIFF"},
      {ARM_RELOCATION::ARM_RELOC_PB_LA_PTR, "PB_LA_PTR"},
      {ARM_RELOCATION::ARM_RELOC_BR24, "BR24"},
      {ARM_RELOCATION::ARM_THUMB_RELOC_BR22, "THUMB_RELOC_BR22"},
      {ARM_RELOCATION::ARM_THUMB_32BIT_BRANCH, "THUMB_32BIT_BRANCH"},
      {ARM_RELOCATION::ARM_RELOC_HALF, "HALF"},
      {ARM_RELOCATION::ARM_RELOC_HALF_SECTDIFF, "HALF_SECTDIFF"},
  };
  const auto it = enumStrings.find(e);
  return it == enumStrings.end() ? "Out of range" : it->second;
}


const char* to_string(ARM64_RELOCATION e) {
  CONST_MAP(ARM64_RELOCATION, const char*, 11)
  enumStrings{
      {ARM64_RELOCATION::ARM64_RELOC_UNSIGNED, "UNSIGNED"},
      {ARM64_RELOCATION::ARM64_RELOC_SUBTRACTOR, "SUBTRACTOR"},
      {ARM64_RELOCATION::ARM64_RELOC_BRANCH26, "BRANCH26"},
      {ARM64_RELOCATION::ARM64_RELOC_PAGE21, "PAGE21"},
      {ARM64_RELOCATION::ARM64_RELOC_PAGEOFF12, "PAGEOFF12"},
      {ARM64_RELOCATION::ARM64_RELOC_GOT_LOAD_PAGE21, "GOT_LOAD_PAGE21"},
      {ARM64_RELOCATION::ARM64_RELOC_GOT_LOAD_PAGEOFF12, "GOT_LOAD_PAGEOFF12"},
      {ARM64_RELOCATION::ARM64_RELOC_POINTER_TO_GOT, "POINTER_TO_GOT"},
      {ARM64_RELOCATION::ARM64_RELOC_TLVP_LOAD_PAGE21, "TLVP_LOAD_PAGE21"},
      {ARM64_RELOCATION::ARM64_RELOC_TLVP_LOAD_PAGEOFF12, "TLVP_LOAD_PAGEOFF12"},
      {ARM64_RELOCATION::ARM64_RELOC_ADDEND, "ADDEND"},
  };
  const auto it = enumStrings.find(e);
  return it == enumStrings.end() ? "Out of range" : it->second;
}

}