On 8/6/07, David Mosberger-Tang <[EMAIL PROTECTED]> wrote:
>
> Arun, maybe x86_64 should use offsets.h like on x86 and ia64?
>

Agreed. Patch attached.

 -Arun
Fix cross compilation of src/x86_64.
    
Signed-off-by: Arun Sharma <[EMAIL PROTECTED]>
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 <ucontext.h>
-#include <stdio.h>
-#include <stddef.h>
-
-#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
 
_______________________________________________
Libunwind-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/libunwind-devel

Reply via email to