1480093f4SDimitry Andric //===-- llvm/BinaryFormat/XCOFF.cpp - The XCOFF file format -----*- C++/-*-===// 2480093f4SDimitry Andric // 3480093f4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4480093f4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5480093f4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6480093f4SDimitry Andric // 7480093f4SDimitry Andric //===----------------------------------------------------------------------===// 8480093f4SDimitry Andric 9480093f4SDimitry Andric #include "llvm/BinaryFormat/XCOFF.h" 10*5ffd83dbSDimitry Andric #include "llvm/ADT/StringRef.h" 11480093f4SDimitry Andric 12480093f4SDimitry Andric using namespace llvm; 13480093f4SDimitry Andric 14*5ffd83dbSDimitry Andric #define SMC_CASE(A) \ 15*5ffd83dbSDimitry Andric case XCOFF::XMC_##A: \ 16*5ffd83dbSDimitry Andric return #A; 17480093f4SDimitry Andric StringRef XCOFF::getMappingClassString(XCOFF::StorageMappingClass SMC) { 18480093f4SDimitry Andric switch (SMC) { 19*5ffd83dbSDimitry Andric SMC_CASE(PR) 20*5ffd83dbSDimitry Andric SMC_CASE(RO) 21*5ffd83dbSDimitry Andric SMC_CASE(DB) 22*5ffd83dbSDimitry Andric SMC_CASE(GL) 23*5ffd83dbSDimitry Andric SMC_CASE(XO) 24*5ffd83dbSDimitry Andric SMC_CASE(SV) 25*5ffd83dbSDimitry Andric SMC_CASE(SV64) 26*5ffd83dbSDimitry Andric SMC_CASE(SV3264) 27*5ffd83dbSDimitry Andric SMC_CASE(TI) 28*5ffd83dbSDimitry Andric SMC_CASE(TB) 29*5ffd83dbSDimitry Andric SMC_CASE(RW) 30*5ffd83dbSDimitry Andric SMC_CASE(TC0) 31*5ffd83dbSDimitry Andric SMC_CASE(TC) 32*5ffd83dbSDimitry Andric SMC_CASE(TD) 33*5ffd83dbSDimitry Andric SMC_CASE(DS) 34*5ffd83dbSDimitry Andric SMC_CASE(UA) 35*5ffd83dbSDimitry Andric SMC_CASE(BS) 36*5ffd83dbSDimitry Andric SMC_CASE(UC) 37*5ffd83dbSDimitry Andric SMC_CASE(TL) 38*5ffd83dbSDimitry Andric SMC_CASE(UL) 39*5ffd83dbSDimitry Andric SMC_CASE(TE) 40*5ffd83dbSDimitry Andric #undef SMC_CASE 41480093f4SDimitry Andric } 42*5ffd83dbSDimitry Andric 43*5ffd83dbSDimitry Andric // TODO: need to add a test case for "Unknown" and other SMC. 44*5ffd83dbSDimitry Andric return "Unknown"; 45480093f4SDimitry Andric } 46*5ffd83dbSDimitry Andric 47*5ffd83dbSDimitry Andric #define RELOC_CASE(A) \ 48*5ffd83dbSDimitry Andric case XCOFF::A: \ 49*5ffd83dbSDimitry Andric return #A; 50*5ffd83dbSDimitry Andric StringRef XCOFF::getRelocationTypeString(XCOFF::RelocationType Type) { 51*5ffd83dbSDimitry Andric switch (Type) { 52*5ffd83dbSDimitry Andric RELOC_CASE(R_POS) 53*5ffd83dbSDimitry Andric RELOC_CASE(R_RL) 54*5ffd83dbSDimitry Andric RELOC_CASE(R_RLA) 55*5ffd83dbSDimitry Andric RELOC_CASE(R_NEG) 56*5ffd83dbSDimitry Andric RELOC_CASE(R_REL) 57*5ffd83dbSDimitry Andric RELOC_CASE(R_TOC) 58*5ffd83dbSDimitry Andric RELOC_CASE(R_TRL) 59*5ffd83dbSDimitry Andric RELOC_CASE(R_TRLA) 60*5ffd83dbSDimitry Andric RELOC_CASE(R_GL) 61*5ffd83dbSDimitry Andric RELOC_CASE(R_TCL) 62*5ffd83dbSDimitry Andric RELOC_CASE(R_REF) 63*5ffd83dbSDimitry Andric RELOC_CASE(R_BA) 64*5ffd83dbSDimitry Andric RELOC_CASE(R_BR) 65*5ffd83dbSDimitry Andric RELOC_CASE(R_RBA) 66*5ffd83dbSDimitry Andric RELOC_CASE(R_RBR) 67*5ffd83dbSDimitry Andric RELOC_CASE(R_TLS) 68*5ffd83dbSDimitry Andric RELOC_CASE(R_TLS_IE) 69*5ffd83dbSDimitry Andric RELOC_CASE(R_TLS_LD) 70*5ffd83dbSDimitry Andric RELOC_CASE(R_TLS_LE) 71*5ffd83dbSDimitry Andric RELOC_CASE(R_TLSM) 72*5ffd83dbSDimitry Andric RELOC_CASE(R_TLSML) 73*5ffd83dbSDimitry Andric RELOC_CASE(R_TOCU) 74*5ffd83dbSDimitry Andric RELOC_CASE(R_TOCL) 75*5ffd83dbSDimitry Andric } 76*5ffd83dbSDimitry Andric return "Unknown"; 77*5ffd83dbSDimitry Andric } 78*5ffd83dbSDimitry Andric #undef RELOC_CASE 79