-fdump-go-spec option does not handle redefinitions
Uros Bizjak
ubizjak@gmail.com
Wed Nov 2 09:42:00 GMT 2011
On Wed, Nov 2, 2011 at 6:06 AM, Ian Lance Taylor <iant@google.com> wrote:
>>> The problem with your proposal is that the output would be invalid Go,
>>> because it would attempt to define the name _aa twice. However, it does
>>> seem plausible that in most scenarios of this type it would be more
>>> useful for -fdump-go-spec to generate
>>>
>>> const _aa = 3
>>
>> I agree.
>
> This patch implements this approach. Bootstrapped and ran Go testsuite
> on x86_64-unknown-linux-gnu. Committed to mainline.
Thanks, bu this is still not enough to determine corretc IOCTL number :(
#defines with arguments are not working at all. Please consider
following testcase:
--cut here--
#define _IOC_NRBITS 8
#define _IOC_TYPEBITS 8
#define _IOC_SIZEBITS 13
#define _IOC_DIRBITS 3
#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
#define _IOC_NRSHIFT 0
#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
/*
* Direction bits _IOC_NONE could be 0, but OSF/1 gives it a bit.
* And this turns out useful to catch old ioctl numbers in header
* files for us.
*/
#define _IOC_NONE 1U
#define _IOC_READ 2U
#define _IOC_WRITE 3U
#define _IOC(dir,type,nr,size) \
((unsigned int) \
(((dir) << _IOC_DIRSHIFT) | \
((type) << _IOC_TYPESHIFT) | \
((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT)))
/* used to create numbers */
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
#define FIOCLEX _IO('f', 1)
#define FIONCLEX _IO('f', 2)
#define TCGETS _IOR('t', 19, struct termios)
#define TCSETS _IOW('t', 20, struct termios)
--cut here--
Resulting -fdump-go-spec file:
...
const __IOC_NRSHIFT = 0
const __IOC_TYPESHIFT = (__IOC_NRSHIFT+__IOC_NRBITS)
const __IOC_SIZESHIFT = (__IOC_TYPESHIFT+__IOC_TYPEBITS)
const __IOC_DIRSHIFT = (__IOC_SIZESHIFT+__IOC_SIZEBITS)
const __IOC_NONE = 1
const __IOC_READ = 2
const __IOC_WRITE = 3
// unknowndefine FIOCLEX _IO('f', 1)
// unknowndefine FIONCLEX _IO('f', 2)
// unknowndefine TCGETS _IOR('t', 19, struct termios)
// unknowndefine TCSETS _IOW('t', 20, struct termios)
Please note missing "struct terminfos" define, so I understand that
TC[GS]ETS is unknown, but FIOCLEX should be fully defined by
preceeding definitions.
Uros.
More information about the Gcc-patches
mailing list