aboutsummaryrefslogtreecommitdiff
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2015-09-17new dlstart stage-2 chaining for or1kRich Felker1-0/+9
2015-09-17new dlstart stage-2 chaining for mipsRich Felker1-0/+15
2015-09-17new dlstart stage-2 chaining for microblazeRich Felker1-0/+7
2015-09-17introduce new symbol-lookup-free rcrt1/dlstart stage chainingRich Felker2-0/+13
previously, the call into stage 2 was made by looking up the symbol name "__dls2" (which was chosen short to be easy to look up) from the dynamic symbol table. this was no problem for the dynamic linker, since it always exports all its symbols. in the case of the static pie entry point, however, the dynamic symbol table does not contain the necessary symbol unless -rdynamic/-E was used when linking. this linking requirement is a major obstacle both to practical use of static-pie as a nommu binary format (since it greatly enlarges the file) and to upstream toolchain support for static-pie (adding -E to default linking specs is not reasonable). this patch replaces the runtime symbolic lookup with a link-time lookup via an inline asm fragment, which reloc.h is responsible for providing. in this initial commit, the asm is provided only for i386, and the old lookup code is left in place as a fallback for archs that have not yet transitioned. modifying crt_arch.h to pass the stage-2 function pointer as an argument was considered as an alternative, but such an approach would not be compatible with fdpic, where it's impossible to compute function pointers without already having performed relocations. it was also deemed desirable to keep crt_arch.h as simple/minimal as possible. in principle, archs with pc-relative or got-relative addressing of static variables could instead load the stage-2 function pointer from a static volatile object. that does not work for fdpic, and is not safe against reordering on mips-like archs that use got slots even for static functions, but it's a valid on i386 and many others, and could provide a reasonable default implementation in the future.
2015-09-17remove attribute((const)) from pthread_self and errno location declsRich Felker3-9/+0
this attribute was applied to pthread_self and the functions providing the locations for errno and h_errno as an optimization; however, it is subtly incorrect. as specified, it means the return value will always be the same, which is not true; it varies per-thread. this attribute also implies that the function does not depend on any state, and that calls to it can safely be reordered across any other code. however such reordering is unsafe for these functions: they break when reordered before initialization of the thread pointer. such breakage was actually observed when compiled by libfirm/cparser. to some extent the reordering problem could be solved with strong compiler barriers between the stages of early startup code, but the specified meaning of of attribute((const)) is sufficiently strong that a compiler would theoretically be justified inserting gratuitous calls to attribute((const)) const functions at random locations (e.g. to save the value in static storage for later use). this reverts commit cbf35978a9870fb1f5c73a852c986d4fcca6c2d4.
2015-09-15add format argument attributes to gettext function prototypesKhem Raj1-6/+14
their absence completely breaks format string warnings in programs with gettext message translations: -Wformat gives no results, and -Wformat-nonliteral produces spurious warnings. with gcc, the problem manifests only in standards-conforming profiles; otherwise gcc sets these attributes by default for the gettext family. with clang, the problem always manifests; clang has no such defaults.
2015-09-15reindent powerpc's bits/termios.h to be consistent with other archsFelix Janda1-140/+138
2015-09-15fix namespace violations in aarch64/bits/termios.hFelix Janda1-7/+7
in analogy with commit a627eb35864d5c29a3c3300dfe83745ab1e7a00f
2015-09-12add sh fdpic subarch variantsRich Felker2-1/+20
with this commit it should be possible to produce a working static-linked fdpic libc and application binaries for sh. the changes in reloc.h are largely unused at this point since dynamic linking is not supported, but the CRTJMP macro is used one place outside of dynamic linking, in __unmapself.
2015-09-12add fdpic version of entry point code for shRich Felker1-0/+29
this version of the entry point is only suitable for static linking in ET_EXEC form. neither dynamic linking nor pie is supported yet. at some point in the future the fdpic and non-fdpic versions of this code may be unified but for now it's easiest to work with them separately.