X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libiberty%2FREADME;h=886bd67bc9dd971720b61f260ea325b798f73c48;hb=f952c2244323e4772f3e173e3cc7d7042acce8d2;hp=92dc202929b90af5dfcfd5aa222b14d9f470ad2b;hpb=8f71bf1d543bc7f8060e71577454e7cf1283fe57;p=pf3gnuchains%2Fgcc-fork.git diff --git a/libiberty/README b/libiberty/README index 92dc202929b..886bd67bc9d 100644 --- a/libiberty/README +++ b/libiberty/README @@ -15,7 +15,8 @@ The library must be configured from the top source directory. Don't try to run configure in this directory. Follow the configuration instructions in ../README. -Please report bugs and fixes to "bug-gnu-utils@prep.ai.mit.edu". Thank you. +Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to +"gcc-patches@gcc.gnu.org". Thank you. ADDING A NEW FILE ================= @@ -27,62 +28,29 @@ that are "optional" will be included in the library only if "needed." To add a new required file, edit Makefile to add the source file name to CFILES and the object file to REQUIRED_OFILES. -Adding a new optional file is more fragile. As a general rule, -an optional file will be included in the library if it provides -functionality missing in the "standard" C library. -For most hosts, the Makefile automatically figures out which -functionality is missing by compiling and linking a dummy test -program, and examining the error messages. - -So to get this to work, you should do the following: - -1) Select one function defined in the file you're adding. -For example, the getcwd function. -2) Add that function to the list in the file functions.def. -3) The name of the new file must be the same as the function -you've chosen with the .c suffix added. E.g. getcwd() must be -defined in getcwd.c. (The file can define other functions as well.) -4) In Makefile.in, add the name of the source file (e.g. getcwd.c) -to CFILES. - -The file you've added (e.g. getcwd.c) should compile and work -on all hosts where it is needed (e.g. not found when linking -the dummy.c program). It does not have to work or even -compile on hosts where it is not needed. +To add a new optional file, it must provide a single function, and the +name of the function must be the same as the name of the file. + + * Add the source file name to CFILES. + + * Add the function to name to the funcs shell variable in + configure.ac. -HOW THE AUTOMATIC CONFIGURATION WORKS -===================================== - -The libiberty.a target (in RULE1) depends on $(DO_ALSO). -For normal configurations, DO_ALSO=needed-list. - -So needed-list is first made. The needed-list rule compiles -dummy.c. Because dummy.c includes functions.def, the -resulting object file will contain a call to each of the -optional functions (for simplicity assume each optional file -defines a single function). This object file will be linked -against the standard libraries (as defined by using $(CC) -and various flags). Any function missing will causes the -linker to emit an error message. We assume the name -of the missing function(s) are in the error message(s). -The awk script find-needed.awk has been generated from -functions.def. It is used to search the linker output -messages for words that match the functions listed in -functions.def. The list of functions found is written -on a single line to the file needed-list. - -After needed-list has been generated, the libiberty.a -target (in RULE1) just calls 'make' recursively. -It passes the contents of needed-list using the -definition (expanded) HOST_OFILES="`cat needed-list`". -It also tells the inferior 'make' to use RULE2. - -The inferior 'make' is very conventional: The main -rule is $(RULE2) (which is libiberty.a). It depends -on a list of object files: $(REQUIRED_OFILES) $(HOST_OFILES) -(and $(EXTRA_OFILES), which is usually empty). The superior -'make' passes in $(HOST_OFILES); the others are fixed -in the Makefile. + * Add the function to the AC_CHECK_FUNCS lists just after the + setting of the funcs shell variable. These AC_CHECK_FUNCS calls + are never executed; they are there to make autoheader work + better. + + * Consider the special cases of building libiberty; as of this + writing, the special cases are newlib and VxWorks. If a + particular special case provides the function, you do not need + to do anything. If it does not provide the function, add the + object file to LIBOBJS, and add the function name to the case + controlling whether to define HAVE_func. + +The optional file you've added (e.g. getcwd.c) should compile and work +on all hosts where it is needed. It does not have to work or even +compile on hosts where it is not needed. ADDING A NEW CONFIGURATION ========================== @@ -95,34 +63,4 @@ If the fully automatic scheme doesn't work, you may be able to get by with defining EXTRA_OFILES in your Makefile stub. This is a list of object file names that should be treated as required for this configuration - they will be included in libiberty.a, -regardless of whatever might be in the C library. Moreover, -when the dummy.c program is linked, it will be linked with -$(EXTRA_OFILES). Therefore, if a function in functions.def -is defined by one of the EXTRA_OFILES, it will not be listed as -"needed". Thus if your hal9000 host needs a special implementation -of getcwd, you can just create hal9000-getcwd.c, and define: - EXTRA_OFILES=hal9000-getcwd.o -Or if you want to use the libiberty version of strstr(), -even though there is a version in the C library (it might be -buggy or slow), just define: - EXTRA_OFILES=strstr.o - -You can create a "manual" host configuration FOO with a file -config/mh-FOO. In it, the HOST_OFILES macro should explicitly -list that subset of the optional files that should be in the -library. You should also set: - DO_ALSO = -This overrides all of the magic needed to automatically -determine which files are "needed." However, keeping that list -up to date is another matter... - -HOW THE MANUAL CONFIGURATION WORKS -================================== - -This also uses a recursive make, but the superior make -does not do anything interesting - it just calls the -inferior make with HOST_OFILES defined as $(HOST_OFILES), -which is the list you created in your configuration. - -You probably don't want to depend on manual configuration, -because keeping the HOST_OFILES list up-to-date will be a pain. +regardless of whatever might be in the C library.