about summary refs log tree commit diff
path: root/.gitignore
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-07-19 23:37:21 -0400
committerRich Felker <dalias@aerifal.cx>2014-07-28 00:28:01 -0400
commita83f0e7a6b348c255064f4ad5bbb112def2850b0 (patch)
tree2a9fa767fb1cb89a669826e47f8a819a896d6e3d /.gitignore
parent1b61e4cab919c39af4462ee2fbccc9e07a59aac0 (diff)
downloadmusl-a83f0e7a6b348c255064f4ad5bbb112def2850b0.tar.gz
musl-a83f0e7a6b348c255064f4ad5bbb112def2850b0.tar.xz
musl-a83f0e7a6b348c255064f4ad5bbb112def2850b0.zip
fix mips struct stat dev_t members for big endian
the mips version of this structure on the kernel side wrongly has
32-bit type rather than 64-bit type. fortunately there is adjacent
padding to bring it up to 64 bits, and on little-endian, this allows
us to treat the adjacent kernel st_dev and st_pad0[0] as as single
64-bit dev_t. however, on big endian, such treatment results in the
upper and lower 32-bit parts of the dev_t value being swapped. for the
purpose of just comparing st_dev values this did not break anything,
but it precluded actually processing the device numbers as major/minor
values.

since the broken kernel behavior that needs to be worked around is
isolated to one arch, I put the workarounds in syscall_arch.h rather
than adding a stat fixup path in the common code. on little endian
mips, the added code optimizes out completely.

the changes necessary were incompatible with the way the __asm_syscall
macro was factored so I just removed it and flattened the individual
__syscallN functions. this arguably makes the code easier to read and
understand, anyway.

(cherry picked from commit f61be1f875a2758509d6e9e2cf6f1d9603b28b65)
Diffstat (limited to '.gitignore')
0 files changed, 0 insertions, 0 deletions