summaryrefslogtreecommitdiff
path: root/arch
AgeCommit message (Collapse)AuthorFilesLines
2014-03-18fix typo in filename used in sh portRich Felker1-0/+0
2014-03-18fix size of mips jmp_bufRich Felker1-1/+1
the excess space was unused and unintentional. this change does not affect the ABI between applications and libc. while it does theoretically affect linkage between third-party translation units using jmp_buf as part of a structure, we've already changed jmp_buf at least once on all archs, and problems were never observed, likely because such usage would be very unusual. in any case it's best to get things right now rather than making changes sometime during the 1.0.x series or later.
2014-03-18remove useless and incorrect uc_regspace member from mips ucontext_tRich Felker1-1/+0
this seems to have been copied erroneously from the arm version of the file. it's fairly harmless but it's a mistake and better to fix now than later.
2014-03-17x32: fix struct statfsrofl0r1-2/+4
the omission of the padding was uncovered by the latest regression statvfs regression test added to libc-test.
2014-03-16superh: fix dynamic linking of __fpscr_valuesBobby Bingham2-1/+7
Applications ended up with copy relocations for this array, which resulted in libc's references to this array pointing to the application's copy. The dynamic linker, however, can require this array before the application is relocated, and therefore before the application's copy of this array is initialized. This resulted in garbage being loaded into FPSCR before executing main, which violated the ABI. We fix this by putting the array in crt1 and making the libc copy private. This prevents libc's reference to the array from pointing to an uninitialized copy in the application.
2014-03-12fix statfs struct on mipsSzabolcs Nagy1-3/+4
The mips statfs struct layout is different than on other archs, so the statfs, fstatfs, statvfs and fstatvfs APIs were broken on mips. Now the ordering is fixed, the types are kept consistent with other archs.
2014-03-12fix semid_ds structure on mipsSzabolcs Nagy1-2/+0
This used to be broken when all archs had the same semid_ds definition: there is no padding around the time_t members on mips.
2014-03-11fix socket.h struct msghdr member types on powerpcRich Felker1-4/+4
these were incorrectly copied from the kernel, whose ABI matches the POSIX requirements but with the wrong underlying types and wrong signedness.
2014-03-11fix sysvipc structures on powerpcRich Felker4-20/+16
these have been wrong for a long time and were never detected or corrected. powerpc needs some gratuitous extra padding/reserved slots in ipc_perm, big-endian ordering for the padding of time_t slots that was intended by the kernel folks to allow a transition to 64-bit time_t, and some minor gratuitous reordering of struct members.
2014-03-11move struct semid_ds to from shared sys/sem.h to bitsRich Felker8-0/+128
the definition was found to be incorrect at least for powerpc, and fixing this cleanly requires making the definition arch-specific. this will allow cleaning up the definition for other archs to make it more specific, and reversing some of the ugliness (time_t hacks) introduced with the x32 port. this first commit simply copies the existing definition to each arch without any changes. this is intentional, to make it easier to review changes made on a per-arch basis.
2014-03-08add bits/user.h for sh portRich Felker1-0/+75
this seems to have been overlooked, and resulted in breakage in anything including sys/user.h.
2014-03-06x32: fix sysinfo()rofl0r1-0/+47
the kernel uses long longs in the struct, but the documentation says they're long. so we need to fixup the mismatch between the userspace and kernelspace structs. since the struct offers a mem_unit member, we can avoid truncation by adjusting that value.
2014-02-27add nofpu subarchs to the sh arch, and properly detect compiler's fpu configRich Felker1-0/+9
2014-02-27fix endian subarchs for sh archRich Felker2-5/+5
default endianness for sh on linux is little, and while conventions vary, "eb" seems to be the most widely used suffix for big endian.
2014-02-27rename superh port to "sh" for consistencyRich Felker30-0/+0
linux, gcc, etc. all use "sh" as the name for the superh arch. there was already some inconsistency internally in musl: the dynamic linker was searching for "ld-musl-sh.path" as its path file despite its own name being "ld-musl-superh.so.1". there was some sentiment in both directions as to how to resolve the inconsistency, but overall "sh" was favored.
2014-02-24mips: add mips-sf subarch support (soft-float)Szabolcs Nagy2-1/+12
Userspace emulated floating-point (gcc -msoft-float) is not compatible with the default mips abi (assumes an FPU or in kernel emulation of it). Soft vs hard float abi should not be mixed, __mips_soft_float is checked in musl's configure script and there is no runtime check. The -sf subarch does not save/restore floating-point registers in setjmp/longjmp and only provides dummy fenv implementation.
2014-02-24fixup general __syscall breakage introduced in x32 portrofl0r3-0/+6
the reordering of headers caused some risc archs to not see the __syscall declaration anymore. this caused build errors on mips with any compiler, and on arm and microblaze with clang. we now declare it locally just like the powerpc port does.
2014-02-23make the x32 port use the correct ld-musl-x32.path filenameRich Felker1-1/+1
previously it was wrongly using the x86_64 one, precluding having both x32 and x86_64 libs present on the same system.
2014-02-23superh portBobby Bingham30-0/+1950
2014-02-23fix x32 syscall arch.h timespec fixup coderofl0r1-53/+49
it's legal to call the __syscall functions with more arguments than necessary, and the __syscall_cp cancel dummy impl. does just that. thus we must insert the switch for all possible syscalls numbers into all of the syscallN inline functions.
2014-02-23fix some issues in x32 syscall_cp_fixuprofl0r1-11/+8
- the nanosleep fixup "fixed" the second timespec* argument erroneusly. - the futex fixup was missing the check for FUTEX_WAIT. - general cleanup using a macro.
2014-02-23mostly-cosmetic fixups to x32 port mergeRich Felker1-1/+1
2014-02-23x32 port (diff against vanilla x86_64)rofl0r13-679/+762
2014-02-23import vanilla x86_64 code as x32rofl0r30-0/+1986
2014-02-23sys/shm.h: move arch specific structs to bits/rofl0r6-0/+66
2014-01-15remove more unnecessary operand-size suffixes from x86_64 atomic.hRich Felker1-3/+3
2014-01-11remove gratuitous temp vars, casts, and suffixes in x86_64 atomic.hRich Felker1-13/+11
aside from general cleanup, this should allow the identical atomic.h file to be used for the upcoming x32 port.
2014-01-11remove size suffix in x86_64 __pthread_self asmRich Felker1-1/+1
the operand size is unnecessary, since the assembler knows it from the destination register size. removing the suffix makes it so the same code should work for x32.
2014-01-11make type of st_dev explicitly dev_t in x86_64 stat.hRich Felker1-1/+1
otherwise it's unclear that it's correct. aside from that, it makes for a gratuitous difference between the x86_64 header and the upcoming x32 header.
2014-01-08add IUTF8 to termios.h on archs that were missing itRich Felker4-0/+4
2014-01-08fix namespace violations in termios.h, at least mostlyRich Felker6-52/+49
the fix should be complete on archs that use the generic definitions (i386, arm, x86_64, microblaze), but mips and powerpc have not been checked thoroughly and may need more fixes.
2013-12-02workaround clang deficiency affecting thread pointer access on powerpcRich Felker1-1/+6
based on patch by Richard Pennington, who initially reported the issue.
2013-11-23add O_TMPFILE flag, new in linux 3.11Szabolcs Nagy6-0/+6
definition in linux: #define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) where __O_TMPFILE and O_DIRECTORY are arch specific
2013-11-20fix the nominal type of LDBL_* limits on archs with ld64Rich Felker4-16/+16
previously these macros wrongly had type double rather than long double. I see no way an application could detect the error in C99, but C11's _Generic can trivially detect it. at the same time, even though these archs do not have excess precision, the number of decimal places used to represent these constants has been increased to 21 to be consistent with the decimal representations used for the DBL_* macros.
2013-09-26add missing i386 syscall numbersRich Felker1-0/+10
somehow the range 335-339 was missed when updating the file.
2013-09-26remove duplicate lines from mips bits/syscall.hRich Felker1-48/+0
2013-09-22fix arm atomic store and generate simpler/less-bloated/faster codeRich Felker1-6/+8
atomic store was lacking a barrier, which was fine for legacy arm with no real smp and kernel-emulated cas, but unsuitable for more modern systems. the kernel provides another "kuser" function, at 0xffff0fa0, which could be used for the barrier, but using that would drop support for kernels 2.6.12 through 2.6.14 unless an extra conditional were added to check for barrier availability. just using the barrier in the kernel cas is easier, and, based on my reading of the assembly code in the kernel, does not appear to be significantly slower. at the same time, other atomic operations are adapted to call the kernel cas function directly rather than using a_cas; due to small differences in their interface contracts, this makes the generated code much simpler.
2013-09-15support configurable page size on mips, powerpc and microblazeSzabolcs Nagy6-6/+3
PAGE_SIZE was hardcoded to 4096, which is historically what most systems use, but on several archs it is a kernel config parameter, user space can only know it at execution time from the aux vector. PAGE_SIZE and PAGESIZE are not defined on archs where page size is a runtime parameter, applications should use sysconf(_SC_PAGE_SIZE) to query it. Internally libc code defines PAGE_SIZE to libc.page_size, which is set to aux[AT_PAGESZ] in __init_libc and early in __dynlink as well. (Note that libc.page_size can be accessed without GOT, ie. before relocations are done) Some fpathconf settings are hardcoded to 4096, these should be actually queried from the filesystem using statfs.
2013-09-14fix mips sysv ipc bits headersRich Felker2-3/+9
msg.h was wrong for big-endian (wrong endiannness padding). shm.h was just plain wrong (mips is not supposed to have padding). both changes were tested using libc-test on qemu-system-mips.
2013-08-18remove the __mxcsr member from fenv_t on i386 to follow the glibc abiSzabolcs Nagy1-1/+0
in the previous commit sse fenv support was added, but there is no need to save mxcsr (sse fenv register) so fix the abi incompatibility with glibc.
2013-08-16fix detection of arm hardfloatRich Felker1-1/+1
it turns out that __SOFTFP__ does not indicate the ABI in use but rather that fpu instructions are not to be used at all. this is specified in ARM's documentation so I'm unclear on how I previously got the wrong idea. unfortunately, this resulted in the 0.9.12 release producing a dynamic linker with the wrong name. fortunately, there do not yet seem to be any public toolchain builds using the wrong name. the __ARM_PCS_VFP macro does not seem to be official from ARM, and in fact it was missing from the very earliest gcc versions (around 4.5.x) that added -mfloat-abi=hard. it would be possible on such versions to perform some ugly linker-based tests instead in hopes that the linker will reject ABI-mismatching object files, if there is demand for supporting such versions. I would probably prefer to document which versions are broken and warn users to manually add -D__ARM_PCS_VFP if using such a version. there's definitely an argument to be made that the fenv macros should be exposed even in -mfloat-abi=softfp mode. for now, I have chosen not to expose them in this case, since the math library will not necessarily have the capability to raise exceptions (it depends on the CFLAGS used to compile it), and since exceptions are officially excluded from the ARM EABI, which the plain "arm" arch aims to follow.
2013-08-16support floating point environment (fenv) on armhf (hard float) subarchsRich Felker1-0/+13
patch by nsz. I've tested it on an armhf machine and it seems to be working correctly.
2013-08-15add function types to arm crt assemblyRich Felker1-0/+1
without these, calls may be resolved incorrectly if the calling code has been compiled to thumb instead of arm. it's not clear to me at this point whether crt_arch.h is even working if crt1.c is built as thumb; this needs testing. but the _init and _fini issues were known to cause crashes in static-linked apps when libc was built as thumb, and this commit should fix that issue.
2013-08-11add missing a_or_l to atomic.h for non-x86 archsRich Felker4-0/+20
this is needed for recently committed sigaction code
2013-08-10fix _NSIG and SIGRTMAX on mipsRich Felker1-1/+1
a mips signal mask contains 128 bits, enough for signals 1 through 128. however, the exit status obtained from the wait-family functions only has room for values up to 127. reportedly signal 128 was causing kernelspace bugs, so it was removed from the kernel recently; even without that issue, however, it was impossible to support it correctly in userspace. at the same time, the bug was masked on musl by SIGRTMAX incorrectly yielding 64 on mips, rather than the "correct" value of 128. now that the _NSIG issue is fixed, SIGRTMAX can be fixed at the same time, exposing the full range of signals for application use. note that the (nonstandardized) libc _NSIG value is actually one greater than the max signal number, and also one greater than the kernel headers' idea of _NSIG. this is the reason for the discrepency with the recent kernel changes. since reducing _NSIG by one brought it down from 129 to 128, rather than from 128 to 127, _NSIG/8, used widely in the musl sources, is unchanged.
2013-07-26fix powerpc build breakage from dynamic linker path search changesRich Felker1-1/+1
2013-07-26new mostly-C crt1 implementationRich Felker6-0/+75
the only immediate effect of this commit is enabling PIE support on some archs that did not previously have any Scrt1.s, since the existing asm files for crt1 override this C code. so some of the crt_arch.h files committed are only there for the sake of documenting what their archs "would do" if they used the new C-based crt1. the expectation is that new archs should use this new system rather than using heavy asm for crt1. aside from being easier and less error-prone, it also ensures that PIE support is available immediately (since Scrt1.o is generated from the same C source, using -fPIC) rather than having to be added as an afterthought in the porting process.
2013-07-24change jmp_buf to share an underlying type and struct tag with sigjmp_bufRich Felker6-6/+6
this is necessary to meet the C++ ABI target. alternatives were considered to avoid the size increase for non-sig jmp_buf objects, but they seemed to have worse properties. moreover, the relative size increase is only extreme on x86[_64]; one way of interpreting this is that, if the size increase from this patch makes jmp_buf use too much memory, then the program was already using too much memory when built for non-x86 archs.
2013-07-22remove SIG_ATOMIC_MIN/MAX from stdint bits headersRich Felker5-10/+0
i386 was done with the big commit but I missed the others
2013-07-22fix regression in size of nlink_t (broken stat struct) on x86_64Rich Felker6-0/+6
rather than moving nlink_t back to the arch-specific file, I've added a macro _Reg defined to the canonical type for register-size values on the arch. this is not the same as _Addr for (not-yet-supported) 32-on-64 pseudo-archs like x32 and mips n32, so a new macro was needed.