Age | Commit message (Collapse) | Author |
|
The vfork() wrapper defined in libpthread, that's used to run
pthread_atfork()-registered handlers, is not only a very bad idea,
it's broken and useless. Here's the rationale:
[---------snip----------]
Since the implementation as it stands is broken (linking a program
that vfork()s and exec()s on the child and wait()s on the parent works
unless you happen to link with libpthread), and I can't think of
any workable solution, I suggest that we simply remove the vfork()
overrider in the non-MMU case. Yes, we might lose some small amount
of functionality here, but it's not like people running uClinux expect
anything resembling actual fork() to work.
|
|
|
|
This patch adds code to uClibc to support a new ABI designed for the
FR-V architecture, that enables text segments of executables and
shared libraries to be shared by multiple processes on an OS such as
uClinux, that can run on FR-V processors without an MMU.
Patches for binutils and GCC have just been posted in the
corresponding mailing lists. The binutils patch was approved,
but there's one additional patch pending review, that I posted
this week. An updated GCC patch will be posted to
gcc-patches@gcc.gnu.org as soon as I complete testing (I used a
known-good compiler to test the uClibc patch below).
Since the existing dynamic loader code didn't support independent
relocation of segments, it required changes that were somewhat
extensive. I've added a number of new machine-specific macros to try
to keep the platform and ABI-specific details outside the generic
code. I hope this is not a problem.
|
|
Codepaths streamlined. Improved performance for nonthreaded apps
when linked with a thread-enabled libc.
Minor iconv bug and some locale/thread related startup issues fixed.
These showed up in getting a gcj-compiled java helloworld app running.
Removed some old extension functions... _stdio_fdout and _stdio_fsfopen.
|
|
|
|
|
|
were including libc-lock.h which had a bunch of weak pragmas. Also,
uClibc supplied a number of no-op weak thread functions even though
many weren't needed. This combined result was that sometimes the
functional versions of thread functions in pthread would not override
the weaks in libc.
While fixing this, I also prepended double-underscore to all necessary
weak thread funcs in uClibc, and removed all unused weaks.
I did a test build, but haven't tested this since these changes are
a backport from my working tree. I did test the changes there and
no longer need to explicitly add -lpthread in the perl build for
perl to pass its thread self tests.
|
|
This patch adds the libpthread backend bits for sh64. As noted previously,
we can't inline things like the testandset() in pt-machine.h as we need to
use a completely different ISA / CFLAGS in order for this to work.
As a result, this patch is somewhat of a RFC as well to see what people think
of the libpthread/linuxthreads/sysdeps Makefile approach, etc. The approach
I've taken currently has been to provide a sysdeps/Makefile with a note that
TARGET_ARCHs that want build rules can simply add themselves into the list of
matching architectures to add to the subdir rule for. This probably isn't
the cleanest solution, but it's quite transparent and works quite well.
|
|
I've noticed a few people have posted over the last year about problems
compiling programs that use vfork when pthreads are involved. Some
detective work turned up that ptfork.c aliases vfork to fork and then tries
to call the original fork as __libc_fork. This patch removes the aliasing
when there is no MMU present, and uses the same call semantics to call
__libc_vfork. I then added a symbol to the m68k vfork.S to allow vfork to
be called as __libc_vfork.
The same bug exists in the uClibc CVS, and with a possible tweak this patch
should go through there as well.
Obviously, all other platforms need __libc_vfork as a workable means to call
vfork in order for this to work for them.
Let me know if there are any problems with this patch.
Art Shipkowski
Videon Central Software Engineer
(814)235-1111 x307
|
|
rm.patch:
* Define $(RM) as rm -f in Rules.mak and test/Rules.mak
(this is the same definition as gmake uses by default).
* Change all occurrences of rm and rm -f into $(RM).
|
|
debug versions of uClibc with -O0, but libpthread/linuxthreads/spinlock.c
will not compile without at least -O1 optimization...
|
|
Should be standards compliant and with several optional features,
including support for hexadecimal float notation, locale awareness,
glibc-like locale-specific digit grouping with the `'' flag, and
positional arg support. I tested it pretty well (finding several
bugs in glibc's scanf in the process), but it is brand new so be
aware.
The *wprintf functions now support floating point output. Also, a
couple of bugs were squashed. Finally, %a/%A conversions are
now implemented.
Implement the glibc xlocale interface for thread-specific locale
support. Also add the various *_l(args, locale_t loc_arg) funcs.
NOTE!!! setlocale() is NOT threadsafe! NOTE!!!
The strto{floating point} conversion functions are now locale aware.
The also now support hexadecimal floating point notation.
Add the wcsto{floating point} conversion functions.
Fix a bug in mktime() related to dst. Note that unlike glibc's mktime,
uClibc's version always normalizes the struct tm before attempting
to determine the correct dst setting if tm_isdst == -1 on entry.
Add a stub version of the libintl functions. (untested)
Fixed a known memory leak in setlocale() related to the collation data.
Add lots of new config options (which Erik agreed to sort out :-),
including finally exposing some of the stripped down stdio configs.
Be careful with those though, as they haven't been tested in a
long time.
(temporary) GOTCHAs...
The ctype functions are currently incorrect for 8-bit locales. They
will be fixed shortly.
The ctype functions are now table-based, resulting in larger staticly
linked binaries. I'll be adding an option to use the old approach
in the stub locale configuration.
|
|
do -O0 by default anyways, so leave this disabled for now.
|
|
a local override changing -O0 to -O1 only for that directory.
|
|
|
|
-Erik
|
|
from converting "PIC" to "__PIC__"
|
|
should instead have been testing for '#ifdef __PIC__'. This resulted in
NON-PIC code getting mixed into the shared library. Oops!!!
-Erik
|
|
|
|
-Erik
|
|
|
|
from glibc 2.3 that is needed for pthreads to compile for SuperH.
|
|
|
|
front.
|
|
from dlopen()'ing glibc's libthread_db library...
|
|
|
|
|
|
from glibc 2.3. This should make threads much more efficient.
-Erik
|
|
|
|
I found a problem in uClibc in libpthread/linuxthres/condvar.c:
pthread_cond_timedwait never uses rt singals
uClibc has two implementations of pthread_cond_timewait -
pthread_cond_timedwait_relative_old using the "normal" signals and
pthread_cond_timedwait_relative_new usign the rt signals
(for kernels >= 2.2).
The function pointer pthread_cond_tw_rel is initialised with the old
function. In "__pthread_init_condvar(int)" this pointer is set to the new
function using rt signals, but "__pthread_init_condvar" is never called in
the uClibc.
The following patch solves this issue, so that __pthread_init_condvars
is called and the function pointer is always initialised with the correct
function.
regards,
christian
|
|
|
|
and in the files where variables live.
|
|
function. Without this fix, pthread_mutex_lock/pthread_mutex_unlock don't work
on mips.
|
|
locks before calling clone when under a debugger, and unlocks on success or
failure of clone when under a debugger.
|
|
needed to make gdb happy when debugging threadded apps.
|
|
and run. Seems to be working...
-Erik
|
|
been working on a new config system on and off for about 6 months
now, but I've never been fully satisfied. Well, I'm finally am
happy with the new config system, so here it is. This completely
removes the old uClibc configuration system, and replaces it with
an entirely new system based on LinuxKernelConf, from
http://www.xs4all.nl/~zippel/lc/
As it turns out, Linus has just merged LinuxKernelConf into Linux
2.5.45, so it looks like I made the right choice.
I have thus far updated only x86. I'll be updating the other
architectures shortly.
-Erik
|
|
Attached are the changes we think is necessary in order to use user
defined stacksizes for each thread. When testing I forgot to lower the
PTHREAD_STACK_MIN to the lowest value used for the stacks, this caused
stranged reboots.
As said before, we are using uClinux 2.0.38 on a ARM7TDMI.
|
|
uClibc's libpthread to run on linux 2.0.x kernels which lack
poll() and therefore must use select() instead.
|
|
a few spots in our header files. In this change I do a
s/__thread/__thread_id/
so we no longer conflict with newer CVS versions of gcc (such as the
patched up gcc 3.2 included with RedHat 3.0).
-Erik
|
|
|
|
|
|
we hose our code... hose our code... hose our code... this is the way we hose
our code... all thanks to glibc"
-Erik
|
|
things to happen. This makes it explicit, so pthread using apps are no longer
broken...
-Erik
|
|
|
|
pthread stuff. Also, don't bother building libthread_db unless we
are debugging.
-Erik
|
|
if this is serious enough to warrent 0.9.14?
-Erik
|
|
In linuxthreads/errno.h the functions __errno_location and
__h_errno_location wasn't safe against calling before the
library is initialized.
|
|
related to thread local storage.
-Erik
|
|
|