summaryrefslogtreecommitdiff
path: root/arch/i386
AgeCommit message (Collapse)AuthorLines
2013-04-04fix type issues in stdint.h so underlying types of 64-bit types match ABIRich Felker-0/+3
2013-04-04eliminate bits/wchar.hRich Felker-4/+0
the preprocessor can reliably determine the signedness of wchar_t. L'\0' is used for 0 in the expressions so that, if the underlying type of wchar_t is long rather than int, the promoted type of the expression will match the type of wchar_t.
2013-04-02re-add useconds_trofl0r-0/+1
this type was removed back in 5243e5f1606a9c6fcf01414e , because it was removed from the XSI specs. however some apps use it. since it's in the POSIX reserved namespace, we can expose it unconditionally.
2013-04-01add syscall numbers for the new kcmp and finit_module syscallsSzabolcs Nagy-0/+4
and remove syscall todos from microblaze
2013-03-26remove __SYSCALL_SSLEN arch macro in favor of using public _NSIGRich Felker-2/+0
the issue at hand is that many syscalls require as an argument the kernel-ABI size of sigset_t, intended to allow the kernel to switch to a larger sigset_t in the future. previously, each arch was defining this size in syscall_arch.h, which was redundant with the definition of _NSIG in bits/signal.h. as it's used in some not-quite-portable application code as well, _NSIG is much more likely to be recognized and understood immediately by someone reading the code, and it's also shorter and less cluttered. note that _NSIG is actually 65/129, not 64/128, but the division takes care of throwing away the off-by-one part.
2013-03-23add deprecated SIGIOT alias for SIGABRTRich Felker-0/+1
reportedly some programs (e.g. showkeys in the kbd package) use it.
2013-03-04fix types for wctype_t and wctrans_tRich Felker-2/+2
wctype_t was incorrectly "int" rather than "long" on x86_64. not only is this an ABI incompatibility; it's also a major design flaw if we ever wanted wctype_t to be implemented as a pointer, which would be necessary if locales support custom character classes, since int is too small to store a converted pointer. this commit fixes wctype_t to be unsigned long on all archs, matching the LSB ABI; this change does not matter for C code, but for C++ it affects mangling. the same issue applied to wctrans_t. glibc/LSB defines this type as const __int32_t *, but since no such definition is visible, I've just expanded the definition, int, everywhere. it would be nice if these types (which don't vary by arch) could be in wctype.h, but the OB XSI requirement in POSIX that wchar.h expose some types and functions from wctype.h precludes doing so. glibc works around this with some hideous hacks, but trying to duplicate that would go against the intent of musl's headers.
2013-01-12add missing mmap options and madvices to bits/mman.h based on linux headersSzabolcs Nagy-0/+7
2013-01-12add missing EXTPROC flag to bits/termios.hSzabolcs Nagy-0/+1
mips and powerpc already had this termios flag defined
2013-01-12add missing F_GETOWNER_UIDS flag to bits/fcntl.hSzabolcs Nagy-0/+2
2013-01-12add missing EHWPOISON to bits/errno.hSzabolcs Nagy-0/+1
it was already defined for mips, but was missing from other archs
2012-12-06move signal.h REG_* macros under _GNU_SOURCE protectionRich Felker-20/+22
they were accidentally exposed under just baseline POSIX, which is a big namespace pollution issue. thankfully glibc only exposes them under _GNU_SOURCE, not under any of its other options, so omitting the pollution in the default _BSD_SOURCE profile does not hurt application compatibility at all.
2012-12-06bits/signal.h: add register names for x86(_64)rofl0r-0/+21
glibc exposes them from ucontext.h. since that header includes signal.h, it is safe to put them into bits/signal.h, if _GNU_SOURCE is defined.
2012-12-06add more arch-specific MAP_ macros to bits/mman.hrofl0r-0/+4
these are also needed by qemu.
2012-12-06add MAP_NORESERVE to bits/mman.hrofl0r-0/+1
this is needed for qemu, and since it differs for each arch it can't be circumvented easily by using a macro in CFLAGS.
2012-11-25fixup mcontext stuff to expost gregset_t/fpregset_t as appropriateRich Felker-4/+5
2012-11-25make sys/procfs.h mostly work on most archsRich Felker-4/+7
these structures are purely for use by trace/debug tools and tools working with core files. the definition of fpregset_t, which was previously here, has been removed because it was wrong; fpregset_t should be the type used in mcontext_t, not the type used in ptrace/core stuff.
2012-11-23sigcontext/mcontext cleanup for arch-specific bitsRich Felker-22/+26
with these changes, the members/types of mcontext_t and related stuff should closely match the glibc definitions. unlike glibc, however, the definitions here avoid using typedefs as much as possible and work directly with the underlying types, to minimize namespace pollution from signal.h in the default (_BSD_SOURCE) profile. this is a first step in improving compatibility with applications which poke at context/register information -- mainly debuggers, trace utilities, etc. additional definitions in ucontext.h and other headers may be needed later. if feature test macros are used to request a conforming namespace, mcontext_t is replaced with an opaque structure of the equivalent size and alignment; conforming programs cannot examine its contents anyway.
2012-11-23fix up leftover, incorrect NSIG definitions in arch-specific signal.hRich Felker-1/+0
2012-11-21add back NSIG, removed from powerpc in last commit, but for all archsRich Felker-0/+2
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.
2012-11-18fix breakage from introducing bits header for sys/io.hRich Felker-3/+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.
2012-11-18add port io functions to sys/io.hRich Felker-0/+80
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.
2012-11-18fcntl.h: O_SEARCH was missing for powerpcrofl0r-3/+0
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.
2012-10-15add support for TLS variant I, presently needed for arm and mipsRich Felker-1/+2
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.
2012-10-13ensure pointer decay in inline-asm arg for i386 syscall6Rich Felker-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.
2012-10-11i386 vsyscall support (vdso-provided sysenter/syscall instruction based)Rich Felker-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.
2012-10-04dynamic-linked TLS support for everything but dlopen'd libsRich Felker-1/+21
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.
2012-09-22fix broken semctl on systems that don't use IPC_64 flagRich Felker-0/+2
not tested on mips and arm; they may still be broken. x86_64 should be ok now.
2012-09-15add O_EXEC open modeRich Felker-0/+1
the linux O_PATH mode provides the necessary semantics for both the O_SEARCH and O_EXEC modes defined and required by POSIX 2008.
2012-09-13add O_PATH/O_SEARCH support to fcntl.hRich Felker-0/+2
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.
2012-09-08syscall organization overhaulRich Felker-286/+136
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.
2012-09-08add acct, accept4, setns, and dup3 syscalls (linux extensions)Rich Felker-0/+3
based on patch by Justin Cormack
2012-09-02avoid "inline" in public headers for strict c89 compatibilityRich Felker-14/+14
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.
2012-08-10use int instead of long for ptrdiff_t on all 32-bit archsRich Felker-1/+1
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.
2012-08-09add defines for number of sigset_t bytes syscalls expectRich Felker-0/+2
yet another gratuitous mips incompatibility...
2012-07-12workaround another sendmsg kernel bug on 64-bit machinesRich Felker-0/+7
the kernel wrongly expects the cmsg length field to be size_t instead of socklen_t. in order to work around the issue, we have to impose a length limit and copy to a local buffer. the length limit should be more than sufficient for any real-world use; these headers are only used for passing file descriptors and permissions between processes over unix sockets.
2012-07-03jmp_buf overhaul fixing several issuesRich Felker-1/+1
on arm, the location of the saved-signal-mask flag and mask were off by one between sigsetjmp and siglongjmp, causing incorrect behavior restoring the signal mask. this is because the siglongjmp code assumed an extra slot was in the non-sig jmp_buf for the flag, but arm did not have this. now, the extra slot is removed for all archs since it was useless. also, arm eabi requires jmp_buf to have 8-byte alignment. we achieve that using long long as the type rather than with non-portable gcc attribute tags.
2012-06-23update syscall defs to latest kernel onesRich Felker-0/+16
patch submitted by Kristian L. <email@thexception.net>
2012-06-20proper error handling for fcntl F_GETOWN on modern kernelsRich Felker-0/+3
on old kernels, there's no way to detect errors; we must assume negative syscall return values are pgrp ids. but if the F_GETOWN_EX fcntl works, we can get a reliable answer.
2012-05-22fix missing _BSD_SOURCE support in bits/*.hRich Felker-4/+4
this is actually rather ugly, and would get even uglier if we ever want to support further feature test macros. at some point i may factor the bits headers into separate files for C base, POSIX base, and nonstandard extensions (the only distinctions that seem to matter now) and then the logic for which to include can go in the main header rather than being duplicated for each arch. the downside of this is that it would result in more files having to be opened during compilation, so as long as the ugliness does not grow, i'm inclined to leave it alone for now.
2012-04-29fix float_t and double_t defs on x86 when -mfpmath=sse -msse2 is usedRich Felker-0/+5
2012-04-27support FLT_EVAL_METHOD changing on x86 with gcc -msse2 -mfpmath=sseRich Felker-0/+4
if the compiler provides a value, use it; otherwise fallback to the platform default (2).
2012-04-24use signed char rather than plain char for int8_tRich Felker-4/+4
otherwise this BADLY breaks if -funsigned-char is passed to gcc
2012-04-15move F_DUPFD_CLOEXEC out of bitsRich Felker-2/+0
fcntl values 1024 and up are universal, arch-independent. later I'll add some of the other linux-specific ones for notify, leases, pipe size, etc. here too.
2012-04-15add F_SETSIG and F_GETSIG (linux specific) to fcntl.hRich Felker-0/+2
F_* is in the reserved namespace so no feature test is needed
2012-04-04work around nasty gcc bug in the i386 syscall asmRich Felker-4/+4
when the "r" (register) constraint is used to let gcc choose a register, gcc will sometimes assign the same register that was used for one of the other fixed-register operands, if it knows the values are the same. one common case is multiple zero arguments to a syscall. this horribly breaks the intended usage, which is swapping the GOT pointer from ebx into the temp register and back to perform the syscall. presumably there is a way to fix this with advanced usage of register constaints on the inline asm, but having bad memories about hellish compatibility issues with different gcc versions, for the time being i'm just going to hard-code specific registers to be used. this may hurt the compiler's ability to optimize, but it will fix serious miscompilation issues. so far the only function i know what compiled incorrectly is getrlimit.c, and naturally the bug only applies to shared (PIC) builds, but it may be more extensive and may have gone undetected..
2012-03-21fix DECIMAL_DIG definitionsRich Felker-0/+2
DECIMAL_DIG is not the same as LDBL_DIG type_DIG is the maximimum number of decimal digits that can survive a round trip from decimal to type and back to decimal. DECIMAL_DIG is the minimum number of decimal digits required in order for any floating point type to survive the round trip to decimal and back, and it is generally larger than LDBL_DIG. since the exact formula is non-trivial, and defining it larger than necessary may be legal but wasteful, just define the right value in bits/float.h.
2012-02-15add float_t and double_t to math.hRich Felker-0/+3
2012-02-09replace bad cancellation cleanup abi with a sane oneRich Felker-25/+0
the old abi was intended to duplicate glibc's abi at the expense of being ugly and slow, but it turns out glib was not even using that abi except on non-gcc-compatible compilers (which it doesn't even support) and was instead using an exceptions-in-c/unwind-based approach whose abi we could not duplicate anyway without nasty dwarf2/unwind integration. the new abi is copied from a very old glibc abi, which seems to still be supported/present in current glibc. it avoids all unwinding, whether by sjlj or exceptions, and merely maintains a linked list of cleanup functions to be called from the context of pthread_exit. i've made some care to ensure that longjmp out of a cleanup function should work, even though it is not required to. this change breaks abi compatibility with programs which were using pthread cancellation, which is unfortunate, but that's why i'm making the change now rather than later. considering that most pthread features have not been usable until recently anyway, i don't see it as a major issue at this point.
2012-01-20add prlimit syscall wrapperRich Felker-0/+2