Fix cross compilation of src/x86_64. Signed-off-by: Arun Sharma diff --git a/src/Makefile.am b/src/Makefile.am index abe4b96..ac20d7b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -298,11 +298,6 @@ endif $(libunwind_setjmp_la_SOURCES_x86) else if ARCH_X86_64 - x86_64_gen_offsets_SOURCES = x86_64/gen-offsets.c - noinst_PROGRAMS = x86_64/gen-offsets - BUILT_SOURCES = _ucontext_i.h -_ucontext_i.h: x86_64/gen-offsets - x86_64/gen-offsets > $@ lib_LTLIBRARIES_arch = libunwind-x86_64.la libunwind_la_SOURCES = $(libunwind_la_SOURCES_x86_64) libunwind_x86_64_la_SOURCES = $(libunwind_x86_64_la_SOURCES_x86_64) diff --git a/src/x86_64/gen-offsets.c b/src/x86_64/gen-offsets.c deleted file mode 100644 index 72383b6..0000000 --- a/src/x86_64/gen-offsets.c +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include - -#define REG_OFFSET(reg) (offsetof(struct ucontext, uc_mcontext.gregs[REG_##reg])) - - -char *regs[] = { "RAX", - "RBX", - "RCX", - "RDX", - "RDI", - "RSI", - "RSP", - "RBP", - "R8", - "R9", - "R10", - "R11", - "R12", - "R13", - "R14", - "R15", - "RIP", - }; - -main() -{ - printf("#ifndef UCONTEXT_I_H\n#define UCONTEXT_I_H\n"); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[0], REG_OFFSET(RAX)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[1], REG_OFFSET(RBX)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[2], REG_OFFSET(RCX)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[3], REG_OFFSET(RDX)); - - printf("#define REG_OFFSET_%s\t%ld\n" , regs[4], REG_OFFSET(RDI)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[5], REG_OFFSET(RSI)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[6], REG_OFFSET(RSP)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[7], REG_OFFSET(RBP)); - - printf("#define REG_OFFSET_%s\t%ld\n" , regs[8], REG_OFFSET(R8)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[9], REG_OFFSET(R9)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[10], REG_OFFSET(R10)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[11], REG_OFFSET(R11)); - - printf("#define REG_OFFSET_%s\t%ld\n" , regs[12], REG_OFFSET(R12)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[13], REG_OFFSET(R13)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[14], REG_OFFSET(R14)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[15], REG_OFFSET(R15)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[15], REG_OFFSET(R15)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[15], REG_OFFSET(R15)); - printf("#define REG_OFFSET_%s\t%ld\n" , regs[16], REG_OFFSET(RIP)); - - printf("#define REG_OFFSET_FPREGS_PTR\t%ld\n" , offsetof(struct ucontext, uc_mcontext.fpregs)); - printf("#define FPREG_OFFSET_MXCR\t%ld\n" , offsetof(struct _libc_fpstate, mxcsr)); - printf("#endif /* UCONTEXT_I_H */\n"); - return 0; -} - - diff --git a/src/x86_64/offsets.h b/src/x86_64/offsets.h new file mode 100644 index 0000000..56ead69 --- /dev/null +++ b/src/x86_64/offsets.h @@ -0,0 +1,29 @@ +/* This used to be a generated file. But then it breaks cross compilation. + * So use the method used by other architectures. + */ +#ifndef OFFSETS_H +#define OFFSETS_H + +#define REG_OFFSET_RAX 144 +#define REG_OFFSET_RBX 128 +#define REG_OFFSET_RCX 152 +#define REG_OFFSET_RDX 136 +#define REG_OFFSET_RDI 104 +#define REG_OFFSET_RSI 112 +#define REG_OFFSET_RSP 160 +#define REG_OFFSET_RBP 120 +#define REG_OFFSET_R8 40 +#define REG_OFFSET_R9 48 +#define REG_OFFSET_R10 56 +#define REG_OFFSET_R11 64 +#define REG_OFFSET_R12 72 +#define REG_OFFSET_R13 80 +#define REG_OFFSET_R14 88 +#define REG_OFFSET_R15 96 +#define REG_OFFSET_R15 96 +#define REG_OFFSET_R15 96 +#define REG_OFFSET_RIP 168 +#define REG_OFFSET_FPREGS_PTR 224 +#define FPREG_OFFSET_MXCR 24 + +#endif /* OFFSETS_H */ diff --git a/src/x86_64/setcontext.S b/src/x86_64/setcontext.S index f5fd552..894b967 100644 --- a/src/x86_64/setcontext.S +++ b/src/x86_64/setcontext.S @@ -23,7 +23,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER L OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "_ucontext_i.h" +#include "offsets.h" .global _x86_64_setcontext