[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: Pesky '#define current' in mini-os/sched.h
Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> writes: > Have you, like in the C example of stubdom/Makefile, propagated > TARGET_CPPFLAGS, TARGET_CFLAGS, and added a rule like is done for other > stubdom images in the "minios" paragraph of stubdom/Makefile? No, I had no idea how to start with this, I stole the various flags from the output of make c-stubdom and configured ncurses with those. > That's not how it's supposed to be done. See the Cross-zlib paragraph > for instance: the cross-zlib target not only configures & builds libz, > but also installs it, the prefix being properly set during configuration > into the cross-chain directory. Oh yes, I copied that, but forgot the install step, because the build itself was so tedious. > Ferenc Wagner, le Mon 27 Apr 2009 22:29:02 +0200, a .ANicrit : > >> I couldn't track how it's done for libpci & libz for qemu-stubdom >> (ioemu?) yet. > > It's all in stubdom/Makefile: they get installed within the > cross-root-$(GNU_TARGET_ARCH) hierarchy, where the linker finds it > thanks to the TARGET_LDFLAGS variable. > >> This make magic is somewhat convoluted, > > It's no magic, it's makefiles :) Ok, do I have to extend the # Links section as well? >> So, where should I add it for proper operation? > > Just the same way as zlib & C stubdom examples. I may be blind, but there's no -l linker option in stubdom/Makefile. >> /home/wferi/xen/xen-3.3.1/stubdom/mini-os-x86_32-c/mini-os.o: In function >> `grub_memalign': >> /home/wferi/xen/grub2/util/misc.c:263: undefined reference to >> `posix_memalign' > > It should just be a matter of setting it as an alias for newlib's > memalign, by adding a macro into newlib/libc/include/malloc.h for > instance. Ideally it should be reported to newlib's upstream actually. Thanks for the tip. >> /home/wferi/xen/grub2/util/getroot.c:215: undefined reference to `lstat' >> /home/wferi/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses/../ncurses/./tty/lib_tstp.c:159: >> undefined reference to `tcgetpgrp' >> /home/wferi/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses/../ncurses/./tty/lib_tstp.c:159: >> undefined reference to `getpgrp' >> /home/wferi/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses/../ncurses/./tinfo/lib_kernel.c:143: >> undefined reference to `tcflush' > > Should be fixed by the patch below. And thanks for the patch! Will try once I get a correct build infrastructure. >> /home/wferi/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses/../ncurses/./tinfo/lib_baudrate.c:244: >> undefined reference to `cfgetospeed' > > I'm a bit surprised you actually got code using cfgetospeed compiled in > the miniOS environment. It's supposed to return something like B9600, > but that's not defined by newlib! Yeah, I copied those defines from my libc headers. Figured I won't need them after all, as the MiniOS console won't care, so I can stub them out later. But wanted a proof of concept first of all. >> /home/wferi/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses/../ncurses/./tinfo/lib_kernel.c:67: >> undefined reference to `fpathconf' > > Same issue: how did you get that code to compile? _PC_VDISABLE is not > defined... I believe you are not using the cross-chain flags. Hmm, I don't remember hacking around this... >> /home/wferi/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses/../ncurses/./tinfo/access.c:112: >> undefined reference to `access' >> /home/wferi/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses/../ncurses/./tinfo/access.c:125: >> undefined reference to `access' > > Mmmm, the fsif protocol does not provide an access operation to > implement that properly. You could add a dummy implementation in > lib/sys.c that just open()/close() it and return proper error codes if > any and it should be fine for ncurses' use cases. Thanks, that's about what I expected. Will do. Until then, here are my notes from the yesterday session. If you have further comments, I'd be glad to hear them. Thanks, Feri. --------------------------------------------------- 1. wferi@rs22:~/xen/xen-3.3.1/stubdom/ncurses-x86_32/ncurses$ gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include -DNDEBUG -I/home/wferi/xen/xen-3.3.1/stubdom/cross-root-i686/i686-xen-elf/include/ncurses -isystem /home/wferi/xen/xen-3.3.1/stubdom/../extras/mini-os/include -D__MINIOS__ -DHAVE_LIBC -isystem /home/wferi/xen/xen-3.3.1/stubdom/../extras/mini-os/include/posix -isystem /home/wferi/xen/xen-3.3.1/stubdom/../tools/xenstore -isystem /home/wferi/xen/xen-3.3.1/stubdom/../extras/mini-os/include/x86 -isystem /home/wferi/xen/xen-3.3.1/stubdom/../extras/mini-os/include/x86/x86_32 -U __linux__ -U __FreeBSD__ -U __sun__ -nostdinc -isystem /home/wferi/xen/xen-3.3.1/stubdom/../extras/mini-os/include/posix -isystem /home/wferi/xen/xen-3.3.1/stubdom/cross-root-i686/i686-xen-elf/include -isystem /usr/lib/gcc/i486-linux-gnu/4.3.2/include -isystem /home/wferi/xen/xen-3.3.1/stubdom/lwip-x86_32/src/include -isystem /home/wferi/xen/xen-3.3.1/stubdom/lwip-x86_32/src/include/ipv4 -I/ho me/wferi/xen/xen-3.3.1/stubdom/include -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -m32 -march=i686 -m32 -march=i686 -g -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes -Wno-unused-value -Wdeclaration-after-statement -fno-stack-protector --param max-inline-insns-single=1200 -c ../objects/tty_update.c -o ../objects/tty_update.o That is, both lwip -isystem pathes missed the -x86_32 bit (the original was the result of adapting the zlib cross-compilation stanza in stubdom/Makefile: NCURSES_URL?=ftp://invisible-island.net/ncurses NCURSES_VERSION=5.7 [...] ############### # Cross-ncurses ############### ncurses-$(NCURSES_VERSION).tar.gz: $(WGET) $(NCURSES_URL)/$@ ncurses-$(XEN_TARGET_ARCH): ncurses-$(NCURSES_VERSION).tar.gz tar xzf $< mv ncurses-$(NCURSES_VERSION) $@ NCURSES_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libncurses.a .PHONY: cross-ncurses cross-ncurses: $(NCURSES_STAMPFILE) $(NCURSES_STAMPFILE): ncurses-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) ( cd $< && \ CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(CC) ./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf --with-build-cppflags="" --with-build-cflags="" --with-build-ldflags="" --with-build-libs="" && \ $(MAKE) libs && \ $(MAKE) install.libs ) The --with-build-* options do nothing, so two utilities must be compiled by hand. 1b. Fix the two include pathes in stubdom/Makefile: TARGET_CPPFLAGS += -isystem $(CURDIR)/lwip-x86_32/src/include TARGET_CPPFLAGS += -isystem $(CURDIR)/lwip-x86_32/src/include/ipv4 (Probably helps after reconfiguration only.) 2. Some other file required renaming the local variable holding the current screen from 'current' to 'currrent' (cca. 3 occurences) due to some strange Xen include clash?! 3. 'columns' in the above tty_update.c has a similar problem. Moving #include <curses.priv.h> past #include <sys/select.h> solves this, but still gives ../ncurses/./tty/tty_update.c:351: warning: implicit declaration of function $B!F(Bselect$B!G(B 4. Add to ../ncurses/./tinfo/lib_baudrate.c, above 'static struct speed const speeds[] =': /* Copied from Linux' /usr/include/bits/termios.h, Mini-OS has no support for these */ #define B0 0000000 /* hang up */ #define B50 0000001 #define B75 0000002 #define B110 0000003 #define B134 0000004 #define B150 0000005 #define B200 0000006 #define B300 0000007 #define B600 0000010 #define B1200 0000011 #define B1800 0000012 #define B2400 0000013 #define B4800 0000014 #define B9600 0000015 #define B19200 0000016 #define B38400 0000017 5. Add to the head of ../ncurses/./tinfo/lib_kernel.c: /* Copied from Linux' /usr/include/bits/termios.h, Mini-OS has no support for these */ #define VERASE 2 #define VKILL 3 #define TCIFLUSH 0 Maybe #undef TERMIOS would be better? This still leaves: ../ncurses/./tinfo/lib_kernel.c:143: warning: implicit declaration of function $B!F(Btcflush$B!G(B 6. #include <curses.priv.h> problem in ../ncurses/./tty/lib_twait.c, too. 7. These alone get us a libncurses.a! 8. The 'form' part still does not compile, because the field 'current' in ../form/form.h clashes with the #define current at /home/wferi/xen/xen-3.3.1/stubdom/../extras/mini-os/include/mini-os/sched.h:51:1 This is the same problem as 2., but without an easy fix, as this 'current' isn't a local variable. 9. Actually, deleting #define current get_current() from extras/mini-os/include/mini-os/sched.h made libncurses++.a build, but broke make c-stubdom... According to Keir Fraser, the simplest fix is: #ifdef __MINIOS__ #define current get_current() #endif _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |