Hallo Samuel,
Am Montag, 15. Dezember 2008 schrieb Samuel Thibault:
> Hello,
>
> Samuel Thibault, le Tue 11 Nov 2008 12:32:32 +0100, a écrit :
> > Dietmar Hahn, le Tue 11 Nov 2008 09:47:18 +0100, a écrit :
> > > This doesn't work on ia64 because the special object mini-os_app.o is
> > > not linkable with the other objects.
> >
> > Ah, because it's empty, how odd :) Well I think it'd be better to just
> > drop it from the link line. Here is a complete patch that seeems to work
> > for me.
>
> Here is a reworked version without the gntmap.h move (since Dietmar will
> fix it another way), please apply.
Yes I did this already.
>
> Samuel
>
>
> Fix mini-os ia64 compilation
>
> - Avoid nested function to avoid a trampoline.
> - Do not link mini-os_app.o when it is empty.
>
> Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
>
> diff -ur xen-unstable.hg/extras/mini-os/kernel.c
> xen-unstable.hg-mine/extras/mini-os/kernel.c ---
> xen-unstable.hg/extras/mini-os/kernel.c 2008-11-11 12:05:03.000000000
> +0100
> +++ xen-unstable.hg-mine/extras/mini-os/kernel.c 2008-11-11
> 12:25:04.000000000 +0100 @@ -434,25 +434,25 @@
>
> static struct pcifront_dev *pci_dev;
>
> -static void pcifront_thread(void *p)
> +static void print_pcidev(unsigned int domain, unsigned int bus, unsigned
> int slot, unsigned int fun) {
> - void print(unsigned int domain, unsigned int bus, unsigned int slot,
> unsigned int fun) - {
> - unsigned int vendor, device, rev, class;
> + unsigned int vendor, device, rev, class;
>
> - pcifront_conf_read(pci_dev, domain, bus, slot, fun, 0x00, 2,
> &vendor); - pcifront_conf_read(pci_dev, domain, bus, slot, fun,
> 0x02, 2, &device); - pcifront_conf_read(pci_dev, domain, bus, slot,
> fun, 0x08, 1, &rev); - pcifront_conf_read(pci_dev, domain, bus,
> slot, fun, 0x0a, 2, &class); + pcifront_conf_read(pci_dev, domain, bus,
> slot, fun, 0x00, 2, &vendor); + pcifront_conf_read(pci_dev, domain, bus,
> slot, fun, 0x02, 2, &device); + pcifront_conf_read(pci_dev, domain, bus,
> slot, fun, 0x08, 1, &rev); + pcifront_conf_read(pci_dev, domain, bus,
> slot, fun, 0x0a, 2, &class);
>
> - printk("%04x:%02x:%02x.%02x %04x: %04x:%04x (rev %02x)\n", domain,
> bus, slot, fun, class, vendor, device, rev); - }
> + printk("%04x:%02x:%02x.%02x %04x: %04x:%04x (rev %02x)\n", domain,
> bus, slot, fun, class, vendor, device, rev); +}
>
> +static void pcifront_thread(void *p)
> +{
> pci_dev = init_pcifront(NULL);
> if (!pci_dev)
> return;
> printk("PCI devices:\n");
> - pcifront_scan(pci_dev, print);
> + pcifront_scan(pci_dev, print_pcidev);
> }
>
> static void fs_thread(void *p)
> diff -ur xen-unstable.hg/extras/mini-os/Makefile
> xen-unstable.hg-mine/extras/mini-os/Makefile ---
> xen-unstable.hg/extras/mini-os/Makefile 2008-11-11 12:05:03.000000000
> +0100
> +++ xen-unstable.hg-mine/extras/mini-os/Makefile 2008-11-11
> 12:16:04.000000000 +0100 @@ -93,8 +93,12 @@
> $(OBJ_DIR)/$(TARGET)_app.o: $(APP_OBJS) app.lds
> $(LD) -r -d $(LDFLAGS) -\( $^ -\) $(APP_LDLIBS) --undefined main -o $@
>
> -$(OBJ_DIR)/$(TARGET): links $(OBJS) $(OBJ_DIR)/$(TARGET)_app.o arch_lib
> - $(LD) -r $(LDFLAGS) $(HEAD_OBJ) $(OBJ_DIR)/$(TARGET)_app.o $(OBJS)
> $(LDARCHLIB) $(LDLIBS) -o $@.o +ifneq ($(APP_OBJS),)
> +APP_O=$(OBJ_DIR)/$(TARGET)_app.o
> +endif
> +
> +$(OBJ_DIR)/$(TARGET): links $(OBJS) $(APP_O) arch_lib
> + $(LD) -r $(LDFLAGS) $(HEAD_OBJ) $(APP_O) $(OBJS) $(LDARCHLIB) $(LDLIBS)
> -o $@.o $(OBJCOPY) -w -G $(GLOBAL_PREFIX)* -G _start $@.o $@.o
> $(LD) $(LDFLAGS) $(LDFLAGS_FINAL) $@.o $(EXTRA_OBJS) -o $@
> gzip -f -9 -c $@ >$@.gz
The patch works fine for me, mini-os on ia64 compiles now fine again.
Please send it to xen-devel@xxxxxxxxxxxxxxxxxxx for checkin because it's all
common code.
Thanks.
Dietmar.
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|