Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit eb780ed

Browse files
committed
Merge pull request #3072 from krytarowski/netbsd-support-35
Fix build on NetBSD: Support different versions of "struct reg"
2 parents 64744ed + 93a5c55 commit eb780ed

File tree

3 files changed

+39
-32
lines changed

3 files changed

+39
-32
lines changed

src/pal/src/config.h.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
#cmakedefine01 ERROR_FUNC_FOR_GLOB_HAS_FIXED_PARAMS
130130
#cmakedefine01 HAS_FTRUNCATE_LENGTH_ISSUE
131131
#cmakedefine01 UNWIND_CONTEXT_IS_UCONTEXT_T
132+
#cmakedefine BSD_REGS_STYLE(reg, RR, rr) @BSD_REGS_STYLE@
132133
#cmakedefine FREEBSD_LIBC "@FREEBSD_LIBC@"
133134

134135
#define CHECK_TRACE_SPECIFIERS 0

src/pal/src/configure.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
941941
set(PAL_PT_READ_D PT_READ_D)
942942
set(PAL_PT_WRITE_D PT_WRITE_D)
943943
set(HAS_FTRUNCATE_LENGTH_ISSUE 0)
944+
set(BSD_REGS_STYLE "((reg).r_##rr)")
944945

945946
if(EXISTS "/lib/libc.so.7")
946947
set(FREEBSD_LIBC "/lib/libc.so.7")
@@ -964,6 +965,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL NetBSD)
964965
set(PAL_PT_READ_D PT_READ_D)
965966
set(PAL_PT_WRITE_D PT_WRITE_D)
966967
set(HAS_FTRUNCATE_LENGTH_ISSUE 0)
968+
set(BSD_REGS_STYLE "((reg).regs[_REG_##RR])")
967969

968970
elseif(CMAKE_SYSTEM_NAME STREQUAL SunOS)
969971
if(NOT HAVE_LIBUNWIND_H)

src/pal/src/include/pal/context.h

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -334,43 +334,47 @@ typedef ucontext_t native_context_t;
334334

335335
#if HAVE_BSD_REGS_T
336336

337+
#ifndef BSD_REGS_STYLE
338+
#error "struct reg" has unrecognized format
339+
#endif
340+
337341
#ifdef BIT64
338342

339-
#define BSDREG_Rbx(reg) ((reg).r_rbx)
340-
#define BSDREG_Rcx(reg) ((reg).r_rcx)
341-
#define BSDREG_Rdx(reg) ((reg).r_rdx)
342-
#define BSDREG_Rsi(reg) ((reg).r_rsi)
343-
#define BSDREG_Rdi(reg) ((reg).r_rdi)
344-
#define BSDREG_Rbp(reg) ((reg).r_rbp)
345-
#define BSDREG_Rax(reg) ((reg).r_rax)
346-
#define BSDREG_Rip(reg) ((reg).r_rip)
347-
#define BSDREG_SegCs(reg) ((reg).r_cs)
348-
#define BSDREG_SegSs(reg) ((reg).r_ss)
349-
#define BSDREG_Rsp(reg) ((reg).r_rsp)
350-
#define BSDREG_R8(reg) ((reg).r_r8)
351-
#define BSDREG_R9(reg) ((reg).r_r9)
352-
#define BSDREG_R10(reg) ((reg).r_r10)
353-
#define BSDREG_R11(reg) ((reg).r_r11)
354-
#define BSDREG_R12(reg) ((reg).r_r12)
355-
#define BSDREG_R13(reg) ((reg).r_r13)
356-
#define BSDREG_R14(reg) ((reg).r_r14)
357-
#define BSDREG_R15(reg) ((reg).r_r15)
358-
#define BSDREG_EFlags(reg) ((reg).r_rflags)
343+
#define BSDREG_Rbx(reg) BSD_REGS_STYLE(reg,RBX,rbx)
344+
#define BSDREG_Rcx(reg) BSD_REGS_STYLE(reg,RCX,rcx)
345+
#define BSDREG_Rdx(reg) BSD_REGS_STYLE(reg,RDX,rdx)
346+
#define BSDREG_Rsi(reg) BSD_REGS_STYLE(reg,RSI,rsi)
347+
#define BSDREG_Rdi(reg) BSD_REGS_STYLE(reg,RDI,rdi)
348+
#define BSDREG_Rbp(reg) BSD_REGS_STYLE(reg,RBP,rbp)
349+
#define BSDREG_Rax(reg) BSD_REGS_STYLE(reg,RAX,rax)
350+
#define BSDREG_Rip(reg) BSD_REGS_STYLE(reg,RIP,rip)
351+
#define BSDREG_SegCs(reg) BSD_REGS_STYLE(reg,CS,cs)
352+
#define BSDREG_SegSs(reg) BSD_REGS_STYLE(reg,SS,ss)
353+
#define BSDREG_Rsp(reg) BSD_REGS_STYLE(reg,RSP,rsp)
354+
#define BSDREG_R8(reg) BSD_REGS_STYLE(reg,R8,r8)
355+
#define BSDREG_R9(reg) BSD_REGS_STYLE(reg,R9,r9)
356+
#define BSDREG_R10(reg) BSD_REGS_STYLE(reg,R10,r10)
357+
#define BSDREG_R11(reg) BSD_REGS_STYLE(reg,R11,r11)
358+
#define BSDREG_R12(reg) BSD_REGS_STYLE(reg,R12,r12)
359+
#define BSDREG_R13(reg) BSD_REGS_STYLE(reg,R13,r13)
360+
#define BSDREG_R14(reg) BSD_REGS_STYLE(reg,R14,r14)
361+
#define BSDREG_R15(reg) BSD_REGS_STYLE(reg,R15,r15)
362+
#define BSDREG_EFlags(reg) BSD_REGS_STYLE(reg,RFLAGS,rflags)
359363

360364
#else // BIT64
361365

362-
#define BSDREG_Ebx(reg) ((reg).r_ebx)
363-
#define BSDREG_Ecx(reg) ((reg).r_ecx)
364-
#define BSDREG_Edx(reg) ((reg).r_edx)
365-
#define BSDREG_Esi(reg) ((reg).r_esi)
366-
#define BSDREG_Edi(reg) ((reg).r_edi)
367-
#define BSDREG_Ebp(reg) ((reg).r_ebp)
368-
#define BSDREG_Eax(reg) ((reg).r_eax)
369-
#define BSDREG_Eip(reg) ((reg).r_eip)
370-
#define BSDREG_SegCs(reg) ((reg).r_cs)
371-
#define BSDREG_EFlags(reg) ((reg).r_eflags)
372-
#define BSDREG_Esp(reg) ((reg).r_esp)
373-
#define BSDREG_SegSs(reg) ((reg).r_ss)
366+
#define BSDREG_Ebx(reg) BSD_REGS_STYLE(reg,EBX,ebx)
367+
#define BSDREG_Ecx(reg) BSD_REGS_STYLE(reg,ECX,ecx)
368+
#define BSDREG_Edx(reg) BSD_REGS_STYLE(reg,EDX,edx)
369+
#define BSDREG_Esi(reg) BSD_REGS_STYLE(reg,ESI,esi)
370+
#define BSDREG_Edi(reg) BSD_REGS_STYLE(reg,EDI,edi)
371+
#define BSDREG_Ebp(reg) BSD_REGS_STYLE(reg,EDP,ebp)
372+
#define BSDREG_Eax(reg) BSD_REGS_STYLE(reg,EAX,eax)
373+
#define BSDREG_Eip(reg) BSD_REGS_STYLE(reg,EIP,eip)
374+
#define BSDREG_SegCs(reg) BSD_REGS_STYLE(reg,CS,cs)
375+
#define BSDREG_EFlags(reg) BSD_REGS_STYLE(reg,EFLAGS,eflags)
376+
#define BSDREG_Esp(reg) BSD_REGS_STYLE(reg,ESP,esp)
377+
#define BSDREG_SegSs(reg) BSD_REGS_STYLE(reg,SS,ss)
374378

375379
#endif // BIT64
376380

0 commit comments

Comments
 (0)