xref: /freebsd-src/contrib/llvm-project/llvm/lib/BinaryFormat/XCOFF.cpp (revision 5ffd83dbcc34f10e07f6d3e968ae6365869615f4)
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