aboutsummaryrefslogtreecommitdiff
path: root/arch (follow)
Commit message (Expand)AuthorAgeFilesLines
* 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 archs•••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. Rich Felker2012-11-216-0/+12
* make powerpc signal.h namespace-clean for posix/isoc•••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. Rich Felker2012-11-211-19/+32
* 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.h•••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. Rich Felker2012-11-186-6/+0
* add port io functions to sys/io.h•••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. Rich Felker2012-11-182-0/+160
* add missing const on powerpc FE_DFL_ENVRich Felker2012-11-181-1/+1
* fenv support for ppc, untested•••based on code sent to the mailing list by nsz, with minor changes. Rich Felker2012-11-181-7/+28
* fcntl.h: O_SEARCH was missing for powerpc•••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. rofl0r2012-11-185-24/+9
* ppc socket.h: add forgotten cmsghdrrofl0r2012-11-181-0/+7
* dynamic linking support for powerpc•••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. Rich Felker2012-11-161-8/+27
* 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.h•••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. Rich Felker2012-11-151-1/+1
* ppc wchar_t is long, not intRich Felker2012-11-151-1/+1
* fix powerpc atomic compare-and-swap function•••previous version did not compare at all; it was just a fancy atomic write. untested. further atomic fixes may be needed. Rich Felker2012-11-141-6/+7
* 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/microblaze•••these macros are supported by more compilers Rich Felker2012-10-183-0/+12
* 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 mips•••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. Rich Felker2012-10-157-11/+33
* ensure pointer decay in inline-asm arg for i386 syscall6•••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. Rich Felker2012-10-131-1/+1
* i386 vsyscall support (vdso-provided sysenter/syscall instruction based)•••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. Rich Felker2012-10-111-66/+7
* 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 libs•••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. Rich Felker2012-10-045-5/+63
* microblaze port•••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. Rich Felker2012-09-2929-0/+1962
* fix IPC_64 in msgctl tooRich Felker2012-09-221-0/+2
* fix broken semctl on systems that don't use IPC_64 flag•••not tested on mips and arm; they may still be broken. x86_64 should be ok now. Rich Felker2012-09-223-0/+6
* add O_EXEC open mode•••the linux O_PATH mode provides the necessary semantics for both the O_SEARCH and O_EXEC modes defined and required by POSIX 2008. Rich Felker2012-09-154-0/+4
* fix syscall asm constraints for arm too•••no problems were detected so far, but the constraints seem to have been invalid just like the mips ones. Rich Felker2012-09-151-4/+4
* fix buggy constraints in mips inline syscall asm•••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. Rich Felker2012-09-151-2/+2
* add O_PATH/O_SEARCH support to fcntl.h•••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. Rich Felker2012-09-134-0/+8
* improve mips syscall asm constraints to use immediates, if possible•••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. Rich Felker2012-09-111-12/+21
* eliminate assumption that mips syscall restart preserves r25•••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. Rich Felker2012-09-101-23/+12
* inline syscall support for arm•••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). Rich Felker2012-09-091-0/+53
* inline syscall support for mips•••this drastically reduces the size of some functions which are purely syscall wrappers. disabled for clang due to known bugs satisfying register constraints. Rich Felker2012-09-091-0/+57
* syscall organization overhaul•••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. Rich Felker2012-09-088-632/+282
* add acct, accept4, setns, and dup3 syscalls (linux extensions)•••based on patch by Justin Cormack Rich Felker2012-09-081-0/+3
* add clang-compatible thread-pointer code for mips•••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. Rich Felker2012-09-071-0/+4
* avoid "inline" in public headers for strict c89 compatibility•••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. Rich Felker2012-09-024-35/+35
* avoid need for -march=mips2 to compile mips atomic.h asm•••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. Rich Felker2012-08-111-0/+8
* use int instead of long for ptrdiff_t on all 32-bit archs•••this is needed to match the underlying "ABI" standards. it's not really an ABI issue since the binary representations are the same, but having the wrong type can lead to errors when the type arising from a difference-of-pointers expression does not match the defined type of ptrdiff_t. most of the problems affect C++, not C. Rich Felker2012-08-102-2/+2
* fix incorrect ptrdiff_t type on mipsRich Felker2012-08-101-1/+1