Revert "[Sparc] Add Sparc V8 support"
authorJorge Gorbe Moya <jgorbe@google.com>
Thu, 10 Jan 2019 01:08:31 +0000 (01:08 +0000)
committerJorge Gorbe Moya <jgorbe@google.com>
Thu, 10 Jan 2019 01:08:31 +0000 (01:08 +0000)
This reverts commit r350705.

llvm-svn: 350787

libunwind/include/__libunwind_config.h
libunwind/include/libunwind.h
libunwind/src/DwarfInstructions.hpp
libunwind/src/DwarfParser.hpp
libunwind/src/Registers.hpp
libunwind/src/UnwindCursor.hpp
libunwind/src/UnwindRegistersRestore.S
libunwind/src/UnwindRegistersSave.S
libunwind/src/assembly.h
libunwind/src/libunwind.cpp

index a8e30de..5450949 100644 (file)
@@ -23,7 +23,6 @@
 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM       287
 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K      32
 #define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS      65
-#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC     31
 
 #if defined(_LIBUNWIND_IS_NATIVE_ONLY)
 # if defined(__i386__)
 #    error "Unsupported MIPS ABI and/or environment"
 #  endif
 #  define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS
-# elif defined(__sparc__)
-  #define _LIBUNWIND_TARGET_SPARC 1
-  #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC
-  #define _LIBUNWIND_CONTEXT_SIZE 16
-  #define _LIBUNWIND_CURSOR_SIZE 23
 # else
 #  error "Unsupported architecture."
 # endif
 # define _LIBUNWIND_TARGET_OR1K 1
 # define _LIBUNWIND_TARGET_MIPS_O32 1
 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1
-# define _LIBUNWIND_TARGET_SPARC 1
 # define _LIBUNWIND_CONTEXT_SIZE 167
 # define _LIBUNWIND_CURSOR_SIZE 179
 # define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
index 29c4aeb..d824c13 100644 (file)
@@ -823,40 +823,4 @@ enum {
   UNW_MIPS_LO = 65,
 };
 
-// SPARC registers
-enum {
-  UNW_SPARC_G0 = 0,
-  UNW_SPARC_G1 = 1,
-  UNW_SPARC_G2 = 2,
-  UNW_SPARC_G3 = 3,
-  UNW_SPARC_G4 = 4,
-  UNW_SPARC_G5 = 5,
-  UNW_SPARC_G6 = 6,
-  UNW_SPARC_G7 = 7,
-  UNW_SPARC_O0 = 8,
-  UNW_SPARC_O1 = 9,
-  UNW_SPARC_O2 = 10,
-  UNW_SPARC_O3 = 11,
-  UNW_SPARC_O4 = 12,
-  UNW_SPARC_O5 = 13,
-  UNW_SPARC_O6 = 14,
-  UNW_SPARC_O7 = 15,
-  UNW_SPARC_L0 = 16,
-  UNW_SPARC_L1 = 17,
-  UNW_SPARC_L2 = 18,
-  UNW_SPARC_L3 = 19,
-  UNW_SPARC_L4 = 20,
-  UNW_SPARC_L5 = 21,
-  UNW_SPARC_L6 = 22,
-  UNW_SPARC_L7 = 23,
-  UNW_SPARC_I0 = 24,
-  UNW_SPARC_I1 = 25,
-  UNW_SPARC_I2 = 26,
-  UNW_SPARC_I3 = 27,
-  UNW_SPARC_I4 = 28,
-  UNW_SPARC_I5 = 29,
-  UNW_SPARC_I6 = 30,
-  UNW_SPARC_I7 = 31,
-};
-
 #endif
index 38b3660..1d35b22 100644 (file)
@@ -223,14 +223,6 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
       }
 #endif
 
-#if defined(_LIBUNWIND_TARGET_SPARC)
-      // Skip call site instruction and delay slot
-      returnAddress += 8;
-      // Skip unimp instruction if function returns a struct
-      if ((addressSpace.get32(returnAddress) & 0xC1C00000) == 0)
-        returnAddress += 4;
-#endif
-
       // Return address is address after call site instruction, so setting IP to
       // that does simualates a return.
       newRegisters.setIP(returnAddress);
index 08454c1..9de2898 100644 (file)
@@ -685,22 +685,6 @@ bool CFI_Parser<A>::parseInstructions(A &addressSpace, pint_t instructions,
       break;
 #endif
 
-#if defined(_LIBUNWIND_TARGET_SPARC)
-    case DW_CFA_GNU_window_save:
-      _LIBUNWIND_TRACE_DWARF("DW_CFA_GNU_window_save()\n");
-      for (reg = UNW_SPARC_O0; reg <= UNW_SPARC_O7; reg++) {
-        results->savedRegisters[reg].location = kRegisterInRegister;
-        results->savedRegisters[reg].value =
-            (reg - UNW_SPARC_O0) + UNW_SPARC_I0;
-      }
-
-      for (reg = UNW_SPARC_L0; reg <= UNW_SPARC_I7; reg++) {
-        results->savedRegisters[reg].location = kRegisterInCFA;
-        results->savedRegisters[reg].value = (reg - UNW_SPARC_L0) * 4;
-      }
-      break;
-#endif
-
     default:
       operand = opcode & 0x3F;
       switch (opcode & 0xC0) {
index 6114c4a..5ca715f 100644 (file)
@@ -3312,194 +3312,6 @@ inline const char *Registers_mips_newabi::getRegisterName(int regNum) {
   }
 }
 #endif // _LIBUNWIND_TARGET_MIPS_NEWABI
-
-#if defined(_LIBUNWIND_TARGET_SPARC)
-/// Registers_sparc holds the register state of a thread in a 32-bit Sparc
-/// process.
-class _LIBUNWIND_HIDDEN Registers_sparc {
-public:
-  Registers_sparc();
-  Registers_sparc(const void *registers);
-
-  bool        validRegister(int num) const;
-  uint32_t    getRegister(int num) const;
-  void        setRegister(int num, uint32_t value);
-  bool        validFloatRegister(int num) const;
-  double      getFloatRegister(int num) const;
-  void        setFloatRegister(int num, double value);
-  bool        validVectorRegister(int num) const;
-  v128        getVectorRegister(int num) const;
-  void        setVectorRegister(int num, v128 value);
-  static const char *getRegisterName(int num);
-  void        jumpto();
-  static int  lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC; }
-
-  uint64_t  getSP() const         { return _registers.__regs[UNW_SPARC_O6]; }
-  void      setSP(uint32_t value) { _registers.__regs[UNW_SPARC_O6] = value; }
-  uint64_t  getIP() const         { return _registers.__regs[UNW_SPARC_O7]; }
-  void      setIP(uint32_t value) { _registers.__regs[UNW_SPARC_O7] = value; }
-
-private:
-  struct sparc_thread_state_t {
-    unsigned int __regs[32];
-  };
-
-  sparc_thread_state_t _registers;
-};
-
-inline Registers_sparc::Registers_sparc(const void *registers) {
-  static_assert((check_fit<Registers_sparc, unw_context_t>::does_fit),
-                "sparc registers do not fit into unw_context_t");
-  memcpy(&_registers, static_cast<const uint8_t *>(registers),
-         sizeof(_registers));
-}
-
-inline Registers_sparc::Registers_sparc() {
-  memset(&_registers, 0, sizeof(_registers));
-}
-
-inline bool Registers_sparc::validRegister(int regNum) const {
-  if (regNum == UNW_REG_IP)
-    return true;
-  if (regNum == UNW_REG_SP)
-    return true;
-  if (regNum < 0)
-    return false;
-  if (regNum <= UNW_SPARC_I7)
-    return true;
-  return false;
-}
-
-inline uint32_t Registers_sparc::getRegister(int regNum) const {
-  if ((UNW_SPARC_G0 <= regNum) && (regNum <= UNW_SPARC_I7)) {
-    return _registers.__regs[regNum];
-  }
-
-  switch (regNum) {
-  case UNW_REG_IP:
-    return _registers.__regs[UNW_SPARC_O7];
-  case UNW_REG_SP:
-    return _registers.__regs[UNW_SPARC_O6];
-  }
-  _LIBUNWIND_ABORT("unsupported sparc register");
-}
-
-inline void Registers_sparc::setRegister(int regNum, uint32_t value) {
-  if ((UNW_SPARC_G0 <= regNum) && (regNum <= UNW_SPARC_I7)) {
-    _registers.__regs[regNum] = value;
-    return;
-  }
-
-  switch (regNum) {
-  case UNW_REG_IP:
-    _registers.__regs[UNW_SPARC_O7] = value;
-    return;
-  case UNW_REG_SP:
-    _registers.__regs[UNW_SPARC_O6] = value;
-    return;
-  }
-  _LIBUNWIND_ABORT("unsupported sparc register");
-}
-
-inline bool Registers_sparc::validFloatRegister(int regNum) const {
-  return false;
-}
-
-inline double Registers_sparc::getFloatRegister(int regNum) const {
-  _LIBUNWIND_ABORT("no Sparc float registers");
-}
-
-inline void Registers_sparc::setFloatRegister(int regNum, double value) {
-  _LIBUNWIND_ABORT("no Sparc float registers");
-}
-
-inline bool Registers_sparc::validVectorRegister(int regNum) const {
-  return false;
-}
-
-inline v128 Registers_sparc::getVectorRegister(int regNum) const {
-  _LIBUNWIND_ABORT("no Sparc vector registers");
-}
-
-inline void Registers_sparc::setVectorRegister(int regNum, v128 value) {
-  _LIBUNWIND_ABORT("no Sparc vector registers");
-}
-
-inline const char *Registers_sparc::getRegisterName(int regNum) {
-  switch (regNum) {
-  case UNW_REG_IP:
-    return "pc";
-  case UNW_SPARC_G0:
-    return "g0";
-  case UNW_SPARC_G1:
-    return "g1";
-  case UNW_SPARC_G2:
-    return "g2";
-  case UNW_SPARC_G3:
-    return "g3";
-  case UNW_SPARC_G4:
-    return "g4";
-  case UNW_SPARC_G5:
-    return "g5";
-  case UNW_SPARC_G6:
-    return "g6";
-  case UNW_SPARC_G7:
-    return "g7";
-  case UNW_SPARC_O0:
-    return "o0";
-  case UNW_SPARC_O1:
-    return "o1";
-  case UNW_SPARC_O2:
-    return "o2";
-  case UNW_SPARC_O3:
-    return "o3";
-  case UNW_SPARC_O4:
-    return "o4";
-  case UNW_SPARC_O5:
-    return "o5";
-  case UNW_REG_SP:
-  case UNW_SPARC_O6:
-    return "sp";
-  case UNW_SPARC_O7:
-    return "o7";
-  case UNW_SPARC_L0:
-    return "l0";
-  case UNW_SPARC_L1:
-    return "l1";
-  case UNW_SPARC_L2:
-    return "l2";
-  case UNW_SPARC_L3:
-    return "l3";
-  case UNW_SPARC_L4:
-    return "l4";
-  case UNW_SPARC_L5:
-    return "l5";
-  case UNW_SPARC_L6:
-    return "l6";
-  case UNW_SPARC_L7:
-    return "l7";
-  case UNW_SPARC_I0:
-    return "i0";
-  case UNW_SPARC_I1:
-    return "i1";
-  case UNW_SPARC_I2:
-    return "i2";
-  case UNW_SPARC_I3:
-    return "i3";
-  case UNW_SPARC_I4:
-    return "i4";
-  case UNW_SPARC_I5:
-    return "i5";
-  case UNW_SPARC_I6:
-    return "fp";
-  case UNW_SPARC_I7:
-    return "i7";
-  default:
-    return "unknown register";
-  }
-}
-#endif // _LIBUNWIND_TARGET_SPARC
-
 } // namespace libunwind
 
 #endif // __REGISTERS_HPP__
index 5b07921..a130806 100644 (file)
@@ -981,10 +981,6 @@ private:
   }
 #endif
 
-#if defined(_LIBUNWIND_TARGET_SPARC)
-  int stepWithCompactEncoding(Registers_sparc &) { return UNW_EINVAL; }
-#endif
-
   bool compactSaysUseDwarf(uint32_t *offset=NULL) const {
     R dummy;
     return compactSaysUseDwarf(dummy, offset);
@@ -1046,11 +1042,6 @@ private:
     return true;
   }
 #endif
-
-#if defined(_LIBUNWIND_TARGET_SPARC)
-  bool compactSaysUseDwarf(Registers_sparc &, uint32_t *) const { return true; }
-#endif
-
 #endif // defined(_LIBUNWIND_SUPPORT_COMPACT_UNWIND)
 
 #if defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
@@ -1112,11 +1103,6 @@ private:
     return 0;
   }
 #endif
-
-#if defined(_LIBUNWIND_TARGET_SPARC)
-  compact_unwind_encoding_t dwarfEncoding(Registers_sparc &) const { return 0; }
-#endif
-
 #endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
 
 #if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND)
index 389db67..b44c460 100644 (file)
@@ -1000,28 +1000,6 @@ DEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind21Registers_mips_newabi6jumptoEv)
   ld    $4, (8 * 4)($4)
   .set pop
 
-#elif defined(__sparc__)
-
-//
-// void libunwind::Registers_sparc_o32::jumpto()
-//
-// On entry:
-//  thread_state pointer is in o0
-//
-DEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind15Registers_sparc6jumptoEv)
-  ta 3
-  ldd [%o0 + 64],  %l0
-  ldd [%o0 + 72],  %l2
-  ldd [%o0 + 80],  %l4
-  ldd [%o0 + 88],  %l6
-  ldd [%o0 + 96],  %i0
-  ldd [%o0 + 104], %i2
-  ldd [%o0 + 112], %i4
-  ldd [%o0 + 120], %i6
-  ld  [%o0 + 60],  %o7
-  jmp %o7
-   nop
-
 #endif
 
 #endif /* !defined(__USING_SJLJ_EXCEPTIONS__) */
index 48ecb0a..0fb2c19 100644 (file)
@@ -942,37 +942,9 @@ DEFINE_LIBUNWIND_FUNCTION(unw_getcontext)
   l.sw     128(r3), r9
   # zero epcr
   l.sw     132(r3), r0
-
-#elif defined(__sparc__)
-
-#
-# extern int unw_getcontext(unw_context_t* thread_state)
-#
-# On entry:
-#  thread_state pointer is in o0
-#
-DEFINE_LIBUNWIND_FUNCTION(unw_getcontext)
-  ta 3
-  add %o7, 8, %o7
-  std %g0, [%o0 +   0]
-  std %g2, [%o0 +   8]
-  std %g4, [%o0 +  16]
-  std %g6, [%o0 +  24]
-  std %o0, [%o0 +  32]
-  std %o2, [%o0 +  40]
-  std %o4, [%o0 +  48]
-  std %o6, [%o0 +  56]
-  std %l0, [%o0 +  64]
-  std %l2, [%o0 +  72]
-  std %l4, [%o0 +  80]
-  std %l6, [%o0 +  88]
-  std %i0, [%o0 +  96]
-  std %i2, [%o0 + 104]
-  std %i4, [%o0 + 112]
-  std %i6, [%o0 + 120]
-  jmp %o7
-   clr %o0                   // return UNW_ESUCCESS
 #endif
+
 #endif /* !defined(__USING_SJLJ_EXCEPTIONS__) */
 
 NO_EXEC_STACK_DIRECTIVE
+
index 2df9302..cc22c79 100644 (file)
@@ -85,8 +85,6 @@
 
 #define NO_EXEC_STACK_DIRECTIVE
 
-#elif defined(__sparc__)
-
 #else
 
 #error Unsupported target
index f4d71a1..3bd8ef1 100644 (file)
@@ -67,8 +67,6 @@ _LIBUNWIND_EXPORT int unw_init_local(unw_cursor_t *cursor,
 # define REGISTER_KIND Registers_mips_newabi
 #elif defined(__mips__)
 # warning The MIPS architecture is not supported with this ABI and environment!
-#elif defined(__sparc__)
-# define REGISTER_KIND Registers_sparc
 #else
 # error Architecture not supported
 #endif