Files
lifting-bits-remill/lib/Arch/Name.cpp
T
Eric Kilmer 22b3d4b231 Fix GCC compilation (#672)
* Fix compilation with GCC

Fixes a few errors reported by GCC and not Clang

1. "non-trivial designated initializers not supported"

    - Fixed by adding array entries that were missing initializers and
      reordering

2. "Cannot bind packed field"

    - This fixes arrays missing initializers for some entries. This
      isn't the greatest fix because instead of using a reference, we
      use a pointer, which is basically the same thing, but it is
      checked less strictly. I think a real fix would be to remove the
      'packed' annotations.

* Add GCC to CI
2023-05-09 18:45:01 -04:00

114 lines
3.1 KiB
C++

/*
* Copyright (c) 2017 Trail of Bits, Inc.
*
* 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 "remill/Arch/Name.h"
#include <llvm/ADT/Triple.h>
namespace remill {
ArchName GetArchName(const llvm::Triple &triple) {
switch (triple.getArch()) {
case llvm::Triple::ArchType::x86: return kArchX86;
case llvm::Triple::ArchType::x86_64: return kArchAMD64;
case llvm::Triple::ArchType::aarch64: return kArchAArch64LittleEndian;
case llvm::Triple::ArchType::arm: return kArchAArch32LittleEndian;
case llvm::Triple::ArchType::thumb: return kArchThumb2LittleEndian;
case llvm::Triple::sparc: return kArchSparc32;
case llvm::Triple::sparcv9: return kArchSparc64;
case llvm::Triple::ppc: return kArchPPC;
default: return kArchInvalid;
}
}
ArchName GetArchName(std::string_view arch_name) {
if (arch_name == "x86") {
return kArchX86;
} else if (arch_name == "x86_avx") {
return kArchX86_AVX;
} else if (arch_name == "x86_avx512") {
return kArchX86_AVX512;
} else if (arch_name == "x86_sleigh") {
return kArchX86_SLEIGH;
} else if (arch_name == "amd64") {
return kArchAMD64;
} else if (arch_name == "amd64_avx") {
return kArchAMD64_AVX;
} else if (arch_name == "amd64_avx512") {
return kArchAMD64_AVX512;
} else if (arch_name == "amd64_sleigh") {
return kArchAMD64_SLEIGH;
} else if (arch_name == "aarch32") {
return kArchAArch32LittleEndian;
} else if (arch_name == "thumb2") {
return kArchThumb2LittleEndian;
} else if (arch_name == "aarch64") {
return kArchAArch64LittleEndian;
} else if (arch_name == "sparc32") {
return kArchSparc32;
} else if (arch_name == "sparc64") {
return kArchSparc64;
} else if (arch_name == "ppc") {
return kArchPPC;
} else if (arch_name == "aarch64_sleigh") {
return kArchAArch64LittleEndian_SLEIGH;
} else {
return kArchInvalid;
}
}
namespace {
static const std::string_view kArchNames[] = {
[kArchInvalid] = "invalid",
[kArchX86] = "x86",
[kArchX86_AVX] = "x86_avx",
[kArchX86_AVX512] = "x86_avx512",
[kArchX86_SLEIGH] = "x86_sleigh",
[kArchAMD64] = "amd64",
[kArchAMD64_AVX] = "amd64_avx",
[kArchAMD64_AVX512] = "amd64_avx512",
[kArchAMD64_SLEIGH] = "amd64_sleigh",
[kArchAArch32LittleEndian] = "aarch32",
[kArchAArch64LittleEndian] = "aarch64",
[kArchAArch64LittleEndian_SLEIGH] = "aarch64_sleigh",
[kArchSparc32] = "sparc32",
[kArchSparc64] = "sparc64",
[kArchThumb2LittleEndian] = "thumb2",
[kArchPPC] = "ppc",
};
} // namespace
std::string_view GetArchName(ArchName arch_name) {
return kArchNames[arch_name];
}
} // namespace remill