summaryrefslogtreecommitdiff
path: root/arch/i386/bits
AgeCommit message (Collapse)AuthorFilesLines
2013-03-04fix types for wctype_t and wctrans_tRich Felker1-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 Nagy1-0/+7
2013-01-12add missing EXTPROC flag to bits/termios.hSzabolcs Nagy1-0/+1
mips and powerpc already had this termios flag defined
2013-01-12add missing F_GETOWNER_UIDS flag to bits/fcntl.hSzabolcs Nagy1-0/+2
2013-01-12add missing EHWPOISON to bits/errno.hSzabolcs Nagy1-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 Felker1-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)rofl0r1-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.hrofl0r1-0/+4
these are also needed by qemu.
2012-12-06add MAP_NORESERVE to bits/mman.hrofl0r1-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 Felker1-4/+5
2012-11-25make sys/procfs.h mostly work on most archsRich Felker1-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 Felker1-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 Felker1-1/+0
2012-11-21add back NSIG, removed from powerpc in last commit, but for all archsRich Felker1-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 Felker1-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 Felker1-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 powerpcrofl0r1-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-09-22fix broken semctl on systems that don't use IPC_64 flagRich Felker1-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 Felker1-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 Felker1-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 Felker1-286/+0
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 Felker1-0/+3
based on patch by Justin Cormack
2012-09-02avoid "inline" in public headers for strict c89 compatibilityRich Felker1-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 Felker1-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 Felker1-0/+2
yet another gratuitous mips incompatibility...
2012-07-12workaround another sendmsg kernel bug on 64-bit machinesRich Felker1-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 Felker1-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 Felker1-0/+16
patch submitted by Kristian L. <email@thexception.net>
2012-06-20proper error handling for fcntl F_GETOWN on modern kernelsRich Felker1-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 Felker3-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 Felker1-0/+5
2012-04-27support FLT_EVAL_METHOD changing on x86 with gcc -msse2 -mfpmath=sseRich Felker1-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 Felker1-4/+4
otherwise this BADLY breaks if -funsigned-char is passed to gcc
2012-04-15move F_DUPFD_CLOEXEC out of bitsRich Felker1-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 Felker1-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 Felker1-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 Felker1-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 Felker1-0/+3
2012-02-09replace bad cancellation cleanup abi with a sane oneRich Felker1-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 Felker1-0/+2
2011-10-15don't define wchar_t on c++Rich Felker1-0/+2
it's a keyword in c++ (wtf). i'm not sure this is the cleanest solution; it might be better to avoid ever defining __NEED_wchar_t on c++. but in any case, this works for now.
2011-09-22cleanup/debloat i386 user.hRich Felker1-43/+11
2011-09-21update syscalls with off_t arguments to handle argument alignment, if neededRich Felker1-1/+2
the arm syscall abi requires 64-bit arguments to be aligned on an even register boundary. these new macros facilitate meeting the abi requirement without imposing significant ugliness on the code.
2011-09-19fix the definition of struct statvfs to match lsb abiRich Felker1-15/+6
at the same time, make struct statfs match the traditional definition and make it more useful, especially the fsid_t stuff.
2011-09-19cleanup redundancy in bits/signal.h versionsRich Felker1-122/+10
2011-09-19fix the type of wchar_t on arm; support wchar_t varying with archRich Felker1-0/+4
really wchar_t should never vary, but the ARM EABI defines it as an unsigned 32-bit int instead of a signed one, and gcc follows this nonsense. thus, to give a conformant environment, we have to follow (otherwise L""[0] and L'\0' would be 0U rather than 0, but the application would be unaware due to a mismatched definition for WCHAR_MIN and WCHAR_MAX, and Bad Things could happen with respect to signed/unsigned comparisons, promotions, etc.). fortunately no rules are imposed by the C standard on the relationship between wchar_t and wint_t, and WEOF has type wint_t, so we can still make wint_t always-signed and use -1 for WEOF.
2011-09-18cleanup more bits cruft (sysmacros and socket)Rich Felker2-206/+0
2011-09-18more bits junk (tcp.h)Rich Felker1-1/+0
2011-09-18move invariant netinet/in.h stuff out of bits/in.hRich Felker1-145/+0
2011-07-21socket headers macro adjustment - workaround for buggy programsRich Felker1-1/+1
some program was undefining AF_NETLINK and thereby breaking AF_ROUTE...