Commit 2bd766b
authored
openkal-windows: build under all three of this environment's toolchains (#1)
* openkal-windows: build under all three of this environment's toolchains
This environment has two application binary interfaces and three toolchains that
reach them. The package built under one. Three changes make it build under all
three, and each of the three was a real assumption rather than a spelling.
The width of a machine word was taken from a macro two of the three compilers
publish. It is now taken from the specification, which resolves it for all three.
A library was named in the spelling one of the two ABIs uses for it. The two
spellings are now both present, each under the predicate that selects its ABI.
Exceptions and run-time type information were disabled unconditionally, in a
spelling one toolchain does not recognise. They are now disabled on the ABI where
their absence is asserted --- the one where a program may have no C runtime to
supply a personality routine --- and left to the toolchain's defaults on the ABI
where a program has one. The third flag of that group, which suppressed the guard
around a function-local static, is gone: every static in this package is
initialised by a constant, so no guard was ever emitted.
Continuous integration covers all three, and adds a job that cross-builds the
package from a system that is not this one and runs the suite under an
implementation of this environment's interfaces. That job is where the exported
names are compared against SURFACE.txt and where the objects are asserted to
reference no C runtime symbol, because the tools that read this object format are
there and not here.
* openkal-windows: the reserved name, and setting a file's modification time
The object manager reads "." as a name to look up, finds no child so called, and
reports that the argument is invalid --- where the other two environments reserve
the same word and accept it wherever a name is accepted. What this one does
accept is an empty name beside the directory's own handle, which denotes exactly
the same thing, so the translation is in the one place every other difference
between the two spellings of a name already is.
kal_fs_set_modified is one record with one field written; every field of that
record is a time and this environment reads a zero as "leave that one alone", so
the record says nothing about the other three.
* ci: name wine's own binary
* openkal-windows: name the libraries where the ABI that needs them records it
The manifest named them twice, once per application binary interface, and one of
the two spellings is not a link-line argument at all: a bare `.lib' is a file
name to a compiler driver of the GNU kind, and the two toolchains that produce
this environment's own ABI are of two different kinds.
The mechanism that ABI has is a directive the compiler records in the object it
produces, and both of its toolchains read it. So the libraries are named in the
source that uses them, and the manifest names them only for the ABI whose
toolchain has no such mechanism.
It is better than the arrangement it replaces for a reason beyond building at
all: a library named in the object travels with it, so a program that links this
package needs nothing in its own manifest, and the requirement cannot fall out of
step with the source that creates it.
* openkal-windows: an argument is not a name, and a name is not half a buffer
Two bounds, both wrong, and the second only where a real environment is large
enough to meet it.
An argument and a named value were converted through the buffer names are
converted through. A name is bounded by what a file system accepts; a search
path is not, and one longer than that buffer reached the caller as "the argument
is not valid" --- four operations away from the length that caused it. They are
now converted straight into the buffer they are destined for, which also removes
the substitution that had to be undone afterwards: that substitution is for
names, and neither of these is a name.
The name conversion itself refused anything longer than half its buffer. One
byte of the caller's encoding never becomes more than one unit of this
environment's --- a character outside the basic plane costs four bytes and two
units, and every other costs at least as many bytes as units --- so the bound is
the buffer's length and not half of it. The half was a guess.
* openkal-windows: align the buffer this environment writes its directory records into
* openkal-windows: a timeout is a floor, and wine is not always called wine64
This environment takes a whole number of milliseconds for a timed wait and
measures it against a clock whose tick is longer than that, so a wait given
thirty milliseconds returns after fifteen. A caller that asked to be suspended
for a duration and was returned to before it elapsed has been given a wrong
answer, and every timed wait built upon this one inherits it. The deadline is now
computed once from the monotonic source and the wait re-entered until that source
has passed it.
Which package carries wine and what the program inside it is called differ
between distributions and between releases of one. Both names are now tried and
the one that exists is used, because a script that names one of them fails with
"command not found" after a successful install --- which reads as a missing
package rather than as a renamed program.
* openkal-windows: supply every volume, because this system has no single root
An implementation supplied the working directory and the volume that directory
is on. On the other two systems that is enough, because a name on one device is
still beneath the one root; here it is not. A program on one volume could not
reach a program on another, and what a reader saw was "no such file" four
operations after the resolution that had already failed.
That is a confinement nobody chose. A hosted system does not confine an ordinary
program, so the volumes this system has are what it supplies --- each opened by
the whole name this environment uses and reported by as much of it as openkal's
naming wants, so that the remainder of an absolute name beneath one does not
begin with a separator.1 parent f33cf25 commit 2bd766b
8 files changed
Lines changed: 468 additions & 110 deletions
File tree
- .github/workflows
- src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
0 commit comments