uclibc: Add recipes for 0.9.32 release
(From OE-Core rev: 99dcbc151676f9488e00374ef525f72854b9d459) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
d099a9e751
commit
db8a763479
|
@ -0,0 +1,29 @@
|
|||
From 06cdcd2a9dd6b46b7fbb5b3ae0a62bdb7ee6c402 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 27 Jun 2011 17:48:18 -0700
|
||||
Subject: [PATCH] Config.in.arch: Free UCLIBC_HAS_FPU setting from depending on UCLIBC_HAS_FLOATS
|
||||
|
||||
UCLIBC_HAS_FLOATS and UCLIBC_HAS_FPU are denoting two different aspects.
|
||||
UCLIBC_HAS_FLOATS covers the floating point operations which has nothing
|
||||
to do if you have FPU or not.
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
extra/Configs/Config.in.arch | 1 -
|
||||
1 files changed, 0 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/extra/Configs/Config.in.arch b/extra/Configs/Config.in.arch
|
||||
index 5f7a2b0..c1ca390 100644
|
||||
--- a/extra/Configs/Config.in.arch
|
||||
+++ b/extra/Configs/Config.in.arch
|
||||
@@ -133,7 +133,6 @@ config UCLIBC_HAS_FLOATS
|
||||
|
||||
config UCLIBC_HAS_FPU
|
||||
bool "Target CPU has a floating point unit (FPU)"
|
||||
- depends on UCLIBC_HAS_FLOATS
|
||||
default y
|
||||
help
|
||||
If your target CPU does not have a Floating Point Unit (FPU) or a
|
||||
--
|
||||
1.7.0.4
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From ecc7d34cbbaf83aae87b091555650ed33e27ed2e Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Thu, 30 Jun 2011 00:32:11 -0700
|
||||
Subject: [PATCH] mips/signalfd.h: SFD_NONBLOCK for mips is 0200 unlike 04000 commonly
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
include/sys/signalfd.h | 9 +++++++++
|
||||
1 files changed, 9 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/include/sys/signalfd.h b/include/sys/signalfd.h
|
||||
index 8cee17c..f1cb63a 100644
|
||||
--- a/include/sys/signalfd.h
|
||||
+++ b/include/sys/signalfd.h
|
||||
@@ -64,6 +64,15 @@ enum
|
||||
# define SFD_NONBLOCK SFD_NONBLOCK
|
||||
};
|
||||
|
||||
+#elif defined __mips__
|
||||
+enum
|
||||
+ {
|
||||
+ SFD_CLOEXEC = 02000000,
|
||||
+# define SFD_CLOEXEC SFD_CLOEXEC
|
||||
+ SFD_NONBLOCK = 0200
|
||||
+# define SFD_NONBLOCK SFD_NONBLOCK
|
||||
+ };
|
||||
+
|
||||
#else
|
||||
enum
|
||||
{
|
||||
--
|
||||
1.7.0.4
|
||||
|
|
@ -0,0 +1,581 @@
|
|||
Added headers file needed by argp sources.
|
||||
|
||||
Signed-off-by: Salvatore Cro <salvatore.cro at st.com>
|
||||
---
|
||||
include/argp.h | 566 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
libc/argp/argp-fmtstream.h | 314 ++++++++++++++++++++++++
|
||||
2 files changed, 880 insertions(+), 0 deletions(-)
|
||||
create mode 100644 include/argp.h
|
||||
create mode 100644 libc/argp/argp-fmtstream.h
|
||||
|
||||
Index: git/include/argp.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ git/include/argp.h
|
||||
@@ -0,0 +1,566 @@
|
||||
+/* Hierarchial argument parsing, layered over getopt.
|
||||
+ Copyright (C) 1995-1999, 2003, 2004, 2005, 2006, 2007, 2009
|
||||
+ Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+ Written by Miles Bader <miles at gnu.ai.mit.edu>.
|
||||
+
|
||||
+ 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.
|
||||
+
|
||||
+ Modified for uClibc by: Salvatore Cro <salvatore.cro at st.com>
|
||||
+*/
|
||||
+
|
||||
+#ifndef _ARGP_H
|
||||
+#define _ARGP_H
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <ctype.h>
|
||||
+#include <limits.h>
|
||||
+
|
||||
+#define __need_error_t
|
||||
+#include <errno.h>
|
||||
+
|
||||
+#ifndef __const
|
||||
+# define __const const
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __THROW
|
||||
+# define __THROW
|
||||
+#endif
|
||||
+#ifndef __NTH
|
||||
+# define __NTH(fct) fct __THROW
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __attribute__
|
||||
+/* This feature is available in gcc versions 2.5 and later. */
|
||||
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__STRICT_ANSI__)
|
||||
+# define __attribute__(Spec) /* empty */
|
||||
+# endif
|
||||
+/* The __-protected variants of `format' and `printf' attributes
|
||||
+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
|
||||
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || defined(__STRICT_ANSI__)
|
||||
+# define __format__ format
|
||||
+# define __printf__ printf
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
|
||||
+ "restrict", and "configure" may have defined "restrict". */
|
||||
+#ifndef __restrict
|
||||
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
|
||||
+# if defined restrict || 199901L <= __STDC_VERSION__
|
||||
+# define __restrict restrict
|
||||
+# else
|
||||
+# define __restrict
|
||||
+# endif
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+#ifndef __error_t_defined
|
||||
+typedef int error_t;
|
||||
+# define __error_t_defined
|
||||
+#endif
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+/* A description of a particular option. A pointer to an array of
|
||||
+ these is passed in the OPTIONS field of an argp structure. Each option
|
||||
+ entry can correspond to one long option and/or one short option; more
|
||||
+ names for the same option can be added by following an entry in an option
|
||||
+ array with options having the OPTION_ALIAS flag set. */
|
||||
+struct argp_option
|
||||
+{
|
||||
+ /* The long option name. For more than one name for the same option, you
|
||||
+ can use following options with the OPTION_ALIAS flag set. */
|
||||
+ __const char *name;
|
||||
+
|
||||
+ /* What key is returned for this option. If > 0 and printable, then it's
|
||||
+ also accepted as a short option. */
|
||||
+ int key;
|
||||
+
|
||||
+ /* If non-NULL, this is the name of the argument associated with this
|
||||
+ option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
|
||||
+ __const char *arg;
|
||||
+
|
||||
+ /* OPTION_ flags. */
|
||||
+ int flags;
|
||||
+
|
||||
+ /* The doc string for this option. If both NAME and KEY are 0, This string
|
||||
+ will be printed outdented from the normal option column, making it
|
||||
+ useful as a group header (it will be the first thing printed in its
|
||||
+ group); in this usage, it's conventional to end the string with a `:'. */
|
||||
+ __const char *doc;
|
||||
+
|
||||
+ /* The group this option is in. In a long help message, options are sorted
|
||||
+ alphabetically within each group, and the groups presented in the order
|
||||
+ 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with
|
||||
+ if this field 0 will inherit the group number of the previous entry, or
|
||||
+ zero if it's the first one, unless its a group header (NAME and KEY both
|
||||
+ 0), in which case, the previous entry + 1 is the default. Automagic
|
||||
+ options such as --help are put into group -1. */
|
||||
+ int group;
|
||||
+};
|
||||
+
|
||||
+/* The argument associated with this option is optional. */
|
||||
+#define OPTION_ARG_OPTIONAL 0x1
|
||||
+
|
||||
+/* This option isn't displayed in any help messages. */
|
||||
+#define OPTION_HIDDEN 0x2
|
||||
+
|
||||
+/* This option is an alias for the closest previous non-alias option. This
|
||||
+ means that it will be displayed in the same help entry, and will inherit
|
||||
+ fields other than NAME and KEY from the aliased option. */
|
||||
+#define OPTION_ALIAS 0x4
|
||||
+
|
||||
+/* This option isn't actually an option (and so should be ignored by the
|
||||
+ actual option parser), but rather an arbitrary piece of documentation that
|
||||
+ should be displayed in much the same manner as the options. If this flag
|
||||
+ is set, then the option NAME field is displayed unmodified (e.g., no `--'
|
||||
+ prefix is added) at the left-margin (where a *short* option would normally
|
||||
+ be displayed), and the documentation string in the normal place. For
|
||||
+ purposes of sorting, any leading whitespace and punctuation is ignored,
|
||||
+ except that if the first non-whitespace character is not `-', this entry
|
||||
+ is displayed after all options (and OPTION_DOC entries with a leading `-')
|
||||
+ in the same group. */
|
||||
+#define OPTION_DOC 0x8
|
||||
+
|
||||
+/* This option shouldn't be included in `long' usage messages (but is still
|
||||
+ included in help messages). This is mainly intended for options that are
|
||||
+ completely documented in an argp's ARGS_DOC field, in which case including
|
||||
+ the option in the generic usage list would be redundant. For instance,
|
||||
+ if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
|
||||
+ distinguish these two cases, -x should probably be marked
|
||||
+ OPTION_NO_USAGE. */
|
||||
+#define OPTION_NO_USAGE 0x10
|
||||
+
|
||||
+struct argp; /* fwd declare this type */
|
||||
+struct argp_state; /* " */
|
||||
+struct argp_child; /* " */
|
||||
+
|
||||
+/* The type of a pointer to an argp parsing function. */
|
||||
+typedef error_t (*argp_parser_t) (int __key, char *__arg,
|
||||
+ struct argp_state *__state);
|
||||
+
|
||||
+/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such
|
||||
+ returns will simply be ignored. For user keys, this error will be turned
|
||||
+ into EINVAL (if the call to argp_parse is such that errors are propagated
|
||||
+ back to the user instead of exiting); returning EINVAL itself would result
|
||||
+ in an immediate stop to parsing in *all* cases. */
|
||||
+#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */
|
||||
+
|
||||
+/* Special values for the KEY argument to an argument parsing function.
|
||||
+ ARGP_ERR_UNKNOWN should be returned if they aren't understood.
|
||||
+
|
||||
+ The sequence of keys to a parsing function is either (where each
|
||||
+ uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
|
||||
+
|
||||
+ INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all
|
||||
+ or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed
|
||||
+ or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized
|
||||
+
|
||||
+ The third case is where every parser returned ARGP_KEY_UNKNOWN for an
|
||||
+ argument, in which case parsing stops at that argument (returning the
|
||||
+ unparsed arguments to the caller of argp_parse if requested, or stopping
|
||||
+ with an error message if not).
|
||||
+
|
||||
+ If an error occurs (either detected by argp, or because the parsing
|
||||
+ function returned an error value), then the parser is called with
|
||||
+ ARGP_KEY_ERROR, and no further calls are made. */
|
||||
+
|
||||
+/* This is not an option at all, but rather a command line argument. If a
|
||||
+ parser receiving this key returns success, the fact is recorded, and the
|
||||
+ ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the
|
||||
+ argument, a parser function decrements the NEXT field of the state it's
|
||||
+ passed, the option won't be considered processed; this is to allow you to
|
||||
+ actually modify the argument (perhaps into an option), and have it
|
||||
+ processed again. */
|
||||
+#define ARGP_KEY_ARG 0
|
||||
+/* There are remaining arguments not parsed by any parser, which may be found
|
||||
+ starting at (STATE->argv + STATE->next). If success is returned, but
|
||||
+ STATE->next left untouched, it's assumed that all arguments were consume,
|
||||
+ otherwise, the parser should adjust STATE->next to reflect any arguments
|
||||
+ consumed. */
|
||||
+#define ARGP_KEY_ARGS 0x1000006
|
||||
+/* There are no more command line arguments at all. */
|
||||
+#define ARGP_KEY_END 0x1000001
|
||||
+/* Because it's common to want to do some special processing if there aren't
|
||||
+ any non-option args, user parsers are called with this key if they didn't
|
||||
+ successfully process any non-option arguments. Called just before
|
||||
+ ARGP_KEY_END (where more general validity checks on previously parsed
|
||||
+ arguments can take place). */
|
||||
+#define ARGP_KEY_NO_ARGS 0x1000002
|
||||
+/* Passed in before any parsing is done. Afterwards, the values of each
|
||||
+ element of the CHILD_INPUT field, if any, in the state structure is
|
||||
+ copied to each child's state to be the initial value of the INPUT field. */
|
||||
+#define ARGP_KEY_INIT 0x1000003
|
||||
+/* Use after all other keys, including SUCCESS & END. */
|
||||
+#define ARGP_KEY_FINI 0x1000007
|
||||
+/* Passed in when parsing has successfully been completed (even if there are
|
||||
+ still arguments remaining). */
|
||||
+#define ARGP_KEY_SUCCESS 0x1000004
|
||||
+/* Passed in if an error occurs. */
|
||||
+#define ARGP_KEY_ERROR 0x1000005
|
||||
+
|
||||
+/* An argp structure contains a set of options declarations, a function to
|
||||
+ deal with parsing one, documentation string, a possible vector of child
|
||||
+ argp's, and perhaps a function to filter help output. When actually
|
||||
+ parsing options, getopt is called with the union of all the argp
|
||||
+ structures chained together through their CHILD pointers, with conflicts
|
||||
+ being resolved in favor of the first occurrence in the chain. */
|
||||
+struct argp
|
||||
+{
|
||||
+ /* An array of argp_option structures, terminated by an entry with both
|
||||
+ NAME and KEY having a value of 0. */
|
||||
+ __const struct argp_option *options;
|
||||
+
|
||||
+ /* What to do with an option from this structure. KEY is the key
|
||||
+ associated with the option, and ARG is any associated argument (NULL if
|
||||
+ none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be
|
||||
+ returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
|
||||
+ parsing is stopped immediately, and that value is returned from
|
||||
+ argp_parse(). For special (non-user-supplied) values of KEY, see the
|
||||
+ ARGP_KEY_ definitions below. */
|
||||
+ argp_parser_t parser;
|
||||
+
|
||||
+ /* A string describing what other arguments are wanted by this program. It
|
||||
+ is only used by argp_usage to print the `Usage:' message. If it
|
||||
+ contains newlines, the strings separated by them are considered
|
||||
+ alternative usage patterns, and printed on separate lines (lines after
|
||||
+ the first are prefix by ` or: ' instead of `Usage:'). */
|
||||
+ __const char *args_doc;
|
||||
+
|
||||
+ /* If non-NULL, a string containing extra text to be printed before and
|
||||
+ after the options in a long help message (separated by a vertical tab
|
||||
+ `\v' character). */
|
||||
+ __const char *doc;
|
||||
+
|
||||
+ /* A vector of argp_children structures, terminated by a member with a 0
|
||||
+ argp field, pointing to child argps should be parsed with this one. Any
|
||||
+ conflicts are resolved in favor of this argp, or early argps in the
|
||||
+ CHILDREN list. This field is useful if you use libraries that supply
|
||||
+ their own argp structure, which you want to use in conjunction with your
|
||||
+ own. */
|
||||
+ __const struct argp_child *children;
|
||||
+
|
||||
+ /* If non-zero, this should be a function to filter the output of help
|
||||
+ messages. KEY is either a key from an option, in which case TEXT is
|
||||
+ that option's help text, or a special key from the ARGP_KEY_HELP_
|
||||
+ defines, below, describing which other help text TEXT is. The function
|
||||
+ should return either TEXT, if it should be used as-is, a replacement
|
||||
+ string, which should be malloced, and will be freed by argp, or NULL,
|
||||
+ meaning `print nothing'. The value for TEXT is *after* any translation
|
||||
+ has been done, so if any of the replacement text also needs translation,
|
||||
+ that should be done by the filter function. INPUT is either the input
|
||||
+ supplied to argp_parse, or NULL, if argp_help was called directly. */
|
||||
+ char *(*help_filter) (int __key, __const char *__text, void *__input);
|
||||
+
|
||||
+ /* If non-zero the strings used in the argp library are translated using
|
||||
+ the domain described by this string. Otherwise the currently installed
|
||||
+ default domain is used. */
|
||||
+ const char *argp_domain;
|
||||
+};
|
||||
+
|
||||
+/* Possible KEY arguments to a help filter function. */
|
||||
+#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceeding options. */
|
||||
+#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */
|
||||
+#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */
|
||||
+#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation;
|
||||
+ TEXT is NULL for this key. */
|
||||
+/* Explanatory note emitted when duplicate option arguments have been
|
||||
+ suppressed. */
|
||||
+#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
|
||||
+#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */
|
||||
+
|
||||
+/* When an argp has a non-zero CHILDREN field, it should point to a vector of
|
||||
+ argp_child structures, each of which describes a subsidiary argp. */
|
||||
+struct argp_child
|
||||
+{
|
||||
+ /* The child parser. */
|
||||
+ __const struct argp *argp;
|
||||
+
|
||||
+ /* Flags for this child. */
|
||||
+ int flags;
|
||||
+
|
||||
+ /* If non-zero, an optional header to be printed in help output before the
|
||||
+ child options. As a side-effect, a non-zero value forces the child
|
||||
+ options to be grouped together; to achieve this effect without actually
|
||||
+ printing a header string, use a value of "". */
|
||||
+ __const char *header;
|
||||
+
|
||||
+ /* Where to group the child options relative to the other (`consolidated')
|
||||
+ options in the parent argp; the values are the same as the GROUP field
|
||||
+ in argp_option structs, but all child-groupings follow parent options at
|
||||
+ a particular group level. If both this field and HEADER are zero, then
|
||||
+ they aren't grouped at all, but rather merged with the parent options
|
||||
+ (merging the child's grouping levels with the parents). */
|
||||
+ int group;
|
||||
+};
|
||||
+
|
||||
+/* Parsing state. This is provided to parsing functions called by argp,
|
||||
+ which may examine and, as noted, modify fields. */
|
||||
+struct argp_state
|
||||
+{
|
||||
+ /* The top level ARGP being parsed. */
|
||||
+ __const struct argp *root_argp;
|
||||
+
|
||||
+ /* The argument vector being parsed. May be modified. */
|
||||
+ int argc;
|
||||
+ char **argv;
|
||||
+
|
||||
+ /* The index in ARGV of the next arg that to be parsed. May be modified. */
|
||||
+ int next;
|
||||
+
|
||||
+ /* The flags supplied to argp_parse. May be modified. */
|
||||
+ unsigned flags;
|
||||
+
|
||||
+ /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
|
||||
+ number of the current arg, starting at zero, and incremented after each
|
||||
+ such call returns. At all other times, this is the number of such
|
||||
+ arguments that have been processed. */
|
||||
+ unsigned arg_num;
|
||||
+
|
||||
+ /* If non-zero, the index in ARGV of the first argument following a special
|
||||
+ `--' argument (which prevents anything following being interpreted as an
|
||||
+ option). Only set once argument parsing has proceeded past this point. */
|
||||
+ int quoted;
|
||||
+
|
||||
+ /* An arbitrary pointer passed in from the user. */
|
||||
+ void *input;
|
||||
+ /* Values to pass to child parsers. This vector will be the same length as
|
||||
+ the number of children for the current parser. */
|
||||
+ void **child_inputs;
|
||||
+
|
||||
+ /* For the parser's use. Initialized to 0. */
|
||||
+ void *hook;
|
||||
+
|
||||
+ /* The name used when printing messages. This is initialized to ARGV[0],
|
||||
+ or PROGRAM_INVOCATION_NAME if that is unavailable. */
|
||||
+ char *name;
|
||||
+
|
||||
+ /* Streams used when argp prints something. */
|
||||
+ FILE *err_stream; /* For errors; initialized to stderr. */
|
||||
+ FILE *out_stream; /* For information; initialized to stdout. */
|
||||
+
|
||||
+ void *pstate; /* Private, for use by argp. */
|
||||
+};
|
||||
+
|
||||
+/* Flags for argp_parse (note that the defaults are those that are
|
||||
+ convenient for program command line parsing): */
|
||||
+
|
||||
+/* Don't ignore the first element of ARGV. Normally (and always unless
|
||||
+ ARGP_NO_ERRS is set) the first element of the argument vector is
|
||||
+ skipped for option parsing purposes, as it corresponds to the program name
|
||||
+ in a command line. */
|
||||
+#define ARGP_PARSE_ARGV0 0x01
|
||||
+
|
||||
+/* Don't print error messages for unknown options to stderr; unless this flag
|
||||
+ is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
|
||||
+ name in the error messages. This flag implies ARGP_NO_EXIT (on the
|
||||
+ assumption that silent exiting upon errors is bad behaviour). */
|
||||
+#define ARGP_NO_ERRS 0x02
|
||||
+
|
||||
+/* Don't parse any non-option args. Normally non-option args are parsed by
|
||||
+ calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
|
||||
+ as the value. Since it's impossible to know which parse function wants to
|
||||
+ handle it, each one is called in turn, until one returns 0 or an error
|
||||
+ other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
|
||||
+ argp_parse returns prematurely (but with a return value of 0). If all
|
||||
+ args have been parsed without error, all parsing functions are called one
|
||||
+ last time with a key of ARGP_KEY_END. This flag needn't normally be set,
|
||||
+ as the normal behavior is to stop parsing as soon as some argument can't
|
||||
+ be handled. */
|
||||
+#define ARGP_NO_ARGS 0x04
|
||||
+
|
||||
+/* Parse options and arguments in the same order they occur on the command
|
||||
+ line -- normally they're rearranged so that all options come first. */
|
||||
+#define ARGP_IN_ORDER 0x08
|
||||
+
|
||||
+/* Don't provide the standard long option --help, which causes usage and
|
||||
+ option help information to be output to stdout, and exit (0) called. */
|
||||
+#define ARGP_NO_HELP 0x10
|
||||
+
|
||||
+/* Don't exit on errors (they may still result in error messages). */
|
||||
+#define ARGP_NO_EXIT 0x20
|
||||
+
|
||||
+/* Use the gnu getopt `long-only' rules for parsing arguments. */
|
||||
+#define ARGP_LONG_ONLY 0x40
|
||||
+
|
||||
+/* Turns off any message-printing/exiting options. */
|
||||
+#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
|
||||
+
|
||||
+/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
|
||||
+ FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the
|
||||
+ index in ARGV of the first unparsed option is returned in it. If an
|
||||
+ unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
|
||||
+ routine returned a non-zero value, it is returned; otherwise 0 is
|
||||
+ returned. This function may also call exit unless the ARGP_NO_HELP flag
|
||||
+ is set. INPUT is a pointer to a value to be passed in to the parser. */
|
||||
+extern error_t argp_parse (__const struct argp *__restrict __argp,
|
||||
+ int __argc, char **__restrict __argv,
|
||||
+ unsigned __flags, int *__restrict __arg_index,
|
||||
+ void *__restrict __input);
|
||||
+
|
||||
+/* Global variables. */
|
||||
+
|
||||
+/* If defined or set by the user program to a non-zero value, then a default
|
||||
+ option --version is added (unless the ARGP_NO_HELP flag is used), which
|
||||
+ will print this string followed by a newline and exit (unless the
|
||||
+ ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */
|
||||
+extern __const char *argp_program_version;
|
||||
+
|
||||
+/* If defined or set by the user program to a non-zero value, then a default
|
||||
+ option --version is added (unless the ARGP_NO_HELP flag is used), which
|
||||
+ calls this function with a stream to print the version to and a pointer to
|
||||
+ the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
|
||||
+ used). This variable takes precedent over ARGP_PROGRAM_VERSION. */
|
||||
+extern void (*argp_program_version_hook) (FILE *__restrict __stream,
|
||||
+ struct argp_state *__restrict
|
||||
+ __state);
|
||||
+
|
||||
+/* If defined or set by the user program, it should point to string that is
|
||||
+ the bug-reporting address for the program. It will be printed by
|
||||
+ argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
|
||||
+ standard help messages), embedded in a sentence that says something like
|
||||
+ `Report bugs to ADDR.'. */
|
||||
+extern __const char *argp_program_bug_address;
|
||||
+
|
||||
+/* The exit status that argp will use when exiting due to a parsing error.
|
||||
+ If not defined or set by the user program, this defaults to EX_USAGE from
|
||||
+ <sysexits.h>. */
|
||||
+extern error_t argp_err_exit_status;
|
||||
+
|
||||
+/* Flags for argp_help. */
|
||||
+#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */
|
||||
+#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */
|
||||
+#define ARGP_HELP_SEE 0x04 /* a `Try ... for more help' message. */
|
||||
+#define ARGP_HELP_LONG 0x08 /* a long help message. */
|
||||
+#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */
|
||||
+#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */
|
||||
+#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
|
||||
+#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */
|
||||
+#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to
|
||||
+ reflect ARGP_LONG_ONLY mode. */
|
||||
+
|
||||
+/* These ARGP_HELP flags are only understood by argp_state_help. */
|
||||
+#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */
|
||||
+#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */
|
||||
+
|
||||
+/* The standard thing to do after a program command line parsing error, if an
|
||||
+ error message has already been printed. */
|
||||
+#define ARGP_HELP_STD_ERR \
|
||||
+ (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
|
||||
+/* The standard thing to do after a program command line parsing error, if no
|
||||
+ more specific error message has been printed. */
|
||||
+#define ARGP_HELP_STD_USAGE \
|
||||
+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
|
||||
+/* The standard thing to do in response to a --help option. */
|
||||
+#define ARGP_HELP_STD_HELP \
|
||||
+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
|
||||
+ | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
|
||||
+
|
||||
+/* Output a usage message for ARGP to STREAM. FLAGS are from the set
|
||||
+ ARGP_HELP_*. */
|
||||
+extern void argp_help (__const struct argp *__restrict __argp,
|
||||
+ FILE *__restrict __stream,
|
||||
+ unsigned __flags, char *__restrict __name);
|
||||
+
|
||||
+/* The following routines are intended to be called from within an argp
|
||||
+ parsing routine (thus taking an argp_state structure as the first
|
||||
+ argument). They may or may not print an error message and exit, depending
|
||||
+ on the flags in STATE -- in any case, the caller should be prepared for
|
||||
+ them *not* to exit, and should return an appropiate error after calling
|
||||
+ them. [argp_usage & argp_error should probably be called argp_state_...,
|
||||
+ but they're used often enough that they should be short] */
|
||||
+
|
||||
+/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are
|
||||
+ from the set ARGP_HELP_*. */
|
||||
+extern void argp_state_help (__const struct argp_state *__restrict __state,
|
||||
+ FILE *__restrict __stream,
|
||||
+ unsigned int __flags);
|
||||
+/* Possibly output the standard usage message for ARGP to stderr and exit. */
|
||||
+extern void argp_usage (__const struct argp_state *__state);
|
||||
+
|
||||
+/* If appropriate, print the printf string FMT and following args, preceded
|
||||
+ by the program name and `:', to stderr, and followed by a `Try ... --help'
|
||||
+ message, then exit (1). */
|
||||
+extern void argp_error (__const struct argp_state *__restrict __state,
|
||||
+ __const char *__restrict __fmt, ...)
|
||||
+ __attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
+/* Similar to the standard gnu error-reporting function error(), but will
|
||||
+ respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
|
||||
+ to STATE->err_stream. This is useful for argument parsing code that is
|
||||
+ shared between program startup (when exiting is desired) and runtime
|
||||
+ option parsing (when typically an error code is returned instead). The
|
||||
+ difference between this function and argp_error is that the latter is for
|
||||
+ *parsing errors*, and the former is for other problems that occur during
|
||||
+ parsing but don't reflect a (syntactic) problem with the input. */
|
||||
+extern void argp_failure (__const struct argp_state *__restrict __state,
|
||||
+ int __status, int __errnum,
|
||||
+ __const char *__restrict __fmt, ...)
|
||||
+ __attribute__ ((__format__ (__printf__, 4, 5)));
|
||||
+/* Returns true if the option OPT is a valid short option. */
|
||||
+extern int _option_is_short (__const struct argp_option *__opt) __THROW;
|
||||
+extern int __option_is_short (__const struct argp_option *__opt) __THROW;
|
||||
+
|
||||
+/* Returns true if the option OPT is in fact the last (unused) entry in an
|
||||
+ options array. */
|
||||
+extern int _option_is_end (__const struct argp_option *__opt) __THROW;
|
||||
+extern int __option_is_end (__const struct argp_option *__opt) __THROW;
|
||||
+
|
||||
+/* Return the input field for ARGP in the parser corresponding to STATE; used
|
||||
+ by the help routines. */
|
||||
+/* We think this should not be exported */
|
||||
+extern void *__argp_input (__const struct argp *__restrict __argp,
|
||||
+ __const struct argp_state *__restrict __state)
|
||||
+ __THROW;
|
||||
+
|
||||
+#ifdef __USE_EXTERN_INLINES
|
||||
+
|
||||
+# ifndef ARGP_EI
|
||||
+# define ARGP_EI __extern_inline
|
||||
+# endif
|
||||
+
|
||||
+ARGP_EI void
|
||||
+argp_usage (__const struct argp_state *__state)
|
||||
+{
|
||||
+ argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
|
||||
+}
|
||||
+
|
||||
+ARGP_EI int
|
||||
+__NTH (__option_is_short (__const struct argp_option *__opt))
|
||||
+{
|
||||
+ if (__opt->flags & OPTION_DOC)
|
||||
+ return 0;
|
||||
+ else
|
||||
+ {
|
||||
+ int __key = __opt->key;
|
||||
+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+ARGP_EI int
|
||||
+__NTH (__option_is_end (__const struct argp_option *__opt))
|
||||
+{
|
||||
+ return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
|
||||
+}
|
||||
+#endif /* Use extern inlines. */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* argp.h */
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,21 @@
|
|||
When compiling in thumb mode for arm with -Os gcc gives up since it can not find registers
|
||||
to spill. So we use -O2 option for compiling fork.c It may be addressable is gcc.
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
|
||||
index 329d8a9..41e3646 100644
|
||||
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
|
||||
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
|
||||
@@ -30,3 +30,9 @@ CFLAGS-OMIT-libc-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
|
||||
# This macro should be alternatively implemented in THUMB
|
||||
# assembly.
|
||||
ASFLAGS-vfork.S = -marm
|
||||
+
|
||||
+# For arm fork.c does not compile with -Os when in compiling
|
||||
+# in thumb1 mode
|
||||
+ifeq ($(COMPILE_IN_THUMB_MODE),y)
|
||||
+CFLAGS-fork.c = -O2
|
||||
+endif
|
|
@ -0,0 +1,75 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313307agb;
|
||||
Sat, 8 Jan 2011 16:45:20 -0800 (PST)
|
||||
Received: by 10.227.141.78 with SMTP id l14mr16920947wbu.128.1294533919168;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id w30si33755908wbd.17.2011.01.08.16.45.18;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClHDo; Sun, 09 Jan 2011 01:45:18 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 6/7] ARM: detect BX availibility at build time
|
||||
Date: Sun, 9 Jan 2011 01:45:09 +0100
|
||||
Message-Id: <1294533910-19305-7-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
The "use BX" option is now a suggestion that BX be used if available.
|
||||
Use a macro to detect if BX is available at build time. If so, and
|
||||
the user requested it be used, then use it. Otherwise, error out.
|
||||
|
||||
Macro courtesy Khem RAJ:
|
||||
http://lists.uclibc.org/pipermail/uclibc/2009-April/042301.html
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
extra/Configs/Config.arm | 4 +++-
|
||||
libc/sysdeps/linux/arm/bits/arm_asm.h | 9 ++++++++-
|
||||
2 files changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm
|
||||
index 227b90c..9aa9e56 100644
|
||||
--- a/extra/Configs/Config.arm
|
||||
+++ b/extra/Configs/Config.arm
|
||||
@@ -33,4 +33,6 @@ config COMPILE_IN_THUMB_MODE
|
||||
config USE_BX
|
||||
bool "Use BX in function return"
|
||||
help
|
||||
- Use BX instruction for THUMB aware architectures.
|
||||
+ Say 'y' to use BX to return from functions on your thumb-aware
|
||||
+ processor. Say 'y' if you need to use interworking. Say 'n' if not.
|
||||
+ It is safe to say 'y' even if you're not doing interworking.
|
||||
diff --git a/libc/sysdeps/linux/arm/bits/arm_asm.h b/libc/sysdeps/linux/arm/bits/arm_asm.h
|
||||
index 1d87df6..921c9a3 100644
|
||||
--- a/libc/sysdeps/linux/arm/bits/arm_asm.h
|
||||
+++ b/libc/sysdeps/linux/arm/bits/arm_asm.h
|
||||
@@ -24,5 +24,12 @@
|
||||
#define THUMB1_ONLY 1
|
||||
#endif
|
||||
|
||||
-#endif /* _ARM_ASM_H */
|
||||
+#if defined(__USE_BX__)
|
||||
+# if ( defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_3__) \
|
||||
+ || defined (__ARM_ARCH_3M__) || defined (__ARM_ARCH_4__) \
|
||||
+ )
|
||||
+# error Use of BX was requested, but is not available on the target processor.
|
||||
+# endif /* ARCH level */
|
||||
+#endif /* __USE_BX__ */
|
||||
|
||||
+#endif /* _ARM_ASM_H */
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
Fix a compile error due to last argument to syscall() not being memory addressable.
|
||||
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Phil Blundell <philb@gnu.org>
|
||||
|
||||
diff --git a/libc/sysdeps/linux/common/epoll.c b/libc/sysdeps/linux/common/epoll.c
|
||||
index 85b0cfd..c034b2c 100644
|
||||
--- a/libc/sysdeps/linux/common/epoll.c
|
||||
+++ b/libc/sysdeps/linux/common/epoll.c
|
||||
@@ -67,12 +67,13 @@ extern __typeof(epoll_pwait) __libc_epoll_pwait;
|
||||
int __libc_epoll_pwait(int epfd, struct epoll_event *events, int maxevents,
|
||||
int timeout, const sigset_t *set)
|
||||
{
|
||||
+ int nsig = _NSIG / 8;
|
||||
if (SINGLE_THREAD_P)
|
||||
- return INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, _NSIG / 8);
|
||||
+ return INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, nsig);
|
||||
# ifdef __UCLIBC_HAS_THREADS_NATIVE__
|
||||
else {
|
||||
int oldtype = LIBC_CANCEL_ASYNC ();
|
||||
- int result = INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, _NSIG / 8);
|
||||
+ int result = INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, nsig);
|
||||
LIBC_CANCEL_RESET (oldtype);
|
||||
return result;
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313304agb;
|
||||
Sat, 8 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received: by 10.227.155.75 with SMTP id r11mr17188266wbw.3.1294533918432;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id k3si33753340wbx.29.2011.01.08.16.45.17;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClHDf; Sun, 09 Jan 2011 01:45:17 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 5/7] ARM: #include <bits/arm_asm.h> where __USE_BX__ is used
|
||||
Date: Sun, 9 Jan 2011 01:45:08 +0100
|
||||
Message-Id: <1294533910-19305-6-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
The check for __USE_BX__ will be available in bits/arm_asm.h,
|
||||
so the latter must be included wherever the former is used.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
ldso/ldso/arm/dl-startup.h | 1 +
|
||||
libc/sysdeps/linux/arm/sysdep.h | 1 +
|
||||
2 files changed, 2 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/ldso/ldso/arm/dl-startup.h b/ldso/ldso/arm/dl-startup.h
|
||||
index a95389d..2dfdaff 100644
|
||||
--- a/ldso/ldso/arm/dl-startup.h
|
||||
+++ b/ldso/ldso/arm/dl-startup.h
|
||||
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <features.h>
|
||||
+#include <bits/arm_asm.h>
|
||||
|
||||
#if !defined(__thumb__)
|
||||
__asm__(
|
||||
diff --git a/libc/sysdeps/linux/arm/sysdep.h b/libc/sysdeps/linux/arm/sysdep.h
|
||||
index 013f88c..e498695 100644
|
||||
--- a/libc/sysdeps/linux/arm/sysdep.h
|
||||
+++ b/libc/sysdeps/linux/arm/sysdep.h
|
||||
@@ -21,6 +21,7 @@
|
||||
#define _LINUX_ARM_SYSDEP_H 1
|
||||
|
||||
#include <common/sysdep.h>
|
||||
+#include <bits/arm_asm.h>
|
||||
|
||||
#include <sys/syscall.h>
|
||||
/* For Linux we can use the system call table in the header file
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
Index: uClibc/ldso/ldso/arm/resolve.S
|
||||
===================================================================
|
||||
--- uClibc.orig/ldso/ldso/arm/resolve.S 2009-03-20 12:03:32.000000000 -0700
|
||||
+++ uClibc/ldso/ldso/arm/resolve.S 2009-03-20 12:04:23.000000000 -0700
|
||||
@@ -97,7 +97,6 @@
|
||||
|
||||
.text
|
||||
.align 4 @ 16 byte boundary and there are 32 bytes below (arm case)
|
||||
- #if !defined(__thumb__) || defined(__thumb2__)
|
||||
.arm
|
||||
.globl _dl_linux_resolve
|
||||
.type _dl_linux_resolve,%function
|
||||
@@ -129,7 +128,7 @@
|
||||
#else
|
||||
mov pc,ip
|
||||
#endif
|
||||
-#else
|
||||
+#if 0
|
||||
@ In the thumb case _dl_linux_resolver is thumb. If a bl is used
|
||||
@ from arm code the linker will insert a stub call which, with
|
||||
@ binutils 2.16, is not PIC. Since this code is accessed by an
|
|
@ -0,0 +1,16 @@
|
|||
# in OE we use TARGET_CC_ARCH="-march=mips32" but by
|
||||
# default uclibc uses mips1 ISA for o32 ABI which ends
|
||||
# up with conflicting march options to gcc. Here we
|
||||
# ask for MIPS32 ISA to match the OE defaults
|
||||
|
||||
CONFIG_MIPS_ISA_MIPS32=y
|
||||
|
||||
# Below options are exact copy of general
|
||||
# uClibc.machine file
|
||||
#
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
Patch is backported from
|
||||
http://lists.busybox.net/pipermail/uclibc/2011-March/045003.html
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
|
||||
index 505247e..2b2d429 100644
|
||||
--- a/ldso/ldso/dl-elf.c
|
||||
+++ b/ldso/ldso/dl-elf.c
|
||||
@@ -133,53 +133,60 @@ _dl_protect_relro (struct elf_resolve *l)
|
||||
* in uClibc/ldso/util/ldd.c */
|
||||
static struct elf_resolve *
|
||||
search_for_named_library(const char *name, int secure, const char *path_list,
|
||||
- struct dyn_elf **rpnt)
|
||||
+ struct dyn_elf **rpnt, const char *origin)
|
||||
{
|
||||
- char *path, *path_n, *mylibname;
|
||||
+ char *mylibname;
|
||||
+ const char *p, *pn;
|
||||
struct elf_resolve *tpnt;
|
||||
- int done;
|
||||
+ int plen;
|
||||
|
||||
if (path_list==NULL)
|
||||
return NULL;
|
||||
|
||||
- /* We need a writable copy of this string, but we don't
|
||||
- * need this allocated permanently since we don't want
|
||||
- * to leak memory, so use alloca to put path on the stack */
|
||||
- done = _dl_strlen(path_list);
|
||||
- path = alloca(done + 1);
|
||||
-
|
||||
/* another bit of local storage */
|
||||
mylibname = alloca(2050);
|
||||
|
||||
- _dl_memcpy(path, path_list, done+1);
|
||||
-
|
||||
/* Unlike ldd.c, don't bother to eliminate double //s */
|
||||
|
||||
/* Replace colons with zeros in path_list */
|
||||
/* : at the beginning or end of path maps to CWD */
|
||||
/* :: anywhere maps CWD */
|
||||
/* "" maps to CWD */
|
||||
- done = 0;
|
||||
- path_n = path;
|
||||
- do {
|
||||
- if (*path == 0) {
|
||||
- *path = ':';
|
||||
- done = 1;
|
||||
- }
|
||||
- if (*path == ':') {
|
||||
- *path = 0;
|
||||
- if (*path_n)
|
||||
- _dl_strcpy(mylibname, path_n);
|
||||
- else
|
||||
- _dl_strcpy(mylibname, "."); /* Assume current dir if empty path */
|
||||
- _dl_strcat(mylibname, "/");
|
||||
- _dl_strcat(mylibname, name);
|
||||
- if ((tpnt = _dl_load_elf_shared_library(secure, rpnt, mylibname)) != NULL)
|
||||
- return tpnt;
|
||||
- path_n = path+1;
|
||||
+ for (p = path_list; p != NULL; p = pn) {
|
||||
+ pn = _dl_strchr(p + 1, ':');
|
||||
+ if (pn != NULL) {
|
||||
+ plen = pn - p;
|
||||
+ pn++;
|
||||
+ } else
|
||||
+ plen = _dl_strlen(p);
|
||||
+
|
||||
+ if (plen >= 7 && _dl_memcmp(p, "$ORIGIN", 7) == 0) {
|
||||
+ int olen;
|
||||
+ if (secure && plen != 7)
|
||||
+ continue;
|
||||
+ if (origin == NULL)
|
||||
+ continue;
|
||||
+ for (olen = _dl_strlen(origin) - 1; olen >= 0 && origin[olen] != '/'; olen--)
|
||||
+ ;
|
||||
+ if (olen <= 0)
|
||||
+ continue;
|
||||
+ _dl_memcpy(&mylibname[0], origin, olen);
|
||||
+ _dl_memcpy(&mylibname[olen], p + 7, plen - 7);
|
||||
+ mylibname[olen + plen - 7] = 0;
|
||||
+ } else if (plen != 0) {
|
||||
+ _dl_memcpy(mylibname, p, plen);
|
||||
+ mylibname[plen] = 0;
|
||||
+ } else {
|
||||
+ _dl_strcpy(mylibname, ".");
|
||||
}
|
||||
- path++;
|
||||
- } while (!done);
|
||||
+ _dl_strcat(mylibname, "/");
|
||||
+ _dl_strcat(mylibname, name);
|
||||
+
|
||||
+ tpnt = _dl_load_elf_shared_library(secure, rpnt, mylibname);
|
||||
+ if (tpnt != NULL)
|
||||
+ return tpnt;
|
||||
+ }
|
||||
+
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -231,7 +238,8 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
if (pnt) {
|
||||
pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
|
||||
_dl_if_debug_dprint("\tsearching RPATH='%s'\n", pnt);
|
||||
- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt)) != NULL)
|
||||
+ if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt,
|
||||
+ tpnt->libname)) != NULL)
|
||||
return tpnt1;
|
||||
}
|
||||
#endif
|
||||
@@ -239,7 +247,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
/* Check in LD_{ELF_}LIBRARY_PATH, if specified and allowed */
|
||||
if (_dl_library_path) {
|
||||
_dl_if_debug_dprint("\tsearching LD_LIBRARY_PATH='%s'\n", _dl_library_path);
|
||||
- if ((tpnt1 = search_for_named_library(libname, secure, _dl_library_path, rpnt)) != NULL)
|
||||
+ if ((tpnt1 = search_for_named_library(libname, secure, _dl_library_path, rpnt, NULL)) != NULL)
|
||||
{
|
||||
return tpnt1;
|
||||
}
|
||||
@@ -253,7 +261,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
if (pnt) {
|
||||
pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
|
||||
_dl_if_debug_dprint("\tsearching RUNPATH='%s'\n", pnt);
|
||||
- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt)) != NULL)
|
||||
+ if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt, NULL)) != NULL)
|
||||
return tpnt1;
|
||||
}
|
||||
#endif
|
||||
@@ -287,7 +295,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
/* Look for libraries wherever the shared library loader
|
||||
* was installed */
|
||||
_dl_if_debug_dprint("\tsearching ldso dir='%s'\n", _dl_ldsopath);
|
||||
- tpnt1 = search_for_named_library(libname, secure, _dl_ldsopath, rpnt);
|
||||
+ tpnt1 = search_for_named_library(libname, secure, _dl_ldsopath, rpnt, NULL);
|
||||
if (tpnt1 != NULL)
|
||||
return tpnt1;
|
||||
|
||||
@@ -300,7 +308,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
#ifndef __LDSO_CACHE_SUPPORT__
|
||||
":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib"
|
||||
#endif
|
||||
- , rpnt);
|
||||
+ , rpnt, NULL);
|
||||
if (tpnt1 != NULL)
|
||||
return tpnt1;
|
||||
|
||||
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
|
||||
index 7ee9257..9423670 100644
|
||||
--- a/ldso/ldso/ldso.c
|
||||
+++ b/ldso/ldso/ldso.c
|
||||
@@ -272,6 +272,20 @@ static void __attribute__ ((destructor)) __attribute_used__ _dl_fini(void)
|
||||
}
|
||||
}
|
||||
|
||||
+static void _dl_setup_progname(const char *argv0)
|
||||
+{
|
||||
+ char image[PATH_MAX];
|
||||
+ ssize_t s;
|
||||
+
|
||||
+ s = _dl_readlink("/proc/self/exe", image, sizeof(image));
|
||||
+ if (s > 0 && image[0] == '/') {
|
||||
+ image[s] = 0;
|
||||
+ _dl_progname = _dl_strdup(image);
|
||||
+ } else if (argv0) {
|
||||
+ _dl_progname = argv0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
|
||||
ElfW(auxv_t) auxvt[AT_EGID + 1], char **envp,
|
||||
char **argv
|
||||
@@ -321,9 +335,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
|
||||
* been fixed up by now. Still no function calls outside of this
|
||||
* library, since the dynamic resolver is not yet ready.
|
||||
*/
|
||||
- if (argv[0]) {
|
||||
- _dl_progname = argv[0];
|
||||
- }
|
||||
+ _dl_setup_progname(argv[0]);
|
||||
|
||||
if (_start == (void *) auxvt[AT_ENTRY].a_un.a_val) {
|
||||
_dl_dprintf(_dl_debug_file, "Standalone execution is not supported yet\n");
|
|
@ -0,0 +1,107 @@
|
|||
Index: git/libc/sysdeps/linux/powerpc/Makefile.arch
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/powerpc/Makefile.arch
|
||||
+++ git/libc/sysdeps/linux/powerpc/Makefile.arch
|
||||
@@ -5,7 +5,7 @@
|
||||
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
|
||||
#
|
||||
|
||||
-CSRC := __syscall_error.c pread_write.c ioctl.c
|
||||
+CSRC := __syscall_error.c pread_write.c ioctl.c copysignl.c
|
||||
|
||||
ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
|
||||
CSRC += posix_fadvise.c posix_fadvise64.c
|
||||
Index: git/libc/sysdeps/linux/powerpc/copysignl.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ git/libc/sysdeps/linux/powerpc/copysignl.c
|
||||
@@ -0,0 +1,89 @@
|
||||
+/* s_copysignl.c -- long double version of s_copysign.c.
|
||||
+ * Conversion to long double by Ulrich Drepper,
|
||||
+ * Cygnus Support, drepper@cygnus.com.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * ====================================================
|
||||
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
+ *
|
||||
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
+ * Permission to use, copy, modify, and distribute this
|
||||
+ * software is freely granted, provided that this notice
|
||||
+ * is preserved.
|
||||
+ * ====================================================
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * copysignl(long double x, long double y)
|
||||
+ * copysignl(x,y) returns a value with the magnitude of x and
|
||||
+ * with the sign bit of y.
|
||||
+ */
|
||||
+
|
||||
+#include <endian.h>
|
||||
+#include <stdint.h>
|
||||
+
|
||||
+#if __FLOAT_WORD_ORDER == BIG_ENDIAN
|
||||
+
|
||||
+typedef union
|
||||
+{
|
||||
+ long double value;
|
||||
+ struct
|
||||
+ {
|
||||
+ int sign_exponent:16;
|
||||
+ unsigned int empty:16;
|
||||
+ uint32_t msw;
|
||||
+ uint32_t lsw;
|
||||
+ } parts;
|
||||
+} ieee_long_double_shape_type;
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+#if __FLOAT_WORD_ORDER == LITTLE_ENDIAN
|
||||
+
|
||||
+typedef union
|
||||
+{
|
||||
+ long double value;
|
||||
+ struct
|
||||
+ {
|
||||
+ uint32_t lsw;
|
||||
+ uint32_t msw;
|
||||
+ int sign_exponent:16;
|
||||
+ unsigned int empty:16;
|
||||
+ } parts;
|
||||
+} ieee_long_double_shape_type;
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+/* Get int from the exponent of a long double. */
|
||||
+
|
||||
+#define GET_LDOUBLE_EXP(exp,d) \
|
||||
+do { \
|
||||
+ ieee_long_double_shape_type ge_u; \
|
||||
+ ge_u.value = (d); \
|
||||
+ (exp) = ge_u.parts.sign_exponent; \
|
||||
+} while (0)
|
||||
+
|
||||
+/* Set exponent of a long double from an int. */
|
||||
+
|
||||
+#define SET_LDOUBLE_EXP(d,exp) \
|
||||
+do { \
|
||||
+ ieee_long_double_shape_type se_u; \
|
||||
+ se_u.value = (d); \
|
||||
+ se_u.parts.sign_exponent = (exp); \
|
||||
+ (d) = se_u.value; \
|
||||
+} while (0)
|
||||
+
|
||||
+long double copysignl(long double x, long double y);
|
||||
+libc_hidden_proto(copysignl);
|
||||
+
|
||||
+long double copysignl(long double x, long double y)
|
||||
+{
|
||||
+ uint32_t es1,es2;
|
||||
+ GET_LDOUBLE_EXP(es1,x);
|
||||
+ GET_LDOUBLE_EXP(es2,y);
|
||||
+ SET_LDOUBLE_EXP(x,(es1&0x7fff)|(es2&0x8000));
|
||||
+ return x;
|
||||
+}
|
||||
+
|
||||
+libc_hidden_def(copysignl);
|
|
@ -0,0 +1,91 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313309agb;
|
||||
Sat, 8 Jan 2011 16:45:20 -0800 (PST)
|
||||
Received: by 10.216.173.7 with SMTP id u7mr612034wel.50.1294533919433;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id e10si33752027wer.68.2011.01.08.16.45.19;
|
||||
Sat, 08 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClJDu; Sun, 09 Jan 2011 01:45:18 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 7/7] ARM: remove EABI/OABI selection
|
||||
Date: Sun, 9 Jan 2011 01:45:10 +0100
|
||||
Message-Id: <1294533910-19305-8-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
Rely on the compiler to be properly setup for the default ABI.
|
||||
|
||||
When installing-headers, there are two cases:
|
||||
- NPTL: no issue, a cross-compiler is already expected
|
||||
- LinuxThreads: no issue, EABI/OABI has no impact on installed headers.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
extra/Configs/Config.arm | 11 -----------
|
||||
libc/sysdeps/linux/arm/Makefile.arch | 9 +++++++--
|
||||
libc/sysdeps/linux/arm/bits/huge_val.h | 4 ++--
|
||||
3 files changed, 9 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: git/libc/sysdeps/linux/arm/Makefile.arch
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/arm/Makefile.arch
|
||||
+++ git/libc/sysdeps/linux/arm/Makefile.arch
|
||||
@@ -24,7 +24,12 @@ ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
|
||||
CSRC += posix_fadvise.c posix_fadvise64.c
|
||||
endif
|
||||
|
||||
-ifeq ($(CONFIG_ARM_EABI),y)
|
||||
+# Is our compiler set up for EABI ?
|
||||
+IS_EABI:=$(shell $(CC) $(CFLAGS) -x c - -E -dM </dev/null 2>/dev/null \
|
||||
+ |sed -r -e '/^\#[[:space:]]*define[[:space:]]+__ARM_EABI__([[:space:]]+1)?$$/!d; s/.+/y/;' \
|
||||
+ )
|
||||
+
|
||||
+ifeq ($(IS_EABI),y)
|
||||
CSRC += aeabi_assert.c aeabi_atexit.c aeabi_errno_addr.c \
|
||||
aeabi_localeconv.c aeabi_memclr.c aeabi_memcpy.c \
|
||||
aeabi_memmove.c aeabi_memset.c find_exidx.c
|
||||
@@ -37,7 +42,7 @@ else
|
||||
CSRC += syscall.c
|
||||
endif
|
||||
|
||||
-ifeq ($(CONFIG_ARM_EABI),y)
|
||||
+ifeq ($(IS_EABI),y)
|
||||
libc-static-y += $(ARCH_OUT)/aeabi_lcsts.o $(ARCH_OUT)/aeabi_math.o \
|
||||
$(ARCH_OUT)/aeabi_sighandlers.o
|
||||
libc-nonshared-y += $(ARCH_OUT)/aeabi_lcsts.os $(ARCH_OUT)/aeabi_math.os \
|
||||
Index: git/libc/sysdeps/linux/arm/bits/huge_val.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/arm/bits/huge_val.h
|
||||
+++ git/libc/sysdeps/linux/arm/bits/huge_val.h
|
||||
@@ -32,7 +32,7 @@
|
||||
# define HUGE_VAL (__extension__ 0x1.0p2047)
|
||||
#elif defined __GNUC__
|
||||
|
||||
-#ifndef __CONFIG_ARM_EABI__
|
||||
+#ifndef __ARM_EABI__
|
||||
# define HUGE_VAL \
|
||||
(__extension__ \
|
||||
((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
|
||||
|
||||
-#ifndef __CONFIG_ARM_EABI__
|
||||
+#ifndef __ARM_EABI__
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define __HUGE_VAL_bytes { 0, 0, 0, 0, 0x7f, 0xf0, 0, 0 }
|
||||
# endif
|
|
@ -0,0 +1,215 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313303agb;
|
||||
Sat, 8 Jan 2011 16:45:18 -0800 (PST)
|
||||
Received: by 10.227.98.158 with SMTP id q30mr1255804wbn.151.1294533917314;
|
||||
Sat, 08 Jan 2011 16:45:17 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id r3si33749838wbr.54.2011.01.08.16.45.16;
|
||||
Sat, 08 Jan 2011 16:45:17 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClGDS; Sun, 09 Jan 2011 01:45:16 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 3/7] ARM: remove sub-arch/variants selection from menuconfig
|
||||
Date: Sun, 9 Jan 2011 01:45:06 +0100
|
||||
Message-Id: <1294533910-19305-4-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
Rely on the compiler to be correctly set up to generate
|
||||
appropriate code for the target variant.
|
||||
|
||||
This exposes the Thumb option, as it is no longer auto-selected.
|
||||
The "Use BX" no longer depends on supported CPU to be selected,
|
||||
so it now defaults to 'n' as it shall work by default on CPUs
|
||||
that do not have BX.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
Rules.mak | 19 -------
|
||||
extra/Configs/Config.arm | 125 ++--------------------------------------------
|
||||
2 files changed, 5 insertions(+), 139 deletions(-)
|
||||
|
||||
diff --git a/Rules.mak b/Rules.mak
|
||||
index 2a16908..09741a6 100644
|
||||
--- a/Rules.mak
|
||||
+++ b/Rules.mak
|
||||
@@ -332,25 +332,6 @@ ifeq ($(TARGET_ARCH),arm)
|
||||
OPTIMIZATION+=-fstrict-aliasing
|
||||
CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian
|
||||
CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian
|
||||
- CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+=
|
||||
- CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3
|
||||
- CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3
|
||||
- CPU_CFLAGS-$(CONFIG_ARM7TDMI)+=-mtune=arm7tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9e -march=armv5te
|
||||
- CPU_CFLAGS-$(CONFIG_ARM10T)+=-mtune=arm10tdmi -march=armv5t
|
||||
- CPU_CFLAGS-$(CONFIG_ARM1136JF_S)+=-mtune=arm1136jf-s -march=armv6
|
||||
- CPU_CFLAGS-$(CONFIG_ARM1176JZ_S)+=-mtune=arm1176jz-s -march=armv6
|
||||
- CPU_CFLAGS-$(CONFIG_ARM1176JZF_S)+=-mtune=arm1176jzf-s -march=armv6
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110)
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv5te -Wa,-mcpu=xscale
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_IWMMXT)+=-march=iwmmxt -Wa,-mcpu=iwmmxt -mabi=iwmmxt
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M3)+=-mcpu=cortex-m3
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M1)+=-mcpu=cortex-m1
|
||||
CPU_CFLAGS-$(COMPILE_IN_THUMB_MODE)+=-mthumb
|
||||
endif
|
||||
|
||||
diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm
|
||||
index c9c40d4..6c75a00 100644
|
||||
--- a/extra/Configs/Config.arm
|
||||
+++ b/extra/Configs/Config.arm
|
||||
@@ -30,129 +30,14 @@ config CONFIG_ARM_EABI
|
||||
|
||||
endchoice
|
||||
|
||||
-choice
|
||||
- prompt "Target Processor Type"
|
||||
- default CONFIG_GENERIC_ARM
|
||||
- help
|
||||
- This is the processor type of your CPU. This information is used for
|
||||
- optimizing purposes. To build a library that will run on all ARMCPU
|
||||
- types (albeit not optimally fast), you can specify "Generic Arm" here.
|
||||
- If you pick anything other than "Generic Arm", there is no guarantee
|
||||
- that uClibc will even run on anything other than the selected
|
||||
- processor type.
|
||||
-
|
||||
- Here are the settings recommended for greatest speed:
|
||||
- - "Generic Arm" select this if your compiler is already setup to
|
||||
- optimize things properly, or if you want to run on pretty much
|
||||
- everything, or you just don't much care.
|
||||
- - For anything else, pick the ARM core type that best matches the
|
||||
- cpu you will be using on your device.
|
||||
-
|
||||
- If you don't know what to do, choose "Generic Arm".
|
||||
-
|
||||
-config CONFIG_GENERIC_ARM
|
||||
- bool "Generic Arm"
|
||||
-
|
||||
-config CONFIG_ARM610
|
||||
- bool "Arm 610"
|
||||
- select ARCH_HAS_MMU
|
||||
-
|
||||
-config CONFIG_ARM710
|
||||
- bool "Arm 710"
|
||||
- select ARCH_HAS_MMU
|
||||
-
|
||||
-config CONFIG_ARM7TDMI
|
||||
- bool "Arm 7TDMI"
|
||||
- select ARCH_HAS_NO_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM720T
|
||||
- bool "Arm 720T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM920T
|
||||
- bool "Arm 920T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM922T
|
||||
- bool "Arm 922T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM926T
|
||||
- bool "Arm 926T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM10T
|
||||
- bool "Arm 10T"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM1136JF_S
|
||||
- bool "Arm 1136JF-S"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM1176JZ_S
|
||||
- bool "Arm 1176JZ-S"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM1176JZF_S
|
||||
- bool "Arm 1176JZF-S"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_CORTEX_M3
|
||||
- bool "Arm Cortex-M3"
|
||||
- select ARCH_HAS_NO_MMU
|
||||
- select FORCE_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_CORTEX_M1
|
||||
- bool "Arm Cortex-M1"
|
||||
- select ARCH_HAS_NO_MMU
|
||||
- select FORCE_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_SA110
|
||||
- bool "Intel StrongArm SA-110"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_SA1100
|
||||
- bool "Intel StrongArm SA-1100"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_XSCALE
|
||||
- bool "Intel Xscale"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-config CONFIG_ARM_IWMMXT
|
||||
- bool "Intel Xscale With WMMX PXA27x"
|
||||
- select ARCH_HAS_MMU
|
||||
- select HAS_THUMB
|
||||
-
|
||||
-endchoice
|
||||
-
|
||||
-config HAS_THUMB
|
||||
- bool
|
||||
-
|
||||
-config FORCE_THUMB
|
||||
- bool
|
||||
- select HAS_THUMB
|
||||
- select COMPILE_IN_THUMB_MODE
|
||||
- select USE_BX
|
||||
-
|
||||
config COMPILE_IN_THUMB_MODE
|
||||
- bool
|
||||
+ bool "Build using Thumb mode"
|
||||
+ select USE_BX
|
||||
+ help
|
||||
+ Say 'y' here to force building uClibc in thumb mode.
|
||||
+ Say 'n' to use your compiler's default mode.
|
||||
|
||||
config USE_BX
|
||||
bool "Use BX in function return"
|
||||
- default y
|
||||
- depends on HAS_THUMB
|
||||
help
|
||||
Use BX instruction for THUMB aware architectures.
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
Index: git/include/features.h
|
||||
===================================================================
|
||||
--- git.orig/include/features.h
|
||||
+++ git/include/features.h
|
||||
@@ -186,7 +186,6 @@
|
||||
# define __need_uClibc_config_h
|
||||
# include <bits/uClibc_config.h>
|
||||
# undef __need_uClibc_config_h
|
||||
-
|
||||
/* For uClibc, always optimize for size -- this should disable
|
||||
* a lot of expensive inlining...
|
||||
* TODO: this is wrong! __OPTIMIZE_SIZE__ is an indicator of
|
||||
Index: git/libpthread/nptl/pthread_mutex_timedlock.c
|
||||
===================================================================
|
||||
--- git.orig/libpthread/nptl/pthread_mutex_timedlock.c
|
||||
+++ git/libpthread/nptl/pthread_mutex_timedlock.c
|
||||
@@ -29,7 +29,9 @@
|
||||
* error: can't find a register in class ‘GENERAL_REGS’ while reloading ‘asm’
|
||||
*/
|
||||
int
|
||||
+#ifndef __OPTIMIZE__
|
||||
attribute_optimize("Os")
|
||||
+#endif
|
||||
pthread_mutex_timedlock (
|
||||
pthread_mutex_t *mutex,
|
||||
const struct timespec *abstime)
|
||||
Index: git/libc/sysdeps/linux/powerpc/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/powerpc/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/powerpc/bits/mathinline.h
|
||||
@@ -27,7 +27,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#if defined __GNUC__ && !defined _SOFT_FLOAT
|
||||
Index: git/libc/sysdeps/linux/alpha/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/alpha/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/alpha/bits/mathinline.h
|
||||
@@ -25,7 +25,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
#if defined __USE_ISOC99 && defined __GNUC__ && !__GNUC_PREREQ(3,0)
|
||||
Index: git/libc/sysdeps/linux/common/bits/socket.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/common/bits/socket.h
|
||||
+++ git/libc/sysdeps/linux/common/bits/socket.h
|
||||
@@ -302,7 +302,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st
|
||||
libc_hidden_proto(__cmsg_nxthdr)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
_EXTERN_INLINE struct cmsghdr *
|
||||
__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
|
||||
Index: git/libc/sysdeps/linux/i386/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/i386/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/i386/bits/mathinline.h
|
||||
@@ -26,7 +26,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
|
||||
Index: git/libc/sysdeps/linux/ia64/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/ia64/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/ia64/bits/mathinline.h
|
||||
@@ -24,7 +24,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
#if defined __USE_ISOC99 && defined __GNUC__ && __GNUC__ >= 2
|
||||
Index: git/libc/sysdeps/linux/m68k/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/m68k/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/m68k/bits/mathinline.h
|
||||
@@ -92,7 +92,7 @@
|
||||
# ifdef __cplusplus
|
||||
# define __m81_inline __inline
|
||||
# else
|
||||
-# define __m81_inline extern __inline
|
||||
+# define __m81_inline __extern_inline
|
||||
# endif
|
||||
# define __M81_MATH_INLINES 1
|
||||
#endif
|
||||
@@ -351,14 +351,14 @@ __inline_functions (long double,l)
|
||||
/* Note that there must be no whitespace before the argument passed for
|
||||
NAME, to make token pasting work correctly with -traditional. */
|
||||
# define __inline_forward_c(rettype, name, args1, args2) \
|
||||
-extern __inline rettype __attribute__((__const__)) \
|
||||
+__extern_inline rettype __attribute__((__const__)) \
|
||||
name args1 \
|
||||
{ \
|
||||
return __CONCAT(__,name) args2; \
|
||||
}
|
||||
|
||||
# define __inline_forward(rettype, name, args1, args2) \
|
||||
-extern __inline rettype name args1 \
|
||||
+__extern_inline rettype name args1 \
|
||||
{ \
|
||||
return __CONCAT(__,name) args2; \
|
||||
}
|
||||
Index: git/libc/sysdeps/linux/mips/bits/socket.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/mips/bits/socket.h
|
||||
+++ git/libc/sysdeps/linux/mips/bits/socket.h
|
||||
@@ -307,7 +307,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st
|
||||
libc_hidden_proto(__cmsg_nxthdr)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
_EXTERN_INLINE struct cmsghdr *
|
||||
__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
|
||||
Index: git/libc/sysdeps/linux/mips/sys/tas.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/mips/sys/tas.h
|
||||
+++ git/libc/sysdeps/linux/mips/sys/tas.h
|
||||
@@ -30,7 +30,7 @@ extern int _test_and_set (int *p, int v)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
|
||||
_EXTERN_INLINE int
|
||||
Index: git/libc/sysdeps/linux/sparc/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/sparc/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/sparc/bits/mathinline.h
|
||||
@@ -131,7 +131,7 @@
|
||||
# ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
# else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
# endif /* __cplusplus */
|
||||
|
||||
/* The gcc, version 2.7 or below, has problems with all this inlining
|
||||
Index: git/libc/sysdeps/linux/sparc/bits/socket.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/sparc/bits/socket.h
|
||||
+++ git/libc/sysdeps/linux/sparc/bits/socket.h
|
||||
@@ -292,7 +292,7 @@ extern struct cmsghdr *__cmsg_nxthdr (st
|
||||
libc_hidden_proto(__cmsg_nxthdr)
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
# ifndef _EXTERN_INLINE
|
||||
-# define _EXTERN_INLINE extern __inline
|
||||
+# define _EXTERN_INLINE __extern_inline
|
||||
# endif
|
||||
_EXTERN_INLINE struct cmsghdr *
|
||||
__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
|
||||
Index: git/libc/sysdeps/linux/x86_64/bits/mathinline.h
|
||||
===================================================================
|
||||
--- git.orig/libc/sysdeps/linux/x86_64/bits/mathinline.h
|
||||
+++ git/libc/sysdeps/linux/x86_64/bits/mathinline.h
|
||||
@@ -25,7 +25,7 @@
|
||||
#ifdef __cplusplus
|
||||
# define __MATH_INLINE __inline
|
||||
#else
|
||||
-# define __MATH_INLINE extern __inline
|
||||
+# define __MATH_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,215 @@
|
|||
Patch is backported from
|
||||
http://lists.busybox.net/pipermail/uclibc/2011-March/045004.html
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
diff --git a/ldso/include/dl-elf.h b/ldso/include/dl-elf.h
|
||||
index 7fbb373..7102351 100644
|
||||
--- a/ldso/include/dl-elf.h
|
||||
+++ b/ldso/include/dl-elf.h
|
||||
@@ -25,16 +25,18 @@ static __inline__ void _dl_map_cache(void) { }
|
||||
static __inline__ void _dl_unmap_cache(void) { }
|
||||
#endif
|
||||
|
||||
+#define DL_RESOLVE_SECURE 0x0001
|
||||
+#define DL_RESOLVE_NOLOAD 0x0002
|
||||
|
||||
/* Function prototypes for non-static stuff in readelflib1.c */
|
||||
extern void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
|
||||
unsigned long rel_addr, unsigned long rel_size);
|
||||
extern int _dl_parse_relocation_information(struct dyn_elf *rpnt,
|
||||
unsigned long rel_addr, unsigned long rel_size);
|
||||
-extern struct elf_resolve * _dl_load_shared_library(int secure,
|
||||
+extern struct elf_resolve * _dl_load_shared_library(int resolve_flags,
|
||||
struct dyn_elf **rpnt, struct elf_resolve *tpnt, char *full_libname,
|
||||
int trace_loaded_objects);
|
||||
-extern struct elf_resolve * _dl_load_elf_shared_library(int secure,
|
||||
+extern struct elf_resolve * _dl_load_elf_shared_library(int resolve_flags,
|
||||
struct dyn_elf **rpnt, char *libname);
|
||||
extern struct elf_resolve *_dl_check_if_named_library_is_loaded(const char *full_libname,
|
||||
int trace_loaded_objects);
|
||||
diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
|
||||
index 2b2d429..6d35bf2 100644
|
||||
--- a/ldso/ldso/dl-elf.c
|
||||
+++ b/ldso/ldso/dl-elf.c
|
||||
@@ -132,7 +132,7 @@ _dl_protect_relro (struct elf_resolve *l)
|
||||
/* This function's behavior must exactly match that
|
||||
* in uClibc/ldso/util/ldd.c */
|
||||
static struct elf_resolve *
|
||||
-search_for_named_library(const char *name, int secure, const char *path_list,
|
||||
+search_for_named_library(const char *name, int resolve_flags, const char *path_list,
|
||||
struct dyn_elf **rpnt, const char *origin)
|
||||
{
|
||||
char *mylibname;
|
||||
@@ -162,7 +162,7 @@ search_for_named_library(const char *name, int secure, const char *path_list,
|
||||
|
||||
if (plen >= 7 && _dl_memcmp(p, "$ORIGIN", 7) == 0) {
|
||||
int olen;
|
||||
- if (secure && plen != 7)
|
||||
+ if ((resolve_flags & DL_RESOLVE_SECURE) && plen != 7)
|
||||
continue;
|
||||
if (origin == NULL)
|
||||
continue;
|
||||
@@ -182,7 +182,7 @@ search_for_named_library(const char *name, int secure, const char *path_list,
|
||||
_dl_strcat(mylibname, "/");
|
||||
_dl_strcat(mylibname, name);
|
||||
|
||||
- tpnt = _dl_load_elf_shared_library(secure, rpnt, mylibname);
|
||||
+ tpnt = _dl_load_elf_shared_library(resolve_flags, rpnt, mylibname);
|
||||
if (tpnt != NULL)
|
||||
return tpnt;
|
||||
}
|
||||
@@ -194,7 +194,7 @@ search_for_named_library(const char *name, int secure, const char *path_list,
|
||||
unsigned long _dl_error_number;
|
||||
unsigned long _dl_internal_error_number;
|
||||
|
||||
-struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
+struct elf_resolve *_dl_load_shared_library(int resolve_flags, struct dyn_elf **rpnt,
|
||||
struct elf_resolve *tpnt, char *full_libname, int attribute_unused trace_loaded_objects)
|
||||
{
|
||||
char *pnt;
|
||||
@@ -223,7 +223,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
|
||||
if (libname != full_libname) {
|
||||
_dl_if_debug_dprint("\ttrying file='%s'\n", full_libname);
|
||||
- tpnt1 = _dl_load_elf_shared_library(secure, rpnt, full_libname);
|
||||
+ tpnt1 = _dl_load_elf_shared_library(resolve_flags, rpnt, full_libname);
|
||||
if (tpnt1) {
|
||||
return tpnt1;
|
||||
}
|
||||
@@ -238,7 +238,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
if (pnt) {
|
||||
pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
|
||||
_dl_if_debug_dprint("\tsearching RPATH='%s'\n", pnt);
|
||||
- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt,
|
||||
+ if ((tpnt1 = search_for_named_library(libname, resolve_flags, pnt, rpnt,
|
||||
tpnt->libname)) != NULL)
|
||||
return tpnt1;
|
||||
}
|
||||
@@ -247,7 +247,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
/* Check in LD_{ELF_}LIBRARY_PATH, if specified and allowed */
|
||||
if (_dl_library_path) {
|
||||
_dl_if_debug_dprint("\tsearching LD_LIBRARY_PATH='%s'\n", _dl_library_path);
|
||||
- if ((tpnt1 = search_for_named_library(libname, secure, _dl_library_path, rpnt, NULL)) != NULL)
|
||||
+ if ((tpnt1 = search_for_named_library(libname, resolve_flags, _dl_library_path, rpnt, NULL)) != NULL)
|
||||
{
|
||||
return tpnt1;
|
||||
}
|
||||
@@ -261,7 +261,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
if (pnt) {
|
||||
pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
|
||||
_dl_if_debug_dprint("\tsearching RUNPATH='%s'\n", pnt);
|
||||
- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt, NULL)) != NULL)
|
||||
+ if ((tpnt1 = search_for_named_library(libname, resolve_flags, pnt, rpnt, NULL)) != NULL)
|
||||
return tpnt1;
|
||||
}
|
||||
#endif
|
||||
@@ -284,7 +284,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
|| libent[i].flags == LIB_ELF_LIBC0
|
||||
|| libent[i].flags == LIB_ELF_LIBC5)
|
||||
&& _dl_strcmp(libname, strs + libent[i].sooffset) == 0
|
||||
- && (tpnt1 = _dl_load_elf_shared_library(secure, rpnt, strs + libent[i].liboffset))
|
||||
+ && (tpnt1 = _dl_load_elf_shared_library(resolve_flags, rpnt, strs + libent[i].liboffset))
|
||||
) {
|
||||
return tpnt1;
|
||||
}
|
||||
@@ -295,14 +295,14 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
|
||||
/* Look for libraries wherever the shared library loader
|
||||
* was installed */
|
||||
_dl_if_debug_dprint("\tsearching ldso dir='%s'\n", _dl_ldsopath);
|
||||
- tpnt1 = search_for_named_library(libname, secure, _dl_ldsopath, rpnt, NULL);
|
||||
+ tpnt1 = search_for_named_library(libname, resolve_flags, _dl_ldsopath, rpnt, NULL);
|
||||
if (tpnt1 != NULL)
|
||||
return tpnt1;
|
||||
|
||||
/* Lastly, search the standard list of paths for the library.
|
||||
This list must exactly match the list in uClibc/ldso/util/ldd.c */
|
||||
_dl_if_debug_dprint("\tsearching full lib path list\n");
|
||||
- tpnt1 = search_for_named_library(libname, secure,
|
||||
+ tpnt1 = search_for_named_library(libname, resolve_flags,
|
||||
UCLIBC_RUNTIME_PREFIX "lib:"
|
||||
UCLIBC_RUNTIME_PREFIX "usr/lib"
|
||||
#ifndef __LDSO_CACHE_SUPPORT__
|
||||
@@ -329,7 +329,7 @@ goof:
|
||||
* are required.
|
||||
*/
|
||||
|
||||
-struct elf_resolve *_dl_load_elf_shared_library(int secure,
|
||||
+struct elf_resolve *_dl_load_elf_shared_library(int resolve_flags,
|
||||
struct dyn_elf **rpnt, char *libname)
|
||||
{
|
||||
ElfW(Ehdr) *epnt;
|
||||
@@ -368,7 +368,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
|
||||
}
|
||||
/* If we are in secure mode (i.e. a setu/gid binary using LD_PRELOAD),
|
||||
we don't load the library if it isn't setuid. */
|
||||
- if (secure) {
|
||||
+ if (resolve_flags & DL_RESOLVE_SECURE) {
|
||||
if (!(st.st_mode & S_ISUID)) {
|
||||
_dl_close(infile);
|
||||
return NULL;
|
||||
@@ -384,6 +384,10 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
|
||||
return tpnt;
|
||||
}
|
||||
}
|
||||
+ if (resolve_flags & DL_RESOLVE_NOLOAD) {
|
||||
+ _dl_close(infile);
|
||||
+ return NULL;
|
||||
+ }
|
||||
header = _dl_mmap((void *) 0, _dl_pagesize, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_UNINITIALIZE, -1, 0);
|
||||
if (_dl_mmap_check_error(header)) {
|
||||
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
|
||||
index 9423670..b71af34 100644
|
||||
--- a/ldso/ldso/ldso.c
|
||||
+++ b/ldso/ldso/ldso.c
|
||||
@@ -646,7 +646,9 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
|
||||
if (!_dl_secure || _dl_strchr(str, '/') == NULL) {
|
||||
_dl_if_debug_dprint("\tfile='%s'; needed by '%s'\n", str, _dl_progname);
|
||||
|
||||
- tpnt1 = _dl_load_shared_library(_dl_secure, &rpnt, NULL, str, trace_loaded_objects);
|
||||
+ tpnt1 = _dl_load_shared_library(
|
||||
+ _dl_secure ? DL_RESOLVE_SECURE : 0,
|
||||
+ &rpnt, NULL, str, trace_loaded_objects);
|
||||
if (!tpnt1) {
|
||||
#ifdef __LDSO_LDD_SUPPORT__
|
||||
if (trace_loaded_objects)
|
||||
diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
|
||||
index 68cd579..edf38d2 100644
|
||||
--- a/ldso/libdl/libdl.c
|
||||
+++ b/ldso/libdl/libdl.c
|
||||
@@ -288,7 +288,7 @@ void *dlopen(const char *libname, int flag)
|
||||
#endif
|
||||
|
||||
/* A bit of sanity checking... */
|
||||
- if (!(flag & (RTLD_LAZY|RTLD_NOW))) {
|
||||
+ if (!(flag & (RTLD_LAZY|RTLD_NOW|RTLD_NOLOAD))) {
|
||||
_dl_error_number = LD_BAD_HANDLE;
|
||||
return NULL;
|
||||
}
|
||||
@@ -358,8 +358,9 @@ void *dlopen(const char *libname, int flag)
|
||||
/* Try to load the specified library */
|
||||
_dl_if_debug_print("Trying to dlopen '%s', RTLD_GLOBAL:%d RTLD_NOW:%d\n",
|
||||
(char*)libname, (flag & RTLD_GLOBAL ? 1:0), (now_flag & RTLD_NOW ? 1:0));
|
||||
- tpnt = _dl_load_shared_library(0, &rpnt, tfrom, (char*)libname, 0);
|
||||
|
||||
+ tpnt = _dl_load_shared_library((flag & RTLD_NOLOAD) ? DL_RESOLVE_NOLOAD : 0,
|
||||
+ &rpnt, tfrom, (char*)libname, 0);
|
||||
if (tpnt == NULL) {
|
||||
_dl_unmap_cache();
|
||||
return NULL;
|
||||
diff --git a/libc/sysdeps/linux/common/bits/dlfcn.h b/libc/sysdeps/linux/common/bits/dlfcn.h
|
||||
index 4bfbbff..47b42ad 100644
|
||||
--- a/libc/sysdeps/linux/common/bits/dlfcn.h
|
||||
+++ b/libc/sysdeps/linux/common/bits/dlfcn.h
|
||||
@@ -24,9 +24,9 @@
|
||||
/* The MODE argument to `dlopen' contains one of the following: */
|
||||
#define RTLD_LAZY 0x00001 /* Lazy function call binding. */
|
||||
#define RTLD_NOW 0x00002 /* Immediate function call binding. */
|
||||
-#if 0 /* uClibc doesnt support these */
|
||||
-#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
|
||||
+#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
|
||||
#define RTLD_NOLOAD 0x00004 /* Do not load the object. */
|
||||
+#if 0 /* uClibc doesnt support these */
|
||||
#define RTLD_DEEPBIND 0x00008 /* Use deep binding. */
|
||||
#endif
|
|
@ -0,0 +1,172 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313301agb;
|
||||
Sat, 8 Jan 2011 16:45:17 -0800 (PST)
|
||||
Received: by 10.216.186.82 with SMTP id v60mr20017574wem.56.1294533916559;
|
||||
Sat, 08 Jan 2011 16:45:16 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id o13si33755824wee.56.2011.01.08.16.45.16;
|
||||
Sat, 08 Jan 2011 16:45:16 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClFDL; Sun, 09 Jan 2011 01:45:16 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 2/7] ARM: introduce blind options to select & force THUMB mode
|
||||
Date: Sun, 9 Jan 2011 01:45:05 +0100
|
||||
Message-Id: <1294533910-19305-3-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
Add three new blind options to set use of Thumb mode:
|
||||
- COMPILE_IN_THUMB_MODE
|
||||
- if set, CFLAGS will contain -mthumb
|
||||
- if unset, the compiler's default is used
|
||||
- HAS_THUMB
|
||||
- CPUS with Thumb instruction set can select this
|
||||
- use of BX depends on this
|
||||
- FORCE_THUMB
|
||||
- CPUs that are Thumb-only must select this
|
||||
- this selects: HAS_THUMB, COMPILE_IN_THUMB_MODE and USE_BX
|
||||
|
||||
Also, remove leading space in Rules.mak.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
Rules.mak | 7 ++++---
|
||||
extra/Configs/Config.arm | 31 ++++++++++++++++++++++++++++---
|
||||
2 files changed, 32 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Rules.mak b/Rules.mak
|
||||
index eecdc64..2a16908 100644
|
||||
--- a/Rules.mak
|
||||
+++ b/Rules.mak
|
||||
@@ -348,9 +348,10 @@ ifeq ($(TARGET_ARCH),arm)
|
||||
CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4
|
||||
CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110)
|
||||
CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv5te -Wa,-mcpu=xscale
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_IWMMXT)+=-march=iwmmxt -Wa,-mcpu=iwmmxt -mabi=iwmmxt
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M3)+=-mcpu=cortex-m3 -mthumb
|
||||
- CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M1)+=-mcpu=cortex-m1 -mthumb
|
||||
+ CPU_CFLAGS-$(CONFIG_ARM_IWMMXT)+=-march=iwmmxt -Wa,-mcpu=iwmmxt -mabi=iwmmxt
|
||||
+ CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M3)+=-mcpu=cortex-m3
|
||||
+ CPU_CFLAGS-$(CONFIG_ARM_CORTEX_M1)+=-mcpu=cortex-m1
|
||||
+ CPU_CFLAGS-$(COMPILE_IN_THUMB_MODE)+=-mthumb
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_ARCH),mips)
|
||||
diff --git a/extra/Configs/Config.arm b/extra/Configs/Config.arm
|
||||
index 3b90e67..c9c40d4 100644
|
||||
--- a/extra/Configs/Config.arm
|
||||
+++ b/extra/Configs/Config.arm
|
||||
@@ -64,70 +64,95 @@ config CONFIG_ARM710
|
||||
config CONFIG_ARM7TDMI
|
||||
bool "Arm 7TDMI"
|
||||
select ARCH_HAS_NO_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM720T
|
||||
bool "Arm 720T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM920T
|
||||
bool "Arm 920T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM922T
|
||||
bool "Arm 922T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM926T
|
||||
bool "Arm 926T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM10T
|
||||
bool "Arm 10T"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM1136JF_S
|
||||
bool "Arm 1136JF-S"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM1176JZ_S
|
||||
bool "Arm 1176JZ-S"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM1176JZF_S
|
||||
bool "Arm 1176JZF-S"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_CORTEX_M3
|
||||
bool "Arm Cortex-M3"
|
||||
select ARCH_HAS_NO_MMU
|
||||
- select USE_BX
|
||||
+ select FORCE_THUMB
|
||||
|
||||
config CONFIG_ARM_CORTEX_M1
|
||||
bool "Arm Cortex-M1"
|
||||
select ARCH_HAS_NO_MMU
|
||||
- select USE_BX
|
||||
+ select FORCE_THUMB
|
||||
|
||||
config CONFIG_ARM_SA110
|
||||
bool "Intel StrongArm SA-110"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_SA1100
|
||||
bool "Intel StrongArm SA-1100"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_XSCALE
|
||||
bool "Intel Xscale"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
config CONFIG_ARM_IWMMXT
|
||||
bool "Intel Xscale With WMMX PXA27x"
|
||||
select ARCH_HAS_MMU
|
||||
+ select HAS_THUMB
|
||||
|
||||
endchoice
|
||||
|
||||
+config HAS_THUMB
|
||||
+ bool
|
||||
+
|
||||
+config FORCE_THUMB
|
||||
+ bool
|
||||
+ select HAS_THUMB
|
||||
+ select COMPILE_IN_THUMB_MODE
|
||||
+ select USE_BX
|
||||
+
|
||||
+config COMPILE_IN_THUMB_MODE
|
||||
+ bool
|
||||
+
|
||||
config USE_BX
|
||||
bool "Use BX in function return"
|
||||
default y
|
||||
- depends on !CONFIG_GENERIC_ARM && !CONFIG_ARM610 && !CONFIG_ARM710
|
||||
+ depends on HAS_THUMB
|
||||
help
|
||||
Use BX instruction for THUMB aware architectures.
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
Delivered-To: raj.khem@gmail.com
|
||||
Received: by 10.90.86.4 with SMTP id j4cs313305agb;
|
||||
Sat, 8 Jan 2011 16:45:19 -0800 (PST)
|
||||
Received: by 10.216.153.210 with SMTP id f60mr573848wek.114.1294533918335;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Return-Path: <yann.morin.1998@anciens.enib.fr>
|
||||
Received: from smtp.smtpout.orange.fr (smtp01.smtpout.orange.fr [80.12.242.123])
|
||||
by mx.google.com with ESMTP id n4si33737071wej.152.2011.01.08.16.45.17;
|
||||
Sat, 08 Jan 2011 16:45:18 -0800 (PST)
|
||||
Received-SPF: neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) client-ip=80.12.242.123;
|
||||
Authentication-Results: mx.google.com; spf=neutral (google.com: 80.12.242.123 is neither permitted nor denied by best guess record for domain of yann.morin.1998@anciens.enib.fr) smtp.mail=yann.morin.1998@anciens.enib.fr
|
||||
Received: from roazhon.bzh.lan ([90.32.245.227])
|
||||
by mwinf5d24 with ME
|
||||
id tClC1f0024v5z3u03ClGDX; Sun, 09 Jan 2011 01:45:17 +0100
|
||||
From: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
To: uclibc@uclibc.org
|
||||
Cc: Khem Raj <raj.khem@gmail.com>,
|
||||
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>,
|
||||
Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
Subject: [PATCH 4/7] ARM: transform the EABI/OABI choice into a boolean
|
||||
Date: Sun, 9 Jan 2011 01:45:07 +0100
|
||||
Message-Id: <1294533910-19305-5-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
X-Mailer: git-send-email 1.7.1
|
||||
In-Reply-To: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
References: <1294533910-19305-1-git-send-email-yann.morin.1998@anciens.enib.fr>
|
||||
|
||||
The CONFIG_ARM_OABI option is never used.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
|
||||
Cc: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
||||
Cc: Carmelo AMOROSO <carmelo.amoroso@st.com>
|
||||
---
|
||||
extra/Configs/Config.arm | 23 ++++++++---------------
|
||||
1 files changed, 8 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: git/extra/Configs/Config.arm
|
||||
===================================================================
|
||||
--- git.orig/extra/Configs/Config.arm
|
||||
+++ git/extra/Configs/Config.arm
|
||||
@@ -12,23 +12,16 @@ config FORCE_OPTIONS_FOR_ARCH
|
||||
default y
|
||||
select ARCH_ANY_ENDIAN
|
||||
|
||||
-choice
|
||||
- prompt "Target ABI"
|
||||
- default CONFIG_ARM_EABI
|
||||
+config CONFIG_ARM_EABI
|
||||
+ bool "Build for EABI"
|
||||
help
|
||||
- If you choose "EABI" here, functions and constants required by the
|
||||
- ARM EABI will be built into the library. You should choose "EABI"
|
||||
+ If you say 'y' here, functions and constants required by the
|
||||
+ ARM EABI will be built into the library. You should say 'y'
|
||||
if your compiler uses the ARM EABI, in which case you will also
|
||||
- need a kernel supporting the EABI system call interface, or "OABI"
|
||||
- for a compiler using the old Linux ABI.
|
||||
-
|
||||
-config CONFIG_ARM_OABI
|
||||
- bool "OABI"
|
||||
-
|
||||
-config CONFIG_ARM_EABI
|
||||
- bool "EABI"
|
||||
+ need a kernel supporting the EABI system call interface.
|
||||
|
||||
-endchoice
|
||||
+ If you say 'n' here, then the library will be built for the
|
||||
+ old Linux ABI.
|
||||
|
||||
config COMPILE_IN_THUMB_MODE
|
||||
bool "Build using Thumb mode"
|
|
@ -0,0 +1,181 @@
|
|||
#
|
||||
# General Library Settings
|
||||
#
|
||||
# HAVE_NO_PIC is not set
|
||||
# DOPIC is not set
|
||||
# HAVE_NO_SHARED is not set
|
||||
# ARCH_HAS_NO_LDSO is not set
|
||||
HAVE_SHARED=y
|
||||
# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
|
||||
LDSO_LDD_SUPPORT=y
|
||||
LDSO_CACHE_SUPPORT=y
|
||||
# LDSO_PRELOAD_FILE_SUPPORT is not set
|
||||
LDSO_BASE_FILENAME="ld.so"
|
||||
# UCLIBC_STATIC_LDCONFIG is not set
|
||||
LDSO_RUNPATH=y
|
||||
UCLIBC_CTOR_DTOR=y
|
||||
LDSO_GNU_HASH_SUPPORT=y
|
||||
# HAS_NO_THREADS is not set
|
||||
UCLIBC_HAS_THREADS=y
|
||||
UCLIBC_HAS_THREADS_NATIVE=y
|
||||
PTHREADS_DEBUG_SUPPORT=y
|
||||
# LINUXTHREADS_OLD is not set
|
||||
UCLIBC_HAS_LFS=y
|
||||
# MALLOC is not set
|
||||
# MALLOC_SIMPLE is not set
|
||||
MALLOC_STANDARD=y
|
||||
MALLOC_GLIBC_COMPAT=y
|
||||
UCLIBC_DYNAMIC_ATEXIT=y
|
||||
COMPAT_ATEXIT=y
|
||||
UCLIBC_SUSV3_LEGACY=y
|
||||
UCLIBC_SUSV3_LEGACY_MACROS=y
|
||||
UCLIBC_SUSV4_LEGACY=y
|
||||
UCLIBC_HAS_SHADOW=y
|
||||
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
|
||||
UCLIBC_HAS___PROGNAME=y
|
||||
UNIX98PTY_ONLY=y
|
||||
ASSUME_DEVPTS=y
|
||||
UCLIBC_HAS_LIBUTIL=y
|
||||
UCLIBC_HAS_TM_EXTENSIONS=y
|
||||
UCLIBC_HAS_TZ_CACHING=y
|
||||
UCLIBC_HAS_TZ_FILE=y
|
||||
UCLIBC_HAS_TZ_FILE_READ_MANY=y
|
||||
UCLIBC_TZ_FILE_PATH="/etc/TZ"
|
||||
|
||||
#
|
||||
# Advanced Library Settings
|
||||
#
|
||||
UCLIBC_PWD_BUFFER_SIZE=256
|
||||
UCLIBC_GRP_BUFFER_SIZE=256
|
||||
|
||||
#
|
||||
# Networking Support
|
||||
#
|
||||
UCLIBC_HAS_IPV6=y
|
||||
UCLIBC_HAS_RPC=y
|
||||
UCLIBC_HAS_FULL_RPC=y
|
||||
# UCLIBC_HAS_REENTRANT_RPC is not set
|
||||
UCLIBC_USE_NETLINK=y
|
||||
UCLIBC_SUPPORT_AI_ADDRCONFIG=y
|
||||
|
||||
UCLIBC_HAS_BSD_RES_CLOSE=y
|
||||
UCLIBC_HAS_LIBRESOLV_STUB=y
|
||||
UCLIBC_HAS_LIBNSL_STUB=y
|
||||
|
||||
#
|
||||
# String and Stdio Support
|
||||
#
|
||||
UCLIBC_HAS_STRING_GENERIC_OPT=y
|
||||
UCLIBC_HAS_STRING_ARCH_OPT=y
|
||||
UCLIBC_HAS_CTYPE_TABLES=y
|
||||
UCLIBC_HAS_CTYPE_SIGNED=y
|
||||
# UCLIBC_HAS_CTYPE_UNSAFE is not set
|
||||
UCLIBC_HAS_CTYPE_CHECKED=y
|
||||
# UCLIBC_HAS_CTYPE_ENFORCED is not set
|
||||
UCLIBC_HAS_WCHAR=y
|
||||
# UCLIBC_HAS_LOCALE is not set
|
||||
UCLIBC_HAS_HEXADECIMAL_FLOATS=y
|
||||
UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
|
||||
UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
|
||||
UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
|
||||
UCLIBC_HAS_STDIO_BUFSIZ_256=y
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_4096 is not set
|
||||
# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
|
||||
UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
|
||||
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
|
||||
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
|
||||
# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
|
||||
UCLIBC_HAS_STDIO_GETC_MACRO=y
|
||||
UCLIBC_HAS_STDIO_PUTC_MACRO=y
|
||||
UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
|
||||
# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
|
||||
UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
|
||||
UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
|
||||
UCLIBC_HAS_PRINTF_M_SPEC=y
|
||||
UCLIBC_HAS_ERRNO_MESSAGES=y
|
||||
# UCLIBC_HAS_SYS_ERRLIST is not set
|
||||
UCLIBC_HAS_SIGNUM_MESSAGES=y
|
||||
# UCLIBC_HAS_SYS_SIGLIST is not set
|
||||
UCLIBC_HAS_GNU_GETOPT=y
|
||||
UCLIBC_HAS_GNU_GETSUBOPT=y
|
||||
|
||||
#
|
||||
# Big and Tall
|
||||
#
|
||||
UCLIBC_HAS_REGEX=y
|
||||
# UCLIBC_HAS_REGEX_OLD is not set
|
||||
UCLIBC_HAS_FNMATCH=y
|
||||
# UCLIBC_HAS_FNMATCH_OLD is not set
|
||||
UCLIBC_HAS_WORDEXP=y
|
||||
UCLIBC_HAS_NFTW=y
|
||||
UCLIBC_HAS_FTW=y
|
||||
UCLIBC_HAS_FTS=y
|
||||
UCLIBC_HAS_GLOB=y
|
||||
UCLIBC_HAS_GNU_GLOB=y
|
||||
|
||||
#
|
||||
# Library Installation Options
|
||||
#
|
||||
SHARED_LIB_LOADER_PREFIX="/lib"
|
||||
RUNTIME_PREFIX="/"
|
||||
DEVEL_PREFIX="//usr"
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# UCLIBC_BUILD_PIE is not set
|
||||
# UCLIBC_HAS_ARC4RANDOM is not set
|
||||
# HAVE_NO_SSP is not set
|
||||
# UCLIBC_HAS_SSP is not set
|
||||
UCLIBC_BUILD_RELRO=y
|
||||
UCLIBC_BUILD_NOW=y
|
||||
UCLIBC_BUILD_NOEXECSTACK=y
|
||||
|
||||
#
|
||||
# uClibc development/debugging options
|
||||
#
|
||||
CROSS_COMPILER_PREFIX=""
|
||||
UCLIBC_EXTRA_CFLAGS=""
|
||||
# DODEBUG is not set
|
||||
# DODEBUG_PT is not set
|
||||
# DOSTRIP is not set
|
||||
# DOASSERTS is not set
|
||||
# SUPPORT_LD_DEBUG is not set
|
||||
# SUPPORT_LD_DEBUG_EARLY is not set
|
||||
# UCLIBC_MALLOC_DEBUGGING is not set
|
||||
UCLIBC_HAS_BACKTRACE=y
|
||||
WARNINGS="-Wall"
|
||||
# EXTRA_WARNINGS is not set
|
||||
# DOMULTI is not set
|
||||
# UCLIBC_MJN3_ONLY is not set
|
||||
|
||||
# math stuff for perl
|
||||
DO_C99_MATH=y
|
||||
UCLIBC_HAS_LONG_DOUBLE_MATH=y
|
||||
UCLIBC_HAS_FENV=y
|
||||
UCLIBC_LINUX_SPECIFIC=y
|
||||
UCLIBC_HAS_REALTIME=y
|
||||
UCLIBC_HAS_ADVANCED_REALTIME=y
|
||||
UCLIBC_HAS_NETWORK_SUPPORT=y
|
||||
UCLIBC_HAS_SOCKET=y
|
||||
UCLIBC_HAS_BSD_ERR=y
|
||||
UCLIBC_HAS_SYSLOG=y
|
||||
UCLIBC_HAS_CRYPT=y
|
||||
UCLIBC_HAS_CRYPT_IMPL=y
|
||||
UCLIBC_HAS_GNU_ERROR=y
|
||||
UCLIBC_HAS_PTY=y
|
||||
UCLIBC_BSD_SPECIFIC=y
|
||||
UCLIBC_HAS_EPOLL=y
|
||||
UCLIBC_HAS_FLOATS=y
|
||||
|
||||
# The below option is needed for ARM since depending
|
||||
# upong what intruction set is chosen this will be
|
||||
# enabled. As such it is harmless and will be punted
|
||||
# by menuconfig for other arches.
|
||||
|
||||
# COMPILE_IN_THUMB_MODE is not set
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Version: 0.9.32-git
|
||||
# Mon Jul 19 01:34:29 2010
|
||||
#
|
||||
#
|
||||
# Using ELF file format
|
||||
#
|
||||
FORCE_OPTIONS_FOR_ARCH=y
|
||||
ARCH_HAS_MMU=y
|
||||
ARCH_USE_MMU=y
|
||||
KERNEL_HEADERS="/usr/include"
|
||||
HAVE_DOT_CONFIG=y
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
Index: uclibc-0.9.29/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
|
||||
===================================================================
|
||||
--- uclibc-0.9.29.orig/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
|
||||
+++ uclibc-0.9.29/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
|
||||
@@ -38,4 +38,8 @@
|
||||
/* define if target supports IEEE signed zero floats */
|
||||
#define __UCLIBC_HAVE_SIGNED_ZERO__
|
||||
|
||||
+#ifdef __ARM_EABI__
|
||||
+# define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
|
||||
+#endif
|
||||
+
|
||||
#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
|
|
@ -0,0 +1,30 @@
|
|||
Index: uClibc/test/math/libm-test.inc
|
||||
===================================================================
|
||||
--- uClibc/test/math/libm-test.inc (revision 23784)
|
||||
+++ uClibc/test/math/libm-test.inc (working copy)
|
||||
@@ -3414,7 +3414,6 @@
|
||||
}
|
||||
|
||||
|
||||
-#if 0
|
||||
static void
|
||||
log2_test (void)
|
||||
{
|
||||
@@ -3444,7 +3443,6 @@
|
||||
|
||||
END (log2);
|
||||
}
|
||||
-#endif
|
||||
|
||||
|
||||
static void
|
||||
@@ -4967,9 +4965,7 @@
|
||||
log_test ();
|
||||
log10_test ();
|
||||
log1p_test ();
|
||||
-#if 0
|
||||
log2_test ();
|
||||
-#endif
|
||||
logb_test ();
|
||||
modf_test ();
|
||||
ilogb_test ();
|
|
@ -0,0 +1,39 @@
|
|||
SECTION = "base"
|
||||
require uclibc_${PV}.bb
|
||||
|
||||
DEPENDS = "linux-libc-headers ncurses-native virtual/${TARGET_PREFIX}gcc-initial"
|
||||
PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
|
||||
|
||||
PACKAGES = ""
|
||||
PACKAGES_DYNAMIC = ""
|
||||
|
||||
STAGINGCC = "gcc-cross-initial"
|
||||
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-initial"
|
||||
|
||||
do_install() {
|
||||
# Install initial headers into the cross dir
|
||||
make PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
|
||||
install_headers install_startfiles
|
||||
${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
-o lib/libc.so
|
||||
${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
-o lib/libm.so
|
||||
install -d ${D}${libdir}
|
||||
install -m 755 lib/lib[cm].so ${D}${libdir}
|
||||
# add links to linux-libc-headers: gcc-{cross,crossdk}-intermediate need this.
|
||||
for t in linux asm asm-generic; do
|
||||
if [ -d ${D}${includedir}/$t ]; then
|
||||
rm -rf ${D}${includedir}/$t
|
||||
fi
|
||||
ln -sf ${STAGING_DIR_TARGET}${includedir}/$t ${D}${includedir}/
|
||||
done
|
||||
}
|
||||
do_compile() {
|
||||
:
|
||||
}
|
||||
|
||||
do_siteconfig () {
|
||||
:
|
||||
}
|
||||
|
||||
do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_TCBOOTSTRAP}"
|
|
@ -0,0 +1,30 @@
|
|||
SRCREV="9152c4d67c763fde5712e2d181d92c0d7e1e2ab9"
|
||||
|
||||
require uclibc.inc
|
||||
PR = "${INC_PR}.0"
|
||||
PROVIDES += "virtual/${TARGET_PREFIX}libc-for-gcc"
|
||||
|
||||
SRC_URI = "git://uclibc.org/uClibc.git;branch=${PV};protocol=git \
|
||||
file://uClibc.machine \
|
||||
file://uClibc.distro \
|
||||
file://uclibc-arm-ftruncate64.patch \
|
||||
file://uclibc_enable_log2_test.patch \
|
||||
file://ldso_use_arm_dl_linux_resolve_in_thumb_mode.patch \
|
||||
file://select-force-thumb.patch \
|
||||
file://remove-sub-arch-variants.patch \
|
||||
file://transform-eabi-oabi-choice.patch \
|
||||
file://include-arm-asm.h.patch \
|
||||
file://detect-bx-availibility.patch \
|
||||
file://remove-eabi-oabi-selection.patch \
|
||||
file://powerpc_copysignl.patch \
|
||||
file://argp-support.patch \
|
||||
file://argp-headers.patch \
|
||||
file://remove_attribute_optimize_Os.patch \
|
||||
file://compile-arm-fork-with-O2.patch \
|
||||
file://epoll-asm-fix.patch \
|
||||
file://orign_path.patch \
|
||||
file://rtld_no.patch \
|
||||
file://0001-Config.in.arch-Free-UCLIBC_HAS_FPU-setting-from-depe.patch \
|
||||
file://0001-mips-signalfd.h-SFD_NONBLOCK-for-mips-is-0200-unlike.patch \
|
||||
"
|
||||
S = "${WORKDIR}/git"
|
Loading…
Reference in New Issue