about summary refs log tree commit diff
path: root/arch
Commit message (Collapse)AuthorAgeFilesLines
* more ppc signal.h typedef order fixesRich Felker2012-11-211-13/+13
|
* fix misordered typedefs in ppc signal.hRich Felker2012-11-211-2/+2
|
* ppc signal/NSIG related fix (warning fix, redefinition)Rich Felker2012-11-211-2/+1
|
* add back NSIG, removed from powerpc in last commit, but for all archsRich Felker2012-11-216-0/+12
| | | | | | | | unlike the previous definition, NSIG/_NSIG is supposed to be one more than the highest signal number. adding this will allow simplifying libc-internal code that makes signal-related syscalls, which can be done as a later step. some apps might use it too; while this usage is questionable, it's at least not insane.
* make powerpc signal.h namespace-clean for posix/isocRich Felker2012-11-211-19/+32
| | | | | | | | | | also handle the non-GNUC case where alignment attribute is not available by simply omitting it. this will not cause problems except for inclusion of mcontex_t/ucontext_t in application-defined structures, since the natural alignment of the uc_mcontext member relative to the start of ucontext_t is already correct. and shame on whoever designed this for making it impossible to satisfy the ABI requirements without GNUC extensions.
* fix powerpc types to match abi, and some feature test issuesRich Felker2012-11-213-7/+8
|
* fix invalid usage of mcontext_t in powerpc signal.hrofl0r2012-11-211-1/+1
|
* fix breakage from introducing bits header for sys/io.hRich Felker2012-11-186-6/+0
| | | | | | apparently some other archs have sys/io.h and should not break just because they don't have the x86 port io functions. provide a blank bits/io.h everywhere for now.
* add port io functions to sys/io.hRich Felker2012-11-182-0/+160
| | | | | | | based on proposal by Isaac Dunham. nonexistance of bits/io.h will cause inclusion of sys/io.h to produce an error on archs that are not supposed to have it. this is probably the desired behavior, but the error message may be a bit unusual.
* add missing const on powerpc FE_DFL_ENVRich Felker2012-11-181-1/+1
|
* fenv support for ppc, untestedRich Felker2012-11-181-7/+28
| | | | based on code sent to the mailing list by nsz, with minor changes.
* fcntl.h: O_SEARCH was missing for powerpcrofl0r2012-11-185-24/+9
| | | | | | put some macros that do not differ between architectures in the main header and remove from bits. restructure mips header so it has the same structure as the others.
* ppc socket.h: add forgotten cmsghdrrofl0r2012-11-181-0/+7
|
* dynamic linking support for powerpcRich Felker2012-11-161-8/+27
| | | | | | | | incomplete but at least partly working. requires all files to be compiled in the new "secure" plt model, not the old one that put plt code in the data segment. TLS is untested but may work. invoking the dynamic linker explicitly to load a program does not yet handle argv correctly.
* fix ppc stat structure definitionRich Felker2012-11-161-4/+3
|
* fix powerpc termios.h and ioctl.hrofl0r2012-11-162-192/+232
|
* disable SO_REUSEPORT in sys/socket.hRich Felker2012-11-151-1/+1
| | | | | | although a number is reserved for it, this option is not implemented on Linux and does not work. defining it causes some applications to use it, and subsequently break due to its failure.
* ppc wchar_t is long, not intRich Felker2012-11-151-1/+1
|
* fix powerpc atomic compare-and-swap functionRich Felker2012-11-141-6/+7
| | | | | previous version did not compare at all; it was just a fancy atomic write. untested. further atomic fixes may be needed.
* update ppc atomic code to match the endian-agnostic version on other archsRich Felker2012-11-141-14/+6
|
* fix wchar limits mistakenly copied from armRich Felker2012-11-141-2/+2
|
* PPC port cleaned up, static linking works well now.rofl0r2012-11-1335-956/+1025
|
* import preliminary ppc work by rdp.Richard Pennington2012-11-1329-0/+1971
|
* fix numerous mips abi constant definition mismatchesRich Felker2012-11-053-89/+120
|
* fix struct stat size/padding on microblazeRich Felker2012-10-191-1/+2
|
* inline syscalls for microblazeRich Felker2012-10-181-0/+97
|
* better support for reverse-endian variants of arm/mips/microblazeRich Felker2012-10-183-0/+12
| | | | these macros are supported by more compilers
* floating point environment/exceptions support for mipsRich Felker2012-10-181-3/+13
|
* microblaze TLS relocation support, completely untestedRich Felker2012-10-151-0/+6
|
* add support for TLS variant I, presently needed for arm and mipsRich Felker2012-10-157-11/+33
| | | | | | | | | | | | | | | | | | | | | | despite documentation that makes it sound a lot different, the only ABI-constraint difference between TLS variants II and I seems to be that variant II stores the initial TLS segment immediately below the thread pointer (i.e. the thread pointer points to the end of it) and variant I stores the initial TLS segment above the thread pointer, requiring the thread descriptor to be stored below. the actual value stored in the thread pointer register also tends to have per-arch random offsets applied to it for silly micro-optimization purposes. with these changes applied, TLS should be basically working on all supported archs except microblaze. I'm still working on getting the necessary information and a working toolchain that can build TLS binaries for microblaze, but in theory, static-linked programs with TLS and dynamic-linked programs where only the main executable uses TLS should already work on microblaze. alignment constraints have not yet been heavily tested, so it's possible that this code does not always align TLS segments correctly on archs that need TLS variant I.
* ensure pointer decay in inline-asm arg for i386 syscall6Rich Felker2012-10-131-1/+1
| | | | | | | | this is actually a rather subtle issue: do arrays decay to pointers when used as inline asm args? gcc says yes, but currently pcc says no. hopefully this discrepency in pcc will be fixed, but since the behavior is not clearly defined anywhere I can find, I'm using an explicit operation to cause the decay to occur.
* i386 vsyscall support (vdso-provided sysenter/syscall instruction based)Rich Felker2012-10-111-66/+7
| | | | | | this doubles the performance of the fastest syscalls on the atom I tested it on; improvement is reportedly much more dramatic on worst-case cpus. cannot be used for cancellable syscalls.
* fix incorrect TLS reloc macro names in x86_64 reloc.hRich Felker2012-10-051-3/+3
|
* dynamic-linked TLS support for everything but dlopen'd libsRich Felker2012-10-045-5/+63
| | | | | | | | currently, only i386 is tested. x86_64 and arm should probably work. the necessary relocation types for mips and microblaze have not been added because I don't understand how they're supposed to work, and I'm not even sure if it's defined yet on microblaze. I may be able to reverse engineer the requirements out of gcc/binutils output.
* microblaze portRich Felker2012-09-2929-0/+1962
| | | | | | based on initial work by rdp, with heavy modifications. some features including threads are untested because qemu app-level emulation seems to be broken and I do not have a proper system image for testing.
* fix IPC_64 in msgctl tooRich Felker2012-09-221-0/+2
|
* fix broken semctl on systems that don't use IPC_64 flagRich Felker2012-09-223-0/+6
| | | | | not tested on mips and arm; they may still be broken. x86_64 should be ok now.
* add O_EXEC open modeRich Felker2012-09-154-0/+4
| | | | | the linux O_PATH mode provides the necessary semantics for both the O_SEARCH and O_EXEC modes defined and required by POSIX 2008.
* fix syscall asm constraints for arm tooRich Felker2012-09-151-4/+4
| | | | | no problems were detected so far, but the constraints seem to have been invalid just like the mips ones.
* fix buggy constraints in mips inline syscall asmRich Felker2012-09-151-2/+2
| | | | | | | | if same register is used for input/output, the compiler must be told. otherwise is generates random junk code that clobbers the result. in pure syscall-wrapper functions, nothing went wrong, but in more complex functions where register allocation is non-trivial, things broke badly.
* add O_PATH/O_SEARCH support to fcntl.hRich Felker2012-09-134-0/+8
| | | | | | | I'm not 100% sure that Linux's O_PATH meets the POSIX requirements for O_SEARCH, but it seems very close if not perfect. and old kernels ignore it, so O_SEARCH will still work as desired as long as the caller has read permissions to the directory.
* improve mips syscall asm constraints to use immediates, if possibleRich Felker2012-09-111-12/+21
| | | | | | | | | | | | | by using the "ir" constraint (immediate or register) and the carefully constructed instruction addu $2,$0,%2 which can take either an immediate or a register for %2, the new inline asm admits maximal optimization with no register spillage to the stack when the compiler successfully performs constant propagration, but still works by allocating a register when the syscall number cannot be recognized as a constant. in the case of syscalls with 0-3 arguments it barely matters, but for 4-argument syscalls, using an immediate for the syscall number avoids creating a stack frame for the syscall wrapper function.
* eliminate assumption that mips syscall restart preserves r25Rich Felker2012-09-101-23/+12
| | | | | | | | | all past and current kernel versions have done so, but there seems to be no reason it's necessary and the sentiment from everyone I've asked has been that we should not rely on it. instead, use r7 (an argument register) which will necessarily be preserved upon syscall restart. however this only works for 0-3 argument syscalls, and we have to resort to the function call for 4-argument syscalls.
* inline syscall support for armRich Felker2012-09-091-0/+53
| | | | | | most pure-syscall-wrapper functions compile to the smallest/simplest code possible (save r7 ; load syscall # ; svc 0 ; restore r7 ; tail call to __syscall_ret).
* inline syscall support for mipsRich Felker2012-09-091-0/+57
| | | | | | | this drastically reduces the size of some functions which are purely syscall wrappers. disabled for clang due to known bugs satisfying register constraints.
* syscall organization overhaulRich Felker2012-09-088-632/+282
| | | | | | | | | | | | now public syscall.h only exposes __NR_* and SYS_* constants and the variadic syscall function. no macros or inline functions, no __syscall_ret or other internal details, no 16-/32-bit legacy syscall renaming, etc. this logic has all been moved to src/internal/syscall.h with the arch-specific parts in arch/$(ARCH)/syscall_arch.h, and the amount of arch-specific stuff has been reduced to a minimum. changes still need to be reviewed/double-checked. minimal testing on i386 and mips has already been performed.
* add acct, accept4, setns, and dup3 syscalls (linux extensions)Rich Felker2012-09-081-0/+3
| | | | based on patch by Justin Cormack
* add clang-compatible thread-pointer code for mipsRich Felker2012-09-071-0/+4
| | | | | | | | | | clang does not presently support the "v" constraint we want to use to get the result from $3, and trying to use register...__asm__("$3") to do the same invokes serious compiler bugs. so for now, i'm working around the issue with an extra temp register and putting $3 in the clobber list instead of using it as output. when the bugs in clang are fixed, this issue should be revisited to generate smaller/faster code like what gcc gets.
* avoid "inline" in public headers for strict c89 compatibilityRich Felker2012-09-024-35/+35
| | | | | | | | | while musl itself requires a c99 compiler, some applications insist on being compiled with c89 compilers, and use of "inline" in the headers was breaking them. much of this had been avoided already by just skipping the inline keyword in pre-c99 compilers or modes, but this new unified solution is cleaner and may/should result in better code generation in the default gcc configuration.
* avoid need for -march=mips2 to compile mips atomic.h asmRich Felker2012-08-111-0/+8
| | | | | | linux guarantees ll/sc are always available. on mips1, they will be emulated by the kernel. thus they are part of the linux mips1 abi and safe to use.