aboutsummaryrefslogtreecommitdiff
path: root/src/client/linux/dump_writer_common/ucontext_reader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/linux/dump_writer_common/ucontext_reader.cc')
-rw-r--r--src/client/linux/dump_writer_common/ucontext_reader.cc32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/client/linux/dump_writer_common/ucontext_reader.cc b/src/client/linux/dump_writer_common/ucontext_reader.cc
index 97ed2a9f..76497683 100644
--- a/src/client/linux/dump_writer_common/ucontext_reader.cc
+++ b/src/client/linux/dump_writer_common/ucontext_reader.cc
@@ -26,6 +26,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#ifdef HAVE_CONFIG_H
+#include <config.h> // Must come first
+#endif
+
#include "client/linux/dump_writer_common/ucontext_reader.h"
#include "common/linux/linux_libc_support.h"
@@ -306,21 +310,19 @@ void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc) {
out->t5 = uc->uc_mcontext.__gregs[30];
out->t6 = uc->uc_mcontext.__gregs[31];
-# if __riscv_flen == 32
- for(int i = 0; i < MD_FLOATINGSAVEAREA_RISCV_FPR_COUNT; i++)
- out->float_save.regs[i] = uc->uc_mcontext.__fpregs.__f.__f[i];
- out->float_save.fpcsr = uc->uc_mcontext.__fpregs.__f.__fcsr;
-# elif __riscv_flen == 64
- for(int i = 0; i < MD_FLOATINGSAVEAREA_RISCV_FPR_COUNT; i++)
- out->float_save.regs[i] = uc->uc_mcontext.__fpregs.__d.__f[i];
- out->float_save.fpcsr = uc->uc_mcontext.__fpregs.__d.__fcsr;
-# elif __riscv_flen == 128
- for(int i = 0; i < MD_FLOATINGSAVEAREA_RISCV_FPR_COUNT; i++) {
- out->float_save.regs[i].high = uc->uc_mcontext.__fpregs.__q.__f[2*i];
- out->float_save.regs[i].low = uc->uc_mcontext.__fpregs.__q.__f[2*i+1];
- }
- out->float_save.fpcsr = uc->uc_mcontext.__fpregs.__q.__fcsr;
-# endif
+ // Breakpad only supports RISCV32 with 32 bit floating point.
+ // Breakpad only supports RISCV64 with 64 bit floating point.
+#if __riscv_xlen == 32
+ for (int i = 0; i < MD_CONTEXT_RISCV_FPR_COUNT; i++)
+ out->fpregs[i] = uc->uc_mcontext.__fpregs.__f.__f[i];
+ out->fcsr = uc->uc_mcontext.__fpregs.__f.__fcsr;
+#elif __riscv_xlen == 64
+ for (int i = 0; i < MD_CONTEXT_RISCV_FPR_COUNT; i++)
+ out->fpregs[i] = uc->uc_mcontext.__fpregs.__d.__f[i];
+ out->fcsr = uc->uc_mcontext.__fpregs.__d.__fcsr;
+#else
+#error "Unexpected __riscv_xlen"
+#endif
}
#endif