Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Mar 2012 22:36:48 +0100
From:      Robert Millan <rmh@freebsd.org>
To:        freebsd-arch@freebsd.org
Subject:   [PATCH] Add compatibility <sys/io.h>
Message-ID:  <CAOfDtXPGPP0reN9NTBw_5%2BNwXZ56Yy0oyx_fH%2BDOvmpc1O%2BQdQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--e89a8f3baf01a5d70304bad630a5
Content-Type: text/plain; charset=UTF-8

This patch adds a compatibility <sys/io.h> that would make it easier
to build on FreeBSD software that has been written for glibc (see
example1.c).

The functionality in <sys/io.h> is more or less equivalent to
<machine/cpufunc.h> but provides some declarations which are
incompatible with those in <machine/cpufunc.h>. One of these cases is
very unfortunate because it alters I/O semantics, it applies to
outb(), outw() and outl():

  FreeBSD code: outw(port, data);
  Glibc code: outw(data, port);

The undefined I/O behaviour that could potentially result from this is
very scary. Because of this I've written a few checks to prevent both
headers from being used at the same time. Overall, aside from the
portability benefit, my proposed addition has some less obvious
side-effects:

     Desireable side-effect: Adding <sys/io.h> would break
buildability of code that attempts to use both headers at the same
time _WITHOUT_ changing the outw() call semantics (see example2.c).

     Undesireable side-effect: Adding <sys/io.h> would break
buildability of code that attempts to use both headers at the same
time, and was otherwise fine due to conditionalized outw() calls (see
example3.c [1]).

[1] I found a real case where this happens, in
sane-backends-1.0.22/backend/umax_pp_low.c. In case my patch is
accepted, I commit to provide a fix for sane-backends and also to
adjust Debian GNU/kFreeBSD headers to follow the same route [2].

[2] This means: reenable outb(), outw() and outl() in
<machine/cpufunc.h>. Currently we provide both headers, but outb(),
outw() and outl() are entirely disabled. I think it's better for both
projects to provide <sys/io.h> since the majority of code out there is
written with GNU/Linux in mind.

Attached patch is tested against HEAD with "make universe".

-- 
Robert Millan

--e89a8f3baf01a5d70304bad630a5
Content-Type: text/plain; charset=US-ASCII; name="io.diff"
Content-Disposition: attachment; filename="io.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gzlqvrlg0

SW5kZXg6IHN5cy9hbWQ2NC9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYW1k
NjQvaW5jbHVkZS9jcHVmdW5jLmgJKHJldmlzaW9uIDIzMjQwNCkKKysrIHN5cy9hbWQ2NC9pbmNs
dWRlL2NwdWZ1bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAKICAqIHVzZWQg
aW4gcHJlZmVyZW5jZSB0byB0aGlzLgogICovCiAKKyNpZmRlZiBfU1lTX0lPX0hfCisjZXJyb3Ig
ZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlIGNvbmZsaWN0IHdpdGggdGhvc2UgaW4gc3lzL2lvLmgK
KyNlbmRpZgorCiAjaWZuZGVmIF9NQUNISU5FX0NQVUZVTkNfSF8KICNkZWZpbmUJX01BQ0hJTkVf
Q1BVRlVOQ19IXwogCkluZGV4OiBzeXMvaTM4Ni9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzeXMvaTM4Ni9pbmNsdWRlL2NwdWZ1bmMuaAkocmV2aXNpb24gMjMyNDA0KQorKysgc3lz
L2kzODYvaW5jbHVkZS9jcHVmdW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEwIEBA
CiAgKiB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhpcy4KICAqLwogCisjaWZkZWYgX1NZU19JT19I
XworI2Vycm9yIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBjb25mbGljdCB3aXRoIHRob3NlIGlu
IHN5cy9pby5oCisjZW5kaWYKKwogI2lmbmRlZiBfTUFDSElORV9DUFVGVU5DX0hfCiAjZGVmaW5l
CV9NQUNISU5FX0NQVUZVTkNfSF8KIApJbmRleDogc3lzL3N5cy9pby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHN5cy9zeXMvaW8uaAkocmV2aXNpb24gMCkKKysrIHN5cy9zeXMvaW8uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgUm9iZXJ0IE1pbGxh
bgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICoKKyAqICRGcmVlQlNEJAorICovCisKKy8qCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgY29tcGF0
aWJpbGl0eSBnbHVlIGZvciBjb2RlIHRoYXQgZXhwZWN0cyBHTlUtc3R5bGUKKyAqIHN5cy9pby5o
LiBDb2RlIHdyaXR0ZW4gZm9yIEZyZWVCU0Qgc2hvdWxkIHVzZSBzeXMvc3lzdG0uaCBpbnN0ZWFk
LgorICovCisKKyNpZmRlZiBfTUFDSElORV9DUFVGVU5DX0hfCisjZXJyb3IgZGVmaW5pdGlvbnMg
aW4gdGhpcyBmaWxlIGNvbmZsaWN0IHdpdGggdGhvc2UgaW4gbWFjaGluZS9jcHVmdW5jLmgKKyNl
bmRpZgorCisjaWZuZGVmIF9TWVNfSU9fSF8KKworI2lmICFkZWZpbmVkKF9faTM4Nl9fKSAmJiAh
ZGVmaW5lZChfX2FtZDY0X18pCisjZXJyb3IgdGhpcyBmaWxlIGlzIG9ubHkgdXNlZnVsIG9uIGkz
ODYgYW5kIGFtZDY0CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjZGVmaW5l
IG91dGIJYnNkX291dGIKKyNkZWZpbmUgb3V0dwlic2Rfb3V0dworI2RlZmluZSBvdXRsCWJzZF9v
dXRsCisjaW5jbHVkZSA8bWFjaGluZS9jcHVmdW5jLmg+CisjdW5kZWYgb3V0YgorI3VuZGVmIG91
dHcKKyN1bmRlZiBvdXRsCisKKyNkZWZpbmUgb3V0YihkYXRhLHBvcnQpCQlic2Rfb3V0Yihwb3J0
LGRhdGEpCisjZGVmaW5lIG91dHcoZGF0YSxwb3J0KQkJYnNkX291dHcocG9ydCxkYXRhKQorI2Rl
ZmluZSBvdXRsKGRhdGEscG9ydCkJCWJzZF9vdXRsKHBvcnQsZGF0YSkKKworI2RlZmluZSBfU1lT
X0lPX0hfCisjZW5kaWYgLyogIV9TWVNfSU9fSF8gKi8K
--e89a8f3baf01a5d70304bad630a5--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOfDtXPGPP0reN9NTBw_5%2BNwXZ56Yy0oyx_fH%2BDOvmpc1O%2BQdQ>