Date: Sun, 19 Jun 2011 04:55:16 -0700 From: Garrett Cooper <yanegomi@gmail.com> To: Bruce Evans <brde@optusnet.com.au> Cc: "benl@FreeBSD.org" <benl@FreeBSD.org>, "svn-src-head@FreeBSD.org" <svn-src-head@FreeBSD.org>, "svn-src-all@FreeBSD.org" <svn-src-all@FreeBSD.org>, "src-committers@FreeBSD.org" <src-committers@FreeBSD.org>, TAKAHASHI Yoshihiro <nyan@FreeBSD.org> Subject: Re: svn commit: r223262 - in head: cddl/contrib/opensolaris/lib/libdtrace/common contrib/binutils/bfd contrib/binutils/gas contrib/binutils/gas/config contrib/binutils/ld contrib/binutils/opcodes contr... Message-ID: <2FF8921B-04E8-43CA-9140-1DEB0933C8E3@gmail.com> In-Reply-To: <20110619193320.Y917@besplex.bde.org> References: <201106181356.p5IDuXhW044171@svn.freebsd.org> <20110619.114704.59640143160110864.nyan@FreeBSD.org> <20110619193320.Y917@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Jun 19, 2011, at 4:26 AM, Bruce Evans <brde@optusnet.com.au> wrote:
> On Sun, 19 Jun 2011, TAKAHASHI Yoshihiro wrote:
>=20
>> In article <201106181356.p5IDuXhW044171@svn.freebsd.org>
>> Ben Laurie <benl@freebsd.org> writes:
>>>=20
>>> Log:
>>> Fix clang warnings.
>>>=20
>>> Modified: head/sys/sys/diskpc98.h
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D
>>> --- head/sys/sys/diskpc98.h Sat Jun 18 13:54:36 2011 (r223261)
>>> +++ head/sys/sys/diskpc98.h Sat Jun 18 13:56:33 2011 (r223262)
>>> @@ -36,8 +36,11 @@
>>> #include <sys/ioccom.h>
>>>=20
>>> #define DOSBBSECTOR 0 /* DOS boot block relative sector number *=
/
>>> +#undef DOSPARTOFF
>>> #define DOSPARTOFF 0
>>> +#undef DOSPARTSIZE
>>> #define DOSPARTSIZE 32
>>> +#undef NDOSPART
>>> #define NDOSPART 16
>>> #define DOSMAGICOFFSET 510
>>> #define DOSMAGIC 0xAA55
>>> @@ -52,6 +55,7 @@
>>>=20
>>> #define DOSMID_386BSD (PC98_MID_386BSD | PC98_MID_BOOTABLE)
>>> #define DOSSID_386BSD (PC98_SID_386BSD | PC98_SID_ACTIVE)
>>> +#undef DOSPTYP_386BSD
>>> #define DOSPTYP_386BSD (DOSSID_386BSD << 8 | DOSMID_386BSD)
>>>=20
>>> struct pc98_partition {
>>>=20
>>=20
>> I wonder why this is needed, and why only for diskpc98.h, not
>> diskmbr.h.
>=20
> This is needed to break the warning even more. There are are enormous
> number of layers of brokenness:
>=20
> o These header files unfortunately define some ioctls (just 1), so
> kdump/mkioctls generates an include of both in ioctl.c. This causes
> conflicts. The conflicts should cause errors (though the conflicting
> definitions aren't actually used in ioctl.c), but they only generates
> warnings.
>=20
> o If you compile ioctl.c standalone to test this, then it compiles with
> no warnings with both gcc and clang, since -Wno-system-headers is the
> default for gcc and apparently for clang too. However, for world builds
> there is magic that results in <sys> being
> $(realpath /usr/obj)/src/tmp/usr/include/sys instead of just
> /usr/include/sys. I'm not sure if clang only is confused by this so
> that -Wno-system-headers doesn't break the warnings for clang only,
> or if the warnings have always been happening and they are just more
> obvious with clang colorizing them.
>=20
> o The build system knows about -Wno-system-headers breaking warnings, so
> it puts -Wsystem-headers in CFLAGS to turn this off. But it only does
> this at WARNS >=3D 1, and kdump still uses WARNS =3D 0.
>=20
> o Poor structuring of the disk headers. I've always thought that
> diskmbr.h shouldn't exist. It doesn't describe "the" disk mbr
> structure, but only the "i386" one. It should have been named
> something like diski386.h. The current problem shows that these
> files should have been purely MD so that they can be kept separate.
> Their names should have been something like <machine/diskmbr.h>.
> Or for simplicity, keep all of their definitions with ifdefs in
> <sys/disklabel.h> like they used to be as recently as FreeBSD-4.
> disklabel.h still has some ugly unsorted MD ifdefs (just 2, for
> LABELSECTOR and LABELOFFSET). Of course, definitions for MBRs
> should never have been in disklabel.h. For simplicity with fewer
> hacks, put all the MBR definitions with ifdefs in <sys/diskmbr.h>.
> The current problem shows that many ifdefs are needed with the
> current structuring anyway. We only escape having to ifdef everything
> in both of the files (or complications in mkioctls) because some names
> are different (e.g., struct pc98_partition instead of struct
> dos_partition, and more importantly, DIOCSPC98 instead of DIOCSMBR --
> the latter allows both ioctls to be defined in ioctl.c, though only
> the pc98 is normally used on pc98. BTW, can pc98 handle i386-formatted
> disks? MacOS supports i386-mbr formatted USB drives better than
> WinXP does -- WinXP can only mount FAT32 partitions in MBR slot 1,
> though it can recognize them in any slot. Such support is easiest
> if all the mbr ioctls are available in all arches. But I now think
> that depending on any disk ioctl in an application like fdisk or
> newfs is a bug. Such applications should be able to work on any
> "direct addressable" file (including regular files and foreign
> disks). Some Linux disk applications now work better on FreeBSD than
> FreeBSD ones do, since they don't depend so much on ioctls :-().
>=20
> This is only "needed" for diskpc98.h because 'm' is less than 'p', so
> diskmbr.h is always included before diskpc98.h. I thought at first
> that the order of the includes could not be depended on, because the
> find(1) in mkioctls produced output in (unsorted) tree traversal order.
> But the find is actually on "*" in each directory in the include path,
> so the shell will sort the includes alphabetically within each directory.
> I now remember that this is intentional, to get the same breakage as
> an application which complies with style(9) will get if there are any
> bogus ordering requirements for directories that are not accidentally
> satisified by keeping the includes sorted. See the /* XXX obnoxious
> prerequisites. */ section in mkioctls. This intentionally includes
> a few headers out of order, to work around cases where the normal
> order doesn't work. One of these headers is disklabel.h, which
> might not be needed there any more now that it has been cleaned up.
If my ktrace WARNS 0 -> 6 patch had been reviewed that I submitted some week=
s ago, then this would be moot. It's not a perfect solution, but it worked.
Thanks,
-Garrett=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2FF8921B-04E8-43CA-9140-1DEB0933C8E3>
