[[!meta copyright="Copyright © 2010, 2014 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] [[!tag open_issue_glibc]] # IRC, unknown channel, unknown date d'oh, broken defines for ioctl()! http://paste.debian.net/45021/ ← any idea about this? looks like something fishy with the SIO* defines tschwinge: ↑ know anything about this? #define _IOT_arpreq _IOT_SIMPLE (struct arpreq) ← looks like it is missing for bits/ioctls.h eglibc patch submitted-ioctl-unsigned-size_t.diff should be pimped a bit youpi: while trying to compile ossp-uuid (needed by pgsql 8.4, needed by various other stuff), i found a bug in a hurd libc header that's possible it has a ioctrl() using an id with a value having type 'struct arpreq' ah, that's not a bug then see the ioctl section of the porting page of the wiki due to the sort of "mangling" done in bits/ioctrls.h, there should be an helper macro for the size of the struct arpreq +#define _IOT_arpreq _IOT_SIMPLE (struct arpreq) ← adding this before any header was enough * pinotree looks it's not to be done so simply see the page :) I'm afraid _IOT_arpreq can't be properly defined * pinotree is not finding it... the closest i see is http://lists.gnu.org/archive/html/bug-hurd/2006-03/msg00025.html that's it yes I mean, that's the kind of thing but not the wiki page, let me look http://www.gnu.org/software/hurd/hurd/porting/guidelines.html i also saw a glib patch adding few types like that (char, short, int) yes that's the same kind of thing i see setting it to _IOT_SIMPLE(struct arpreq) would probably work with 32bit gnumach and 32bit userland, but may not with e.g. 64bit gnumach and 32bit userland and such hmmm, sockaddr,sockaddr,int,sockaddr,char[16] so basically it would support at most 3 elements in a passed struct? s/elements/fields/ 3 kinds of fields as you provide a count youpi: so basically: #define _IOT_arpreq _IOT (_IOTS (struct sockaddr), 3, _IOTS (int), 1, _IOTS (char), 16) ? ie the order of the fields in the struct does not matter, it seems? the order of the fields does matter as this encodes how mig will read the struct to send them uhm also, _IOTS(struct sockaddr) won't work yeah i should define it too no, it even needs to be replaced by its content ah it is possible to compose the _IOTS()? (to build structs with more than 3 kind of fields) no d'oh that's a hard shortcoming of the whole ioctl encoding * pinotree scratches his head there's no way but redefining ioctl(), really it was a funny trick to encode it this way, but unrealistic i see, yes not to mention ioctls which contain pointers, which just can not be passed to mig indeed actually it's not mach's ioctl issue as mach doesn't know ioctl but the hurd ioctl interface right which might end up in mach, other processes, other machines, etc. * pinotree s/Mach/Hurd/ :) # `TIOCCONS` ## IRC, freenode, #hurd, 2014-02-05 Hi, anybody have time to look at what fails with: ioctl(0, TIOCCONS, NULL)? found a program doing the same function call as bootlogd: http://paste.debian.net/80231/ rpctrace: http://paste.debian.net/80232/ gnu_srs: it seems there is a misunderstanding between linux and *bsd on this one to be able to work on *bsd (and on hurd too), the source code should replace its NULL parameter with the address of an integer containing 1 see http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022116.html for the bsd implementation, for instance youpi: replacing 0 with &i where int i=1 gives: TIOCCONS: Inappropriate ioctl for device so be it, but that's clearly needed to be able to work on bsd and probably the implementation is just missing on the Hurd for now jus to be clear: do you mean 0 or NULL in: ioctl(0, TIOCCONS, NULL)? yes, for instance there is an implementation do_tiocsctty in glibc, but no to_tioccons I mean NULL OK, that's where I changed, the first argument id the FD well, when I wrote "NULL", I really meant "NULL" ... yes sure, so you say that it is not yet implemented? yes, for instance there is an implementation do_tiocsctty in glibc, but no to_tioccons easy to do? no idea, I don't even know what that is suppsoed to do it's probably something like tiocsctty, but I don't really know Redirecting console output to a pseudotty omg that ioctl is so ugly the way I can see it working is to add an RPC to the /dev/console translator (i.e. /hurd/term) to give it the fd, and have /hurd/term write to it whenever it gets writes, instead of writing to the console device gnu_srs: what do you need that for? bootlogd in sysvinit use that for logging. should I propose a patch to avoid the segfault when booting then? at least, yes *bsd will need it anyway youpi: btw: hurd console does not work when running openrc, neither is halt/reboot. Maybe you should try it out? bootlogd use ioctl(0, TIOCCONS, NULL) a Linux (only) construct ? gnu_srs: I had infinite time in the day, I would be able to try it out, yes heh giving NULL to TIOCCONS is a linux-only construct, yes to be compatible with *BSD, you have to pass the parameter mentioned above instead of NULL well bootlogd is from sysvinit, so it is a matter if we move to that for init. ***checking if bootlogd segfaults on kFreeBSD too # Non-constant structures as IOCTL parameter [[!debbug 413734]]. ## IRC, OFTC, #debian-hurd, 2014-02-16 https://bugs.debian.org/413734 patch #2 has become http://paste.debian.net/plain/82412/ ie. almost entirely ifdef'ing DeviceEnum ok final patch is http://paste.debian.net/plain/82440/ could anyone review it, especially last 3 oss hunks? gg0: well probably it would be cleaner to have autoconf check for any of the three soundcard.h include locations? azeem: i think if upstream is ok with 2 it could be ok with 3 too my concern is about linux/ in header path (hurd is not linux) and about ways cleaner than last 2 hunks well yeah, #ifdef __GNU__ #include certainly looks ugly i'll ifdef ioctls only ### IRC, OFTC, #debian-hurd, 2014-02-17 http://paste.debian.net/plain/82446/ https://trac.videolan.org/vlc/ticket/10696 ### IRC, freenode, #hurd, 2014-02-17 porting vlc with http://paste.debian.net/plain/82446/ + http://paste.debian.net/plain/82510/ what's the proper way to fix ioctl instead of ifdef'ing them? see https://bugs.debian.org/413734 gg0: defining them in libc and in servers implementing them ofc