# HG changeset patch # User Tristan Gingold # Date 1172350959 -3600 # Node ID daed7655377ffc6deb3c93122743e4d8d0e2c1d1 # Parent 707a696e840db1ddb81fede0fe6aa0910e9ed02f Makes mini-os/ia64 cross compilable. Signed-off-by: Tristan Gingold diff -r 707a696e840d -r daed7655377f extras/mini-os/arch/ia64/Makefile --- a/extras/mini-os/arch/ia64/Makefile Fri Feb 23 14:06:08 2007 -0700 +++ b/extras/mini-os/arch/ia64/Makefile Sat Feb 24 22:02:39 2007 +0100 @@ -1,6 +1,9 @@ # # Special makefile for ia64. # + +XEN_ROOT = ../../../.. +include $(XEN_ROOT)/Config.mk include arch.mk include ../../minios.mk @@ -36,21 +39,21 @@ ARCH_OBJS += __divdi3.o ARCH_OBJS += __divdi3.o GEN_OFF_SRC := gen_off.c -GEN_OFF_BIN := gen_off +GEN_OFF_ASM := gen_off.s GEN_OFF_H := $(ARCH_INC)/offsets.h all: $(ARCH_LIB) -$(GEN_OFF_BIN): $(GEN_OFF_SRC) - $(CC) -o $@ $(CPPFLAGS) $< +$(GEN_OFF_ASM): $(GEN_OFF_SRC) + $(CC) -S -o $@ $(CPPFLAGS) $< -$(GEN_OFF_H): $(GEN_OFF_BIN) - ./$(GEN_OFF_BIN) > $(GEN_OFF_H) +$(GEN_OFF_H): $(GEN_OFF_ASM) + sed -ne "/^->/ {s/->/#define /; p}" < $< > $@ $(ARCH_LIB): $(GEN_OFF_H) $(ARCH_OBJS) $(HEAD_ARCH_OBJ) $(AR) rv $(ARCH_LIB) $(ARCH_OBJS) clean: rm -f $(ARCH_LIB) $(ARCH_OBJS) $(HEAD_ARCH_OBJ) - rm -f $(GEN_OFF_BIN) + rm -f $(GEN_OFF_ASM) rm -f $(GEN_OFF_H) diff -r 707a696e840d -r daed7655377f extras/mini-os/arch/ia64/gen_off.c --- a/extras/mini-os/arch/ia64/gen_off.c Fri Feb 23 14:06:08 2007 -0700 +++ b/extras/mini-os/arch/ia64/gen_off.c Sat Feb 24 22:02:39 2007 +0100 @@ -25,19 +25,26 @@ * SUCH DAMAGE. * */ - -#include -#include -#include #include "types.h" #include "sched.h" #include "xen/xen.h" #include "xen/arch-ia64.h" +#define DEFINE(sym, val) \ + asm volatile("\n->" sym " %0 /* " #val " */": : "i" (val)) +#define DEFINE_STR2(sym, pfx, val) \ + asm volatile("\n->" sym " " pfx "%0" : : "i"(val)); + #define SZ(st,e) sizeof(((st *)0)->e) -#define OFF(st,e,d,o) print_define(fp, #d, offsetof(st, e) + o, SZ(st, e)) +#define OFF(st,e,d,o) \ + DEFINE(#d, offsetof(st, e) + o); \ + DEFINE(#d "_sz", SZ(st,e )); \ + DEFINE_STR2(#d "_ld", "ld", SZ(st, e)); \ + DEFINE_STR2(#d "_st", "st", SZ(st, e)); + +//print_define(fp, #d, offsetof(st, e) + o, SZ(st, e)) #define TFOFF(e,d) OFF(trap_frame_t, e, d, 0) -#define SIZE(st,d) fprintf(fp, "#define %-30s\t0x%016lx\n", #d, sizeof(st)) +#define SIZE(st,d) DEFINE(#d, sizeof(st)) #define SWOFF(e,d) OFF(struct thread, e, d, 0) @@ -46,51 +53,9 @@ /* mapped_regs_t from xen/arch-ia64.h */ #define MR_OFF(e, d) OFF(mapped_regs_t, e, d, XMAPPEDREGS_OFS) -void -print_define(FILE *fp, char *name, uint64_t val, int size) -{ - char ld_name[64]; - char st_name[64]; - char sz_name[64]; - - strcpy(ld_name, name); - strcat(ld_name, "_ld"); - strcpy(st_name, name); - strcat(st_name, "_st"); - strcpy(sz_name, name); - strcat(sz_name, "_sz"); - fprintf(fp, "#define %-30s\t0x%016lx\n", name, val); - fprintf(fp, "#define %-30s\t%u\n", sz_name, size); - switch (size) { - case 1: - fprintf(fp, "#define %-30s\tld1\n", ld_name); - fprintf(fp, "#define %-30s\tst1\n", st_name); - break; - case 2: - fprintf(fp, "#define %-30s\tld2\n", ld_name); - fprintf(fp, "#define %-30s\tst2\n", st_name); - break; - case 4: - fprintf(fp, "#define %-30s\tld4\n", ld_name); - fprintf(fp, "#define %-30s\tst4\n", st_name); - break; - case 8: - fprintf(fp, "#define %-30s\tld8\n", ld_name); - fprintf(fp, "#define %-30s\tst8\n", st_name); - break; - default: ; - } - return; -} - - int main(int argc, char ** argv) { - FILE *fp; - - fp = stdout; - TFOFF(cfm, TF_CFM); TFOFF(pfs, TF_PFS); TFOFF(bsp, TF_BSP); @@ -173,5 +138,5 @@ main(int argc, char ** argv) MR_OFF(bank1_regs[0], XSI_BANK1_R16_OFS); MR_OFF(precover_ifs, XSI_PRECOVER_IFS_OFS); - return(0); + return 0; }