summaryrefslogtreecommitdiff
path: root/patches/glibc/2.2.3
diff options
context:
space:
mode:
Diffstat (limited to 'patches/glibc/2.2.3')
-rw-r--r--patches/glibc/2.2.3/errlist-1.9.patch30
-rw-r--r--patches/glibc/2.2.3/errlist-arm.patch48
-rw-r--r--patches/glibc/2.2.3/glibc-2.2.3-mips-base-addr-got.patch276
-rw-r--r--patches/glibc/2.2.3/glibc-2.2.5-mips-clone-local-label.patch47
-rw-r--r--patches/glibc/2.2.3/glibc-manual-stdin.texi-1.127.patch25
5 files changed, 426 insertions, 0 deletions
diff --git a/patches/glibc/2.2.3/errlist-1.9.patch b/patches/glibc/2.2.3/errlist-1.9.patch
new file mode 100644
index 0000000..594569b
--- /dev/null
+++ b/patches/glibc/2.2.3/errlist-1.9.patch
@@ -0,0 +1,30 @@
+Fixes:
+
+../sysdeps/unix/sysv/linux/errlist.c:41: weak declaration of `_old_sys_nerr' must precede definition
+make[2]: *** [/home/dank/downloads/crosstool-0.24/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.3/build-glibc/stdio-common/errlist.os] Error 1
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/Attic/errlist.c,v
+retrieving revision 1.8
+retrieving revision 1.9
+diff -u -r1.8 -r1.9
+--- libc/sysdeps/unix/sysv/linux/errlist.c 2001/07/06 04:56:12 1.8
++++ libc/sysdeps/unix/sysv/linux/errlist.c 2002/05/20 06:56:53 1.9
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
++/* Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -38,10 +38,9 @@
+ const int __old_sys_nerr = OLD_ERRLIST_SIZE;
+
+ strong_alias (__old_sys_nerr, _old_sys_nerr);
+-weak_alias (__old_sys_nerr, _old_sys_nerr)
+ compat_symbol (libc, __old_sys_nerr, _sys_nerr, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_nerr, sys_nerr, GLIBC_2_0);
+-weak_alias (__old_sys_errlist, _old_sys_errlist);
++strong_alias (__old_sys_errlist, _old_sys_errlist);
+ compat_symbol (libc, __old_sys_errlist, _sys_errlist, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_errlist, sys_errlist, GLIBC_2_0);
+ #endif
diff --git a/patches/glibc/2.2.3/errlist-arm.patch b/patches/glibc/2.2.3/errlist-arm.patch
new file mode 100644
index 0000000..ac4eb5b
--- /dev/null
+++ b/patches/glibc/2.2.3/errlist-arm.patch
@@ -0,0 +1,48 @@
+Subject: patch for arm
+From: Philip Blundell <Philip dot Blundell at pobox dot com>
+To: libc-hacker at sources dot redhat dot com
+Content-Type: text/plain
+Content-Transfer-Encoding: 7bit
+Date: 22 Jul 2002 20:12:06 +0100
+Message-Id: <1027365126.725.10.camel@kc>
+Mime-Version: 1.0
+
+The mainline seems to need this patch in order to compile.
+
+p.
+
+2002-07-22 Philip Blundell <philb@gnu.org>
+
+ * sysdeps/unix/sysv/linux/arm/errlist.c: Remove extra weak alias
+ definiton of _old_sys_nerr. Define _old_sys_errlist as strong
+ alias.
+
+Index: sysdeps/unix/sysv/linux/arm/errlist.c
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/arm/errlist.c,v
+retrieving revision 1.4
+diff -u -p -r1.4 errlist.c
+--- glibc/sysdeps/unix/sysv/linux/arm/errlist.c 6 Jul 2001 04:56:13 -0000 1.4
++++ glibc/sysdeps/unix/sysv/linux/arm/errlist.c 22 Jul 2002 19:10:57 -0000
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1998, 2000 Free Software Foundation, Inc.
++/* Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -38,10 +38,9 @@ extern const char *const *__old_sys_errl
+ const int __old_sys_nerr = OLD_ERRLIST_SIZE;
+
+ strong_alias (__old_sys_nerr, _old_sys_nerr);
+-weak_alias (__old_sys_nerr, _old_sys_nerr)
+ compat_symbol (libc, __old_sys_nerr, _sys_nerr, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_nerr, sys_nerr, GLIBC_2_0);
+-weak_alias (__old_sys_errlist, _old_sys_errlist);
++strong_alias (__old_sys_errlist, _old_sys_errlist);
+ compat_symbol (libc, __old_sys_errlist, _sys_errlist, GLIBC_2_0);
+ compat_symbol (libc, _old_sys_errlist, sys_errlist, GLIBC_2_0);
+ #endif
+
+
+
+
diff --git a/patches/glibc/2.2.3/glibc-2.2.3-mips-base-addr-got.patch b/patches/glibc/2.2.3/glibc-2.2.3-mips-base-addr-got.patch
new file mode 100644
index 0000000..1773002
--- /dev/null
+++ b/patches/glibc/2.2.3/glibc-2.2.3-mips-base-addr-got.patch
@@ -0,0 +1,276 @@
+From http://www.ltc.com/~brad/mips/glibc-2.2.3-mips-base-addr-got.diff
+
+Hopefully fixes the error:
+
+/opt/crosstool/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.3/lib/gcc-lib/mipsel-unknown-linux-gnu/3.2.3/../../../../mipsel-unknown-linux-gnu/bin/ld: target elf32-littlemips not found
+collect2: ld returned 1 exit status
+make[2]: *** [/home/dank/downloads/crosstool-0.24/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.3/build-glibc/elf/ld.so] Error 1
+
+
+diff -urNbB glibc-2.2.3/sysdeps/mips/dl-machine.h glibc-2.2.3-mips/sysdeps/mips/dl-machine.h
+--- glibc-2.2.3/sysdeps/mips/dl-machine.h Mon Mar 26 23:53:28 2001
++++ glibc-2.2.3-mips/sysdeps/mips/dl-machine.h Sun Aug 12 11:08:17 2001
+@@ -61,23 +61,6 @@
+ in l_info array. */
+ #define DT_MIPS(x) (DT_MIPS_##x - DT_LOPROC + DT_NUM)
+
+-/*
+- * MIPS libraries are usually linked to a non-zero base address. We
+- * subtract the base address from the address where we map the object
+- * to. This results in more efficient address space usage.
+- *
+- * FIXME: By the time when MAP_BASE_ADDR is called we don't have the
+- * DYNAMIC section read. Until this is fixed make the assumption that
+- * libraries have their base address at 0x5ffe0000. This needs to be
+- * fixed before we can safely get rid of this MIPSism.
+- */
+-#if 0
+-#define MAP_BASE_ADDR(l) ((l)->l_info[DT_MIPS(BASE_ADDRESS)] ? \
+- (l)->l_info[DT_MIPS(BASE_ADDRESS)]->d_un.d_ptr : 0)
+-#else
+-#define MAP_BASE_ADDR(l) 0x5ffe0000
+-#endif
+-
+ /* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in
+ with the run-time address of the r_debug structure */
+ #define ELF_MACHINE_DEBUG_SETUP(l,r) \
+@@ -557,51 +540,30 @@
+ /* Do nothing. */
+ }
+
++#ifndef RTLD_BOOTSTRAP
+ /* Relocate GOT. */
+ static inline void
+ elf_machine_got_rel (struct link_map *map, int lazy)
+ {
+ ElfW(Addr) *got;
+ ElfW(Sym) *sym;
++ const ElfW(Half) *vernum;
+ int i, n, symidx;
+- /* This function is loaded in dl-reloc as a nested function and can
+- therefore access the variables scope and strtab from
+- _dl_relocate_object. */
+-#ifdef RTLD_BOOTSTRAP
+-# define RESOLVE_GOTSYM(sym,sym_index) 0
+-#else
+-# define RESOLVE_GOTSYM(sym,sym_index) \
++
++#define RESOLVE_GOTSYM(sym,vernum,sym_index) \
+ ({ \
+ const ElfW(Sym) *ref = sym; \
++ const struct r_found_version *version \
++ = vernum ? &map->l_versions [vernum [sym_index]] : NULL; \
+ ElfW(Addr) value; \
+- \
+- switch (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL) \
+- { \
+- default: \
+- { \
+- const ElfW(Half) *vernum = \
+- (const void *) D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]); \
+- ElfW(Half) ndx = vernum[sym_index]; \
+- const struct r_found_version *version = &l->l_versions[ndx]; \
+- \
+- if (version->hash != 0) \
+- { \
+- value = _dl_lookup_versioned_symbol(strtab + sym->st_name,\
+- map, \
+- &ref, scope, version, \
+- R_MIPS_REL32, 0); \
+- break; \
+- } \
+- /* Fall through. */ \
+- } \
+- case 0: \
+- value = _dl_lookup_symbol (strtab + sym->st_name, map, &ref, \
+- scope, R_MIPS_REL32, 0); \
+- } \
+- \
++ value = RESOLVE (&ref, version, R_MIPS_REL32); \
+ (ref)? value + ref->st_value: 0; \
+ })
+-#endif /* RTLD_BOOTSTRAP */
++
++ if (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL)
++ vernum = (const void *) D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]);
++ else
++ vernum = NULL;
+
+ got = (ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]);
+
+@@ -639,10 +601,10 @@
+ && sym->st_value && lazy)
+ *got = sym->st_value + map->l_addr;
+ else
+- *got = RESOLVE_GOTSYM (sym, symidx);
++ *got = RESOLVE_GOTSYM (sym, vernum, symidx);
+ }
+ else if (sym->st_shndx == SHN_COMMON)
+- *got = RESOLVE_GOTSYM (sym, symidx);
++ *got = RESOLVE_GOTSYM (sym, vernum, symidx);
+ else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC
+ && *got != sym->st_value
+ && lazy)
+@@ -653,7 +615,7 @@
+ *got += map->l_addr;
+ }
+ else
+- *got = RESOLVE_GOTSYM (sym, symidx);
++ *got = RESOLVE_GOTSYM (sym, vernum, symidx);
+
+ ++got;
+ ++sym;
+@@ -661,9 +623,8 @@
+ }
+
+ #undef RESOLVE_GOTSYM
+-
+- return;
+ }
++#endif
+
+ /* Set up the loaded object described by L so its stub function
+ will jump to the on-demand fixup code __dl_runtime_resolve. */
+diff -urNbB glibc-2.2.3/sysdeps/mips/mips64/rtld-parms glibc-2.2.3-mips/sysdeps/mips/mips64/rtld-parms
+--- glibc-2.2.3/sysdeps/mips/mips64/rtld-parms Sat Jul 12 18:26:11 1997
++++ glibc-2.2.3-mips/sysdeps/mips/mips64/rtld-parms Wed Dec 31 19:00:00 1969
+@@ -1,3 +0,0 @@
+-ifndef rtld-wordsize
+-rtld-wordsize = 64
+-endif
+diff -urNbB glibc-2.2.3/sysdeps/mips/mipsel/rtld-parms glibc-2.2.3-mips/sysdeps/mips/mipsel/rtld-parms
+--- glibc-2.2.3/sysdeps/mips/mipsel/rtld-parms Sat Jul 12 18:26:15 1997
++++ glibc-2.2.3-mips/sysdeps/mips/mipsel/rtld-parms Wed Dec 31 19:00:00 1969
+@@ -1,3 +0,0 @@
+-ifndef rtld-oformat
+-rtld-oformat = elf32-littlemips
+-endif
+diff -urNbB glibc-2.2.3/sysdeps/mips/rtld-ldscript.in glibc-2.2.3-mips/sysdeps/mips/rtld-ldscript.in
+--- glibc-2.2.3/sysdeps/mips/rtld-ldscript.in Sat Jul 12 18:23:14 1997
++++ glibc-2.2.3-mips/sysdeps/mips/rtld-ldscript.in Wed Dec 31 19:00:00 1969
+@@ -1,106 +0,0 @@
+-OUTPUT_FORMAT("@@rtld-oformat@@")
+-OUTPUT_ARCH(@@rtld-arch@@)
+-ENTRY(@@rtld-entry@@)
+-SECTIONS
+-{
+- /* Read-only sections, merged into text segment: */
+- . = @@rtld-base@@;
+- .reginfo : { *(.reginfo) }
+- .dynamic : { *(.dynamic) }
+- .dynstr : { *(.dynstr) }
+- .dynsym : { *(.dynsym) }
+- .hash : { *(.hash) }
+- .rel.text : { *(.rel.text) }
+- .rela.text : { *(.rela.text) }
+- .rel.data : { *(.rel.data) }
+- .rela.data : { *(.rela.data) }
+- .rel.rodata : { *(.rel.rodata) }
+- .rela.rodata : { *(.rela.rodata) }
+- .rel.got : { *(.rel.got) }
+- .rela.got : { *(.rela.got) }
+- .rel.ctors : { *(.rel.ctors) }
+- .rela.ctors : { *(.rela.ctors) }
+- .rel.dtors : { *(.rel.dtors) }
+- .rela.dtors : { *(.rela.dtors) }
+- .rel.init : { *(.rel.init) }
+- .rela.init : { *(.rela.init) }
+- .rel.fini : { *(.rel.fini) }
+- .rela.fini : { *(.rela.fini) }
+- .rel.bss : { *(.rel.bss) }
+- .rela.bss : { *(.rela.bss) }
+- .rel.plt : { *(.rel.plt) }
+- .rela.plt : { *(.rela.plt) }
+- .rodata : { *(.rodata) }
+- .rodata1 : { *(.rodata1) }
+- .init : { *(.init) } =0
+- .text :
+- {
+- *(.text)
+- *(.stub)
+- /* .gnu.warning sections are handled specially by elf32.em. */
+- *(.gnu.warning)
+- } =0
+- .fini : { *(.fini) } =0
+- /* Adjust the address for the data segment. We want to adjust up to
+- the same address within the page on the next page up. It would
+- be more correct to do this:
+- . = 0x10000000;
+- The current expression does not correctly handle the case of a
+- text segment ending precisely at the end of a page; it causes the
+- data segment to skip a page. The above expression does not have
+- this problem, but it will currently (2/95) cause BFD to allocate
+- a single segment, combining both text and data, for this case.
+- This will prevent the text segment from being shared among
+- multiple executions of the program; I think that is more
+- important than losing a page of the virtual address space (note
+- that no actual memory is lost; the page which is skipped can not
+- be referenced). */
+- . += 0x10000;
+- .data :
+- {
+- *(.data)
+- CONSTRUCTORS
+- }
+- .data1 : { *(.data1) }
+- .ctors : { *(.ctors) }
+- .dtors : { *(.dtors) }
+- _gp = ALIGN(16) + 0x7ff0;
+- .got :
+- {
+- *(.got.plt) *(.got)
+- }
+- /* We want the small data sections together, so single-instruction offsets
+- can access them all, and initialized data all before uninitialized, so
+- we can shorten the on-disk segment size. */
+- .sdata : { *(.sdata) }
+- .lit8 : { *(.lit8) }
+- .lit4 : { *(.lit4) }
+- .sbss : { *(.sbss) *(.scommon) }
+- .bss :
+- {
+- *(.dynbss)
+- *(.bss)
+- *(COMMON)
+- }
+- /* The normal linker scripts created by the binutils doesn't have the
+- symbols end and _end which breaks ld.so's dl-minimal.c. */
+- _end = . ;
+- PROVIDE (end = .);
+- /* These are needed for ELF backends which have not yet been
+- converted to the new style linker. */
+- .stab 0 : { *(.stab) }
+- .stabstr 0 : { *(.stabstr) }
+- /* DWARF debug sections.
+- Symbols in the .debug DWARF section are relative to the beginning of the
+- section so we begin .debug at 0. It's not clear yet what needs to happen
+- for the others. */
+- .debug 0 : { *(.debug) }
+- .debug_srcinfo 0 : { *(.debug_srcinfo) }
+- .debug_aranges 0 : { *(.debug_aranges) }
+- .debug_pubnames 0 : { *(.debug_pubnames) }
+- .debug_sfnames 0 : { *(.debug_sfnames) }
+- .line 0 : { *(.line) }
+- /* These must appear regardless of . */
+- .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+- .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+-}
+diff -urNbB glibc-2.2.3/sysdeps/mips/rtld-parms glibc-2.2.3-mips/sysdeps/mips/rtld-parms
+--- glibc-2.2.3/sysdeps/mips/rtld-parms Mon Jul 21 19:04:07 1997
++++ glibc-2.2.3-mips/sysdeps/mips/rtld-parms Wed Dec 31 19:00:00 1969
+@@ -1,15 +0,0 @@
+-ifndef rtld-wordsize
+-rtld-wordsize = 32
+-endif
+-ifndef rtld-oformat
+-rtld-oformat = elf$(rtld-wordsize)-bigmips
+-endif
+-ifndef rtld-arch
+-rtld-arch = mips
+-endif
+-ifndef rtld-entry
+-rtld-entry = __start
+-endif
+-ifndef rtld-base
+-rtld-base = 0x0fb60000 + SIZEOF_HEADERS
+-endif
diff --git a/patches/glibc/2.2.3/glibc-2.2.5-mips-clone-local-label.patch b/patches/glibc/2.2.3/glibc-2.2.5-mips-clone-local-label.patch
new file mode 100644
index 0000000..66fee29
--- /dev/null
+++ b/patches/glibc/2.2.3/glibc-2.2.5-mips-clone-local-label.patch
@@ -0,0 +1,47 @@
+This is a workaround for
+
+mipsel-unknown-linux-gnu-gcc ../sysdeps/unix/sysv/linux/mips/clone.S -c -I../include -I. -I/home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/misc -I.. -I../libio -I/home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc -I../sysdeps/mips/elf -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/mips -I../sysdeps/unix/sysv/linux/mips -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/mips -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/mips/mipsel -I../sysdeps/mips/fpu -I../sysdeps/mips -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /home3/dank/crosstool-0.7/result/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/lib/gcc-lib/mipsel-unknown-linux-gnu/3.2.3/include -isystem /home3/dank/crosstool-0.7/result/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/mipsel-unknown-linux-gnu/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DASSEMBLER -o /home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/misc/clone.o
+../sysdeps/unix/sysv/linux/mips/clone.S: Assembler messages:
+../sysdeps/unix/sysv/linux/mips/clone.S:66: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
+make[2]: *** [/home3/dank/crosstool-0.7/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.5/build-glibc/misc/clone.o] Error 1
+
+which was using h.j.lu's binutils-2.13.90.0.18.
+
+
+But see http://lists.debian.org/debian-mips/2003/debian-mips-200305/msg00011.html
+which says
+"A newer version of binutils (CVS post 2003-03-12) fixes it without
+the need of changing perfectly legal code."
+So presumably this can be ditched sooner or later.
+
+From http://honk.physik.uni-konstanz.de/~agx/linux-mips/glibc/patches/applied/clone-local-label.diff
+
+2003-03-13 Guido Guenther <agx@sigxcpu.org>
+
+ * sysdeps/unix/sysv/linux/mips/clone.S: introduce and use local label
+ .Lthread_start since current binutils don't allow branches to globally
+ visible symbols.
+
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/mips/clone.S,v
+retrieving revision 1.10
+diff -u -r1.10 clone.S
+--- glibc-2.2.5/sysdeps/unix/sysv/linux/mips/clone.S 12 Mar 2003 01:04:51 -0000 1.10
++++ glibc-2.2.5/sysdeps/unix/sysv/linux/mips/clone.S 12 Mar 2003 19:04:39 -0000
+@@ -63,7 +63,7 @@
+ syscall
+
+ bnez a3,error
+- beqz v0,__thread_start
++ beqz v0,.Lthread_start
+
+ /* Successful return from the parent */
+ addiu sp,32
+@@ -85,6 +85,7 @@
+ debug info. */
+
+ ENTRY(__thread_start)
++.Lthread_start:
+ /* cp is already loaded. */
+ .cprestore 16
+ /* The stackframe has been created on entry of clone(). */
diff --git a/patches/glibc/2.2.3/glibc-manual-stdin.texi-1.127.patch b/patches/glibc/2.2.3/glibc-manual-stdin.texi-1.127.patch
new file mode 100644
index 0000000..c694525
--- /dev/null
+++ b/patches/glibc/2.2.3/glibc-manual-stdin.texi-1.127.patch
@@ -0,0 +1,25 @@
+Fixes error
+./stdio.texi:3269: First argument to cross-reference may not be empty.
+./stdio.texi:3270: First argument to cross-reference may not be empty.
+makeinfo: Removing output file `/home/dank/downloads/crosstool-0.24/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.3/glibc-2.2.3/manual/libc.info' due to errors; use --force to preserve.
+make[2]: *** [libc.info] Error 2
+make[2]: Leaving directory `/home/dank/downloads/crosstool-0.24/build/mipsel-unknown-linux-gnu/gcc-3.2.3-glibc-2.2.3/glibc-2.2.3/manual'
+
+===================================================================
+RCS file: /cvs/glibc/libc/manual/stdio.texi,v
+retrieving revision 1.126
+retrieving revision 1.127
+diff -u -r1.126 -r1.127
+--- libc/manual/stdio.texi 2001/06/06 07:11:31 1.126
++++ libc/manual/stdio.texi 2001/07/31 18:57:16 1.127
+@@ -3265,8 +3265,8 @@
+ If you are trying to read input that doesn't match a single, fixed
+ pattern, you may be better off using a tool such as Flex to generate a
+ lexical scanner, or Bison to generate a parser, rather than using
+-@code{scanf}. For more information about these tools, see @ref{, , ,
+-flex.info, Flex: The Lexical Scanner Generator}, and @ref{, , ,
++@code{scanf}. For more information about these tools, see @ref{Top, , ,
++flex.info, Flex: The Lexical Scanner Generator}, and @ref{Top, , ,
+ bison.info, The Bison Reference Manual}.
+
+ @node Input Conversion Syntax