aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/arch
diff options
context:
space:
mode:
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>2007-02-28 09:40:36 -0700
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>2007-02-28 09:40:36 -0700
commit097dd8288c8e15607ba0eabdff69b8ea602fc262 (patch)
tree51446f9ee4b2b1943269569cd87b7812121a5c26 /extras/mini-os/arch
parent645be831a6023284417ecaeffaab3bd190d01809 (diff)
downloadxen-097dd8288c8e15607ba0eabdff69b8ea602fc262.tar.gz
xen-097dd8288c8e15607ba0eabdff69b8ea602fc262.tar.bz2
xen-097dd8288c8e15607ba0eabdff69b8ea602fc262.zip
[IA64][MINIOS] Make mini-os ia64 cross compile-able
Signed-off-by: Tristan Gingold <tgingold@free.fr>
Diffstat (limited to 'extras/mini-os/arch')
-rw-r--r--extras/mini-os/arch/ia64/Makefile15
-rw-r--r--extras/mini-os/arch/ia64/gen_off.c62
2 files changed, 22 insertions, 55 deletions
diff --git a/extras/mini-os/arch/ia64/Makefile b/extras/mini-os/arch/ia64/Makefile
index 6a7088564f..2c9a627ec4 100644
--- a/extras/mini-os/arch/ia64/Makefile
+++ b/extras/mini-os/arch/ia64/Makefile
@@ -2,6 +2,9 @@
# Special makefile for ia64.
#
+XEN_ROOT = ../../../..
+include $(XEN_ROOT)/Config.mk
+
include arch.mk
include ../../minios.mk
@@ -36,21 +39,21 @@ ARCH_OBJS += __udivdi3.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 --git a/extras/mini-os/arch/ia64/gen_off.c b/extras/mini-os/arch/ia64/gen_off.c
index b5d2f15c1e..2c67a8c352 100644
--- a/extras/mini-os/arch/ia64/gen_off.c
+++ b/extras/mini-os/arch/ia64/gen_off.c
@@ -25,19 +25,25 @@
* SUCH DAMAGE.
*
*/
-
-#include <stdio.h>
-#include <stddef.h>
-#include <string.h>
#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));
+
#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 +52,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 +137,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;
}