From c4a6d859943d9f35bad48b82530fae2ff3a323e7 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 4 Dec 2002 19:53:08 +0000 Subject: Update. 2002-12-04 Ulrich Drepper * argp/Makefile (tests): Add tst-argp1. --- ChangeLog | 4 ++ argp/Makefile | 4 +- argp/tst-argp1.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++ nptl/ChangeLog | 4 ++ nptl/Makefile | 4 +- nptl/tst-locale2.c | 13 ++++++ 6 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 argp/tst-argp1.c create mode 100644 nptl/tst-locale2.c diff --git a/ChangeLog b/ChangeLog index 7d49ce9800..cb00575a14 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2002-12-04 Ulrich Drepper + + * argp/Makefile (tests): Add tst-argp1. + 2002-12-04 Roland McGrath * sysdeps/generic/ldsodefs.h (struct rtld_global): Move all [USE_TLS] diff --git a/argp/Makefile b/argp/Makefile index e10220ef0d..e5291599e7 100644 --- a/argp/Makefile +++ b/argp/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1997 Free Software Foundation, Inc. +# Copyright (C) 1997, 2002 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -26,6 +26,6 @@ distribute = argp-fmtstream.h argp-namefrob.h routines = $(addprefix argp-, ba fmtstream fs-xinl help parse pv \ pvh xinl eexst) -tests = argp-test +tests = argp-test tst-argp1 include ../Rules diff --git a/argp/tst-argp1.c b/argp/tst-argp1.c new file mode 100644 index 0000000000..7f29ff2e7d --- /dev/null +++ b/argp/tst-argp1.c @@ -0,0 +1,115 @@ +/* Copyright (C) 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2002. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include + + + + +#define OPT_TO_THREAD 300 +#define OPT_TO_PROCESS 301 +#define OPT_SYNC_SIGNAL 302 +#define OPT_SYNC_JOIN 303 +#define OPT_TOPLEVEL 304 + + +static const struct argp_option options[] = + { + { NULL, 0, NULL, 0, "\ +This is a test for threads so we allow ther user to selection the number of \ +threads which are used at any one time. Independently the total number of \ +rounds can be selected. This is the total number of threads which will have \ +run when the process terminates:" }, + { "threads", 't', "NUMBER", 0, "Number of threads used at once" }, + { "starts", 's', "NUMBER", 0, "Total number of working threads" }, + { "toplevel", OPT_TOPLEVEL, "NUMBER", 0, + "Number of toplevel threads which start the other threads; this \ +implies --sync-join" }, + + { NULL, 0, NULL, 0, "\ +Each thread can do one of two things: sleep or do work. The latter is 100% \ +CPU bound. The work load is the probability a thread does work. All values \ +from zero to 100 (inclusive) are valid. How often each thread repeats this \ +can be determined by the number of rounds. The work cost determines how long \ +each work session (not sleeping) takes. If it is zero a thread would \ +effectively nothing. By setting the number of rounds to zero the thread \ +does no work at all and pure thread creation times can be measured." }, + { "workload", 'w', "PERCENT", 0, "Percentage of time spent working" }, + { "workcost", 'c', "NUMBER", 0, + "Factor in the cost of each round of working" }, + { "rounds", 'r', "NUMBER", 0, "Number of rounds each thread runs" }, + + { NULL, 0, NULL, 0, "\ +There are a number of different methods how thread creation can be \ +synchronized. Synchronization is necessary since the number of concurrently \ +running threads is limited." }, + { "sync-signal", OPT_SYNC_SIGNAL, NULL, 0, + "Synchronize using a signal (default)" }, + { "sync-join", OPT_SYNC_JOIN, NULL, 0, "Synchronize using pthread_join" }, + + { NULL, 0, NULL, 0, "\ +One parameter for each threads execution is the size of the stack. If this \ +parameter is not used the system's default stack size is used. If many \ +threads are used the stack size should be chosen quite small." }, + { "stacksize", 'S', "BYTES", 0, "Size of threads stack" }, + { "guardsize", 'g', "BYTES", 0, + "Size of stack guard area; must fit into the stack" }, + + { NULL, 0, NULL, 0, "Signal options:" }, + { "to-thread", OPT_TO_THREAD, NULL, 0, "Send signal to main thread" }, + { "to-process", OPT_TO_PROCESS, NULL, 0, + "Send signal to process (default)" }, + + { NULL, 0, NULL, 0, "Administrative options:" }, + { "progress", 'p', NULL, 0, "Show signs of progress" }, + { "timing", 'T', NULL, 0, + "Measure time from startup to the last thread finishing" }, + { NULL, 0, NULL, 0, NULL } + }; + +/* Prototype for option handler. */ +static error_t parse_opt (int key, char *arg, struct argp_state *state); + +/* Data structure to communicate with argp functions. */ +static struct argp argp = +{ + options, parse_opt +}; + + +int +main (void) +{ + int argc = 2; + char *argv[3] = { "tst-argp1", "--help", NULL }; + int remaining; + + /* Parse and process arguments. */ + argp_parse (&argp, argc, argv, 0, &remaining, NULL); + + return 0; +} + + +/* Handle program arguments. */ +static error_t +parse_opt (int key, char *arg, struct argp_state *state) +{ + return ARGP_ERR_UNKNOWN; +} diff --git a/nptl/ChangeLog b/nptl/ChangeLog index a6c5a2f35b..00a96f4b71 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,9 @@ 2002-12-04 Ulrich Drepper + * Makefile (tests): Add tst-locale2. + (tests-static): Likewise. + * tst-locale2.c: New file. + * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Mark asms as volatile and add memory clobbers to lock operations. diff --git a/nptl/Makefile b/nptl/Makefile index 777311a258..9393698f2d 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -134,7 +134,7 @@ tests = tst-mutex1 tst-mutex2 tst-mutex3 tst-mutex4 tst-mutex5 tst-mutex6 \ tst-stack1 \ tst-unload \ tst-sysconf \ - tst-locale1 + tst-locale1 tst-locale2 LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst @@ -156,7 +156,7 @@ CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions endif ifeq ($(build-static),yes) -tests-static += tst-locale1 +tests-static += tst-locale1 tst-locale2 endif include ../Rules diff --git a/nptl/tst-locale2.c b/nptl/tst-locale2.c new file mode 100644 index 0000000000..2c803e3ef0 --- /dev/null +++ b/nptl/tst-locale2.c @@ -0,0 +1,13 @@ +/* Test that the thread-local locale works right in the main thread + when statically linked. */ + +#include "../argp/tst-argp1.c" + +#include + +/* This is never called, just here to get pthreads linked in. */ +void +useless (void) +{ + pthread_create (0, 0, 0, 0); +} -- cgit 1.4.1