annotate src/s/cygwin.sc @ 4407:4ee73bbe4f8e

Always use boyer_moore in ASCII or Latin-1 buffers with ASCII search strings. 2007-12-26 Aidan Kehoe <kehoea@parhasard.net> * casetab.c: Extend and correct some case table documentation. * search.c (search_buffer): Correct a bug where only the first entry for a character in the case equivalence table was examined in determining if the Boyer-Moore search algorithm is appropriate. If there are case mappings outside of the charset and row of the characters specified in the search string, those case mappings can be safely ignored (and Boyer-Moore search can be used) if we know from the buffer statistics that the corresponding characters cannot occur. * search.c (boyer_moore): Assert that we haven't been passed a string with varying characters sets or rows within character sets. That's what simple_search is for. In the very rare event that a character in the search string has a canonical case mapping that is not in the same character set and row, don't try to search for the canonical character, search for some other character that is in the the desired character set and row. Assert that the case table isn't corrupt. Do not search for any character case mappings that cannot possibly occur in the buffer, given the buffer metadata about its contents.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 26 Dec 2007 17:30:16 +0100
parents 1ab9c4a77230
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1213
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
1 /* Default linker script, for normal executables */
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
2 OUTPUT_FORMAT(pei-i386)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
3 SEARCH_DIR("/usr/i686-pc-cygwin/lib"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/lib/w32api");
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
4 ENTRY(_mainCRTStartup)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
5 SECTIONS
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
6 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
7 .text __image_base__ + __section_alignment__ :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
8 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
9 *(.init)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
10 *(.text)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
11 *(SORT(.text$*))
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
12 *(.glue_7t)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
13 *(.glue_7)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
14 ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
15 LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0);
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
16 ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
17 LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor); LONG (0);
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
18 *(.fini)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
19 /* ??? Why is .gcc_exc here? */
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
20 *(.gcc_exc)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
21 etext = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
22 *(.gcc_except_table)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
23 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
24 /* The Cygwin32 library uses a section to avoid copying certain data
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
25 on fork. This used to be named ".data". The linker used
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
26 to include this between __data_start__ and __data_end__, but that
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
27 breaks building the cygwin32 dll. Instead, we name the section
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
28 ".data_cygwin_nocopy" and explictly include it after __data_end__. */
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
29 .data BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
30 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
31 __data_start__ = . ;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
32 *(.data)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
33 *(.data2)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
34 *(SORT(.data$*))
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
35 __data_end__ = . ;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
36 *(.data_cygwin_nocopy)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
37 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
38 .bss BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
39 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
40 __bss_start__ = . ;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
41 *(.bss)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
42 *(COMMON)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
43 __bss_end__ = . ;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
44 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
45 .rdata BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
46 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
47 *(.rdata)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
48 *(SORT(.rdata$*))
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
49 *(.eh_frame)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
50 ___RUNTIME_PSEUDO_RELOC_LIST__ = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
51 __RUNTIME_PSEUDO_RELOC_LIST__ = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
52 *(.rdata_runtime_pseudo_reloc)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
53 ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
54 __RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
55 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
56 .pdata BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
57 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
58 *(.pdata)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
59 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
60 .edata BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
61 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
62 *(.edata)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
63 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
64 /DISCARD/ :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
65 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
66 *(.debug$S)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
67 *(.debug$T)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
68 *(.debug$F)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
69 *(.drectve)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
70 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
71 .idata BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
72 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
73 /* This cannot currently be handled with grouped sections.
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
74 See pe.em:sort_sections. */
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
75 SORT(*)(.idata$2)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
76 SORT(*)(.idata$3)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
77 /* These zeroes mark the end of the import list. */
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
78 LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
79 SORT(*)(.idata$4)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
80 SORT(*)(.idata$5)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
81 SORT(*)(.idata$6)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
82 SORT(*)(.idata$7)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
83 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
84 .CRT BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
85 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
86 *(SORT(.CRT$*))
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
87 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
88 .endjunk BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
89 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
90 /* end is deprecated, don't use it */
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
91 end = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
92 _end = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
93 __end__ = .;
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
94 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
95 .rsrc BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
96 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
97 *(.rsrc)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
98 *(SORT(.rsrc$*))
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
99 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
100 .reloc BLOCK(__section_alignment__) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
101 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
102 *(.reloc)
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
103 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
104 .stab BLOCK(__section_alignment__) (NOLOAD) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
105 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
106 [ .stab ]
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
107 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
108 .stabstr BLOCK(__section_alignment__) (NOLOAD) :
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
109 {
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
110 [ .stabstr ]
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
111 }
1ab9c4a77230 [xemacs-hg @ 2003-01-15 08:46:18 by youngs]
youngs
parents:
diff changeset
112 }