mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 06:40:18 +00:00
Fix building for ARM with dwarf exception handling
The previous definition of _LIBUNWIND_HIGHEST_DWARF_REGISTER seems to be a copy of the ARM64 value (introduced in SVN r276128); since the code actually hasn't compiled properly for arm in dwarf mode before, this hasn't actually been used. Set it to the correct value based on the UNW_ARM_* enum values. The iwmmx control variables have to be made mutable, since they are touched from within getRegister (which previously wasn't const), and getRegister is used on a const Registers object in DwarfInstructions.hpp. Differential Revision: https://reviews.llvm.org/D39251 llvm-svn: 317192
This commit is contained in:
parent
965602ac82
commit
6a3ed9bfd0
@ -19,7 +19,7 @@
|
||||
#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 32
|
||||
#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC 112
|
||||
#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 95
|
||||
#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM 95
|
||||
#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM 287
|
||||
#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K 31
|
||||
|
||||
#if defined(_LIBUNWIND_IS_NATIVE_ONLY)
|
||||
@ -75,7 +75,7 @@
|
||||
# define _LIBUNWIND_TARGET_OR1K 1
|
||||
# define _LIBUNWIND_CONTEXT_SIZE 128
|
||||
# define _LIBUNWIND_CURSOR_SIZE 140
|
||||
# define _LIBUNWIND_HIGHEST_DWARF_REGISTER 119
|
||||
# define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287
|
||||
#endif // _LIBUNWIND_IS_NATIVE_ONLY
|
||||
|
||||
#endif // ____LIBUNWIND_CONFIG_H__
|
||||
|
@ -73,7 +73,7 @@ typedef struct unw_addr_space *unw_addr_space_t;
|
||||
|
||||
typedef int unw_regnum_t;
|
||||
typedef uintptr_t unw_word_t;
|
||||
#if defined(_LIBUNWIND_ARM_EHABI)
|
||||
#if defined(__arm__)
|
||||
typedef uint64_t unw_fpreg_t;
|
||||
#else
|
||||
typedef double unw_fpreg_t;
|
||||
|
@ -1386,7 +1386,7 @@ public:
|
||||
Registers_arm(const void *registers);
|
||||
|
||||
bool validRegister(int num) const;
|
||||
uint32_t getRegister(int num);
|
||||
uint32_t getRegister(int num) const;
|
||||
void setRegister(int num, uint32_t value);
|
||||
bool validFloatRegister(int num) const;
|
||||
unw_fpreg_t getFloatRegister(int num);
|
||||
@ -1399,6 +1399,7 @@ public:
|
||||
restoreSavedFloatRegisters();
|
||||
restoreCoreAndJumpTo();
|
||||
}
|
||||
static int lastDwarfRegNum() { return _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM; }
|
||||
|
||||
uint32_t getSP() const { return _registers.__sp; }
|
||||
void setSP(uint32_t value) { _registers.__sp = value; }
|
||||
@ -1472,11 +1473,11 @@ private:
|
||||
// Whether iWMMX data registers are saved.
|
||||
bool _saved_iwmmx;
|
||||
// Whether iWMMX control registers are saved.
|
||||
bool _saved_iwmmx_control;
|
||||
mutable bool _saved_iwmmx_control;
|
||||
// iWMMX registers
|
||||
unw_fpreg_t _iwmmx[16];
|
||||
// iWMMX control registers
|
||||
uint32_t _iwmmx_control[4];
|
||||
mutable uint32_t _iwmmx_control[4];
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -1533,7 +1534,7 @@ inline bool Registers_arm::validRegister(int regNum) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
inline uint32_t Registers_arm::getRegister(int regNum) {
|
||||
inline uint32_t Registers_arm::getRegister(int regNum) const {
|
||||
if (regNum == UNW_REG_SP || regNum == UNW_ARM_SP)
|
||||
return _registers.__sp;
|
||||
|
||||
|
@ -583,6 +583,12 @@ private:
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(_LIBUNWIND_TARGET_ARM)
|
||||
compact_unwind_encoding_t dwarfEncoding(Registers_arm &) const {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined (_LIBUNWIND_TARGET_OR1K)
|
||||
compact_unwind_encoding_t dwarfEncoding(Registers_or1k &) const {
|
||||
return 0;
|
||||
|
@ -55,7 +55,7 @@ _LIBUNWIND_EXPORT int unw_init_local(unw_cursor_t *cursor,
|
||||
# define REGISTER_KIND Registers_ppc
|
||||
#elif defined(__aarch64__)
|
||||
# define REGISTER_KIND Registers_arm64
|
||||
#elif defined(_LIBUNWIND_ARM_EHABI)
|
||||
#elif defined(__arm__)
|
||||
# define REGISTER_KIND Registers_arm
|
||||
#elif defined(__or1k__)
|
||||
# define REGISTER_KIND Registers_or1k
|
||||
|
Loading…
Reference in New Issue
Block a user