1<html> 2<head> 3<title>pcre2jit specification</title> 4</head> 5<body bgcolor="#FFFFFF" text="#00005A" link="#0066FF" alink="#3399FF" vlink="#2222BB"> 6<h1>pcre2jit man page</h1> 7<p> 8Return to the <a href="index.html">PCRE2 index page</a>. 9</p> 10<p> 11This page is part of the PCRE2 HTML documentation. It was generated 12automatically from the original man page. If there is any nonsense in it, 13please consult the man page, in case the conversion went wrong. 14<br> 15<ul> 16<li><a name="TOC1" href="#SEC1">PCRE2 JUST-IN-TIME COMPILER SUPPORT</a> 17<li><a name="TOC2" href="#SEC2">AVAILABILITY OF JIT SUPPORT</a> 18<li><a name="TOC3" href="#SEC3">SIMPLE USE OF JIT</a> 19<li><a name="TOC4" href="#SEC4">MATCHING SUBJECTS CONTAINING INVALID UTF</a> 20<li><a name="TOC5" href="#SEC5">UNSUPPORTED OPTIONS AND PATTERN ITEMS</a> 21<li><a name="TOC6" href="#SEC6">RETURN VALUES FROM JIT MATCHING</a> 22<li><a name="TOC7" href="#SEC7">CONTROLLING THE JIT STACK</a> 23<li><a name="TOC8" href="#SEC8">JIT STACK FAQ</a> 24<li><a name="TOC9" href="#SEC9">FREEING JIT SPECULATIVE MEMORY</a> 25<li><a name="TOC10" href="#SEC10">EXAMPLE CODE</a> 26<li><a name="TOC11" href="#SEC11">JIT FAST PATH API</a> 27<li><a name="TOC12" href="#SEC12">SEE ALSO</a> 28<li><a name="TOC13" href="#SEC13">AUTHOR</a> 29<li><a name="TOC14" href="#SEC14">REVISION</a> 30</ul> 31<br><a name="SEC1" href="#TOC1">PCRE2 JUST-IN-TIME COMPILER SUPPORT</a><br> 32<P> 33Just-in-time compiling is a heavyweight optimization that can greatly speed up 34pattern matching. However, it comes at the cost of extra processing before the 35match is performed, so it is of most benefit when the same pattern is going to 36be matched many times. This does not necessarily mean many calls of a matching 37function; if the pattern is not anchored, matching attempts may take place many 38times at various positions in the subject, even for a single call. Therefore, 39if the subject string is very long, it may still pay to use JIT even for 40one-off matches. JIT support is available for all of the 8-bit, 16-bit and 4132-bit PCRE2 libraries. 42</P> 43<P> 44JIT support applies only to the traditional Perl-compatible matching function. 45It does not apply when the DFA matching function is being used. The code for 46this support was written by Zoltan Herczeg. 47</P> 48<br><a name="SEC2" href="#TOC1">AVAILABILITY OF JIT SUPPORT</a><br> 49<P> 50JIT support is an optional feature of PCRE2. The "configure" option 51--enable-jit (or equivalent CMake option) must be set when PCRE2 is built if 52you want to use JIT. The support is limited to the following hardware 53platforms: 54<pre> 55 ARM 32-bit (v5, v7, and Thumb2) 56 ARM 64-bit 57 Intel x86 32-bit and 64-bit 58 MIPS 32-bit and 64-bit 59 Power PC 32-bit and 64-bit 60 SPARC 32-bit 61</pre> 62If --enable-jit is set on an unsupported platform, compilation fails. 63</P> 64<P> 65A program can tell if JIT support is available by calling <b>pcre2_config()</b> 66with the PCRE2_CONFIG_JIT option. The result is 1 when JIT is available, and 0 67otherwise. However, a simple program does not need to check this in order to 68use JIT. The API is implemented in a way that falls back to the interpretive 69code if JIT is not available. For programs that need the best possible 70performance, there is also a "fast path" API that is JIT-specific. 71</P> 72<br><a name="SEC3" href="#TOC1">SIMPLE USE OF JIT</a><br> 73<P> 74To make use of the JIT support in the simplest way, all you have to do is to 75call <b>pcre2_jit_compile()</b> after successfully compiling a pattern with 76<b>pcre2_compile()</b>. This function has two arguments: the first is the 77compiled pattern pointer that was returned by <b>pcre2_compile()</b>, and the 78second is zero or more of the following option bits: PCRE2_JIT_COMPLETE, 79PCRE2_JIT_PARTIAL_HARD, or PCRE2_JIT_PARTIAL_SOFT. 80</P> 81<P> 82If JIT support is not available, a call to <b>pcre2_jit_compile()</b> does 83nothing and returns PCRE2_ERROR_JIT_BADOPTION. Otherwise, the compiled pattern 84is passed to the JIT compiler, which turns it into machine code that executes 85much faster than the normal interpretive code, but yields exactly the same 86results. The returned value from <b>pcre2_jit_compile()</b> is zero on success, 87or a negative error code. 88</P> 89<P> 90There is a limit to the size of pattern that JIT supports, imposed by the size 91of machine stack that it uses. The exact rules are not documented because they 92may change at any time, in particular, when new optimizations are introduced. 93If a pattern is too big, a call to <b>pcre2_jit_compile()</b> returns 94PCRE2_ERROR_NOMEMORY. 95</P> 96<P> 97PCRE2_JIT_COMPLETE requests the JIT compiler to generate code for complete 98matches. If you want to run partial matches using the PCRE2_PARTIAL_HARD or 99PCRE2_PARTIAL_SOFT options of <b>pcre2_match()</b>, you should set one or both 100of the other options as well as, or instead of PCRE2_JIT_COMPLETE. The JIT 101compiler generates different optimized code for each of the three modes 102(normal, soft partial, hard partial). When <b>pcre2_match()</b> is called, the 103appropriate code is run if it is available. Otherwise, the pattern is matched 104using interpretive code. 105</P> 106<P> 107You can call <b>pcre2_jit_compile()</b> multiple times for the same compiled 108pattern. It does nothing if it has previously compiled code for any of the 109option bits. For example, you can call it once with PCRE2_JIT_COMPLETE and 110(perhaps later, when you find you need partial matching) again with 111PCRE2_JIT_COMPLETE and PCRE2_JIT_PARTIAL_HARD. This time it will ignore 112PCRE2_JIT_COMPLETE and just compile code for partial matching. If 113<b>pcre2_jit_compile()</b> is called with no option bits set, it immediately 114returns zero. This is an alternative way of testing whether JIT is available. 115</P> 116<P> 117At present, it is not possible to free JIT compiled code except when the entire 118compiled pattern is freed by calling <b>pcre2_code_free()</b>. 119</P> 120<P> 121In some circumstances you may need to call additional functions. These are 122described in the section entitled 123<a href="#stackcontrol">"Controlling the JIT stack"</a> 124below. 125</P> 126<P> 127There are some <b>pcre2_match()</b> options that are not supported by JIT, and 128there are also some pattern items that JIT cannot handle. Details are given 129below. In both cases, matching automatically falls back to the interpretive 130code. If you want to know whether JIT was actually used for a particular match, 131you should arrange for a JIT callback function to be set up as described in the 132section entitled 133<a href="#stackcontrol">"Controlling the JIT stack"</a> 134below, even if you do not need to supply a non-default JIT stack. Such a 135callback function is called whenever JIT code is about to be obeyed. If the 136match-time options are not right for JIT execution, the callback function is 137not obeyed. 138</P> 139<P> 140If the JIT compiler finds an unsupported item, no JIT data is generated. You 141can find out if JIT matching is available after compiling a pattern by calling 142<b>pcre2_pattern_info()</b> with the PCRE2_INFO_JITSIZE option. A non-zero 143result means that JIT compilation was successful. A result of 0 means that JIT 144support is not available, or the pattern was not processed by 145<b>pcre2_jit_compile()</b>, or the JIT compiler was not able to handle the 146pattern. 147</P> 148<br><a name="SEC4" href="#TOC1">MATCHING SUBJECTS CONTAINING INVALID UTF</a><br> 149<P> 150When a pattern is compiled with the PCRE2_UTF option, subject strings are 151normally expected to be a valid sequence of UTF code units. By default, this is 152checked at the start of matching and an error is generated if invalid UTF is 153detected. The PCRE2_NO_UTF_CHECK option can be passed to <b>pcre2_match()</b> to 154skip the check (for improved performance) if you are sure that a subject string 155is valid. If this option is used with an invalid string, the result is 156undefined. 157</P> 158<P> 159However, a way of running matches on strings that may contain invalid UTF 160sequences is available. Calling <b>pcre2_compile()</b> with the 161PCRE2_MATCH_INVALID_UTF option has two effects: it tells the interpreter in 162<b>pcre2_match()</b> to support invalid UTF, and, if <b>pcre2_jit_compile()</b> 163is called, the compiled JIT code also supports invalid UTF. Details of how this 164support works, in both the JIT and the interpretive cases, is given in the 165<a href="pcre2unicode.html"><b>pcre2unicode</b></a> 166documentation. 167</P> 168<P> 169There is also an obsolete option for <b>pcre2_jit_compile()</b> called 170PCRE2_JIT_INVALID_UTF, which currently exists only for backward compatibility. 171It is superseded by the <b>pcre2_compile()</b> option PCRE2_MATCH_INVALID_UTF 172and should no longer be used. It may be removed in future. 173</P> 174<br><a name="SEC5" href="#TOC1">UNSUPPORTED OPTIONS AND PATTERN ITEMS</a><br> 175<P> 176The <b>pcre2_match()</b> options that are supported for JIT matching are 177PCRE2_COPY_MATCHED_SUBJECT, PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY, 178PCRE2_NOTEMPTY_ATSTART, PCRE2_NO_UTF_CHECK, PCRE2_PARTIAL_HARD, and 179PCRE2_PARTIAL_SOFT. The PCRE2_ANCHORED and PCRE2_ENDANCHORED options are not 180supported at match time. 181</P> 182<P> 183If the PCRE2_NO_JIT option is passed to <b>pcre2_match()</b> it disables the 184use of JIT, forcing matching by the interpreter code. 185</P> 186<P> 187The only unsupported pattern items are \C (match a single data unit) when 188running in a UTF mode, and a callout immediately before an assertion condition 189in a conditional group. 190</P> 191<br><a name="SEC6" href="#TOC1">RETURN VALUES FROM JIT MATCHING</a><br> 192<P> 193When a pattern is matched using JIT matching, the return values are the same 194as those given by the interpretive <b>pcre2_match()</b> code, with the addition 195of one new error code: PCRE2_ERROR_JIT_STACKLIMIT. This means that the memory 196used for the JIT stack was insufficient. See 197<a href="#stackcontrol">"Controlling the JIT stack"</a> 198below for a discussion of JIT stack usage. 199</P> 200<P> 201The error code PCRE2_ERROR_MATCHLIMIT is returned by the JIT code if searching 202a very large pattern tree goes on for too long, as it is in the same 203circumstance when JIT is not used, but the details of exactly what is counted 204are not the same. The PCRE2_ERROR_DEPTHLIMIT error code is never returned 205when JIT matching is used. 206<a name="stackcontrol"></a></P> 207<br><a name="SEC7" href="#TOC1">CONTROLLING THE JIT STACK</a><br> 208<P> 209When the compiled JIT code runs, it needs a block of memory to use as a stack. 210By default, it uses 32KiB on the machine stack. However, some large or 211complicated patterns need more than this. The error PCRE2_ERROR_JIT_STACKLIMIT 212is given when there is not enough stack. Three functions are provided for 213managing blocks of memory for use as JIT stacks. There is further discussion 214about the use of JIT stacks in the section entitled 215<a href="#stackfaq">"JIT stack FAQ"</a> 216below. 217</P> 218<P> 219The <b>pcre2_jit_stack_create()</b> function creates a JIT stack. Its arguments 220are a starting size, a maximum size, and a general context (for memory 221allocation functions, or NULL for standard memory allocation). It returns a 222pointer to an opaque structure of type <b>pcre2_jit_stack</b>, or NULL if there 223is an error. The <b>pcre2_jit_stack_free()</b> function is used to free a stack 224that is no longer needed. If its argument is NULL, this function returns 225immediately, without doing anything. (For the technically minded: the address 226space is allocated by mmap or VirtualAlloc.) A maximum stack size of 512KiB to 2271MiB should be more than enough for any pattern. 228</P> 229<P> 230The <b>pcre2_jit_stack_assign()</b> function specifies which stack JIT code 231should use. Its arguments are as follows: 232<pre> 233 pcre2_match_context *mcontext 234 pcre2_jit_callback callback 235 void *data 236</pre> 237The first argument is a pointer to a match context. When this is subsequently 238passed to a matching function, its information determines which JIT stack is 239used. If this argument is NULL, the function returns immediately, without doing 240anything. There are three cases for the values of the other two options: 241<pre> 242 (1) If <i>callback</i> is NULL and <i>data</i> is NULL, an internal 32KiB block 243 on the machine stack is used. This is the default when a match 244 context is created. 245 246 (2) If <i>callback</i> is NULL and <i>data</i> is not NULL, <i>data</i> must be 247 a pointer to a valid JIT stack, the result of calling 248 <b>pcre2_jit_stack_create()</b>. 249 250 (3) If <i>callback</i> is not NULL, it must point to a function that is 251 called with <i>data</i> as an argument at the start of matching, in 252 order to set up a JIT stack. If the return from the callback 253 function is NULL, the internal 32KiB stack is used; otherwise the 254 return value must be a valid JIT stack, the result of calling 255 <b>pcre2_jit_stack_create()</b>. 256</pre> 257A callback function is obeyed whenever JIT code is about to be run; it is not 258obeyed when <b>pcre2_match()</b> is called with options that are incompatible 259for JIT matching. A callback function can therefore be used to determine 260whether a match operation was executed by JIT or by the interpreter. 261</P> 262<P> 263You may safely use the same JIT stack for more than one pattern (either by 264assigning directly or by callback), as long as the patterns are matched 265sequentially in the same thread. Currently, the only way to set up 266non-sequential matches in one thread is to use callouts: if a callout function 267starts another match, that match must use a different JIT stack to the one used 268for currently suspended match(es). 269</P> 270<P> 271In a multithread application, if you do not 272specify a JIT stack, or if you assign or pass back NULL from a callback, that 273is thread-safe, because each thread has its own machine stack. However, if you 274assign or pass back a non-NULL JIT stack, this must be a different stack for 275each thread so that the application is thread-safe. 276</P> 277<P> 278Strictly speaking, even more is allowed. You can assign the same non-NULL stack 279to a match context that is used by any number of patterns, as long as they are 280not used for matching by multiple threads at the same time. For example, you 281could use the same stack in all compiled patterns, with a global mutex in the 282callback to wait until the stack is available for use. However, this is an 283inefficient solution, and not recommended. 284</P> 285<P> 286This is a suggestion for how a multithreaded program that needs to set up 287non-default JIT stacks might operate: 288<pre> 289 During thread initalization 290 thread_local_var = pcre2_jit_stack_create(...) 291 292 During thread exit 293 pcre2_jit_stack_free(thread_local_var) 294 295 Use a one-line callback function 296 return thread_local_var 297</pre> 298All the functions described in this section do nothing if JIT is not available. 299<a name="stackfaq"></a></P> 300<br><a name="SEC8" href="#TOC1">JIT STACK FAQ</a><br> 301<P> 302(1) Why do we need JIT stacks? 303<br> 304<br> 305PCRE2 (and JIT) is a recursive, depth-first engine, so it needs a stack where 306the local data of the current node is pushed before checking its child nodes. 307Allocating real machine stack on some platforms is difficult. For example, the 308stack chain needs to be updated every time if we extend the stack on PowerPC. 309Although it is possible, its updating time overhead decreases performance. So 310we do the recursion in memory. 311</P> 312<P> 313(2) Why don't we simply allocate blocks of memory with <b>malloc()</b>? 314<br> 315<br> 316Modern operating systems have a nice feature: they can reserve an address space 317instead of allocating memory. We can safely allocate memory pages inside this 318address space, so the stack could grow without moving memory data (this is 319important because of pointers). Thus we can allocate 1MiB address space, and 320use only a single memory page (usually 4KiB) if that is enough. However, we can 321still grow up to 1MiB anytime if needed. 322</P> 323<P> 324(3) Who "owns" a JIT stack? 325<br> 326<br> 327The owner of the stack is the user program, not the JIT studied pattern or 328anything else. The user program must ensure that if a stack is being used by 329<b>pcre2_match()</b>, (that is, it is assigned to a match context that is passed 330to the pattern currently running), that stack must not be used by any other 331threads (to avoid overwriting the same memory area). The best practice for 332multithreaded programs is to allocate a stack for each thread, and return this 333stack through the JIT callback function. 334</P> 335<P> 336(4) When should a JIT stack be freed? 337<br> 338<br> 339You can free a JIT stack at any time, as long as it will not be used by 340<b>pcre2_match()</b> again. When you assign the stack to a match context, only a 341pointer is set. There is no reference counting or any other magic. You can free 342compiled patterns, contexts, and stacks in any order, anytime. 343Just <i>do not</i> call <b>pcre2_match()</b> with a match context pointing to an 344already freed stack, as that will cause SEGFAULT. (Also, do not free a stack 345currently used by <b>pcre2_match()</b> in another thread). You can also replace 346the stack in a context at any time when it is not in use. You should free the 347previous stack before assigning a replacement. 348</P> 349<P> 350(5) Should I allocate/free a stack every time before/after calling 351<b>pcre2_match()</b>? 352<br> 353<br> 354No, because this is too costly in terms of resources. However, you could 355implement some clever idea which release the stack if it is not used in let's 356say two minutes. The JIT callback can help to achieve this without keeping a 357list of patterns. 358</P> 359<P> 360(6) OK, the stack is for long term memory allocation. But what happens if a 361pattern causes stack overflow with a stack of 1MiB? Is that 1MiB kept until the 362stack is freed? 363<br> 364<br> 365Especially on embedded sytems, it might be a good idea to release memory 366sometimes without freeing the stack. There is no API for this at the moment. 367Probably a function call which returns with the currently allocated memory for 368any stack and another which allows releasing memory (shrinking the stack) would 369be a good idea if someone needs this. 370</P> 371<P> 372(7) This is too much of a headache. Isn't there any better solution for JIT 373stack handling? 374<br> 375<br> 376No, thanks to Windows. If POSIX threads were used everywhere, we could throw 377out this complicated API. 378</P> 379<br><a name="SEC9" href="#TOC1">FREEING JIT SPECULATIVE MEMORY</a><br> 380<P> 381<b>void pcre2_jit_free_unused_memory(pcre2_general_context *<i>gcontext</i>);</b> 382</P> 383<P> 384The JIT executable allocator does not free all memory when it is possible. 385It expects new allocations, and keeps some free memory around to improve 386allocation speed. However, in low memory conditions, it might be better to free 387all possible memory. You can cause this to happen by calling 388pcre2_jit_free_unused_memory(). Its argument is a general context, for custom 389memory management, or NULL for standard memory management. 390</P> 391<br><a name="SEC10" href="#TOC1">EXAMPLE CODE</a><br> 392<P> 393This is a single-threaded example that specifies a JIT stack without using a 394callback. A real program should include error checking after all the function 395calls. 396<pre> 397 int rc; 398 pcre2_code *re; 399 pcre2_match_data *match_data; 400 pcre2_match_context *mcontext; 401 pcre2_jit_stack *jit_stack; 402 403 re = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0, 404 &errornumber, &erroffset, NULL); 405 rc = pcre2_jit_compile(re, PCRE2_JIT_COMPLETE); 406 mcontext = pcre2_match_context_create(NULL); 407 jit_stack = pcre2_jit_stack_create(32*1024, 512*1024, NULL); 408 pcre2_jit_stack_assign(mcontext, NULL, jit_stack); 409 match_data = pcre2_match_data_create(re, 10); 410 rc = pcre2_match(re, subject, length, 0, 0, match_data, mcontext); 411 /* Process result */ 412 413 pcre2_code_free(re); 414 pcre2_match_data_free(match_data); 415 pcre2_match_context_free(mcontext); 416 pcre2_jit_stack_free(jit_stack); 417 418</PRE> 419</P> 420<br><a name="SEC11" href="#TOC1">JIT FAST PATH API</a><br> 421<P> 422Because the API described above falls back to interpreted matching when JIT is 423not available, it is convenient for programs that are written for general use 424in many environments. However, calling JIT via <b>pcre2_match()</b> does have a 425performance impact. Programs that are written for use where JIT is known to be 426available, and which need the best possible performance, can instead use a 427"fast path" API to call JIT matching directly instead of calling 428<b>pcre2_match()</b> (obviously only for patterns that have been successfully 429processed by <b>pcre2_jit_compile()</b>). 430</P> 431<P> 432The fast path function is called <b>pcre2_jit_match()</b>, and it takes exactly 433the same arguments as <b>pcre2_match()</b>. However, the subject string must be 434specified with a length; PCRE2_ZERO_TERMINATED is not supported. Unsupported 435option bits (for example, PCRE2_ANCHORED, PCRE2_ENDANCHORED and 436PCRE2_COPY_MATCHED_SUBJECT) are ignored, as is the PCRE2_NO_JIT option. The 437return values are also the same as for <b>pcre2_match()</b>, plus 438PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial or complete) is requested 439that was not compiled. 440</P> 441<P> 442When you call <b>pcre2_match()</b>, as well as testing for invalid options, a 443number of other sanity checks are performed on the arguments. For example, if 444the subject pointer is NULL, an immediate error is given. Also, unless 445PCRE2_NO_UTF_CHECK is set, a UTF subject string is tested for validity. In the 446interests of speed, these checks do not happen on the JIT fast path, and if 447invalid data is passed, the result is undefined. 448</P> 449<P> 450Bypassing the sanity checks and the <b>pcre2_match()</b> wrapping can give 451speedups of more than 10%. 452</P> 453<br><a name="SEC12" href="#TOC1">SEE ALSO</a><br> 454<P> 455<b>pcre2api</b>(3) 456</P> 457<br><a name="SEC13" href="#TOC1">AUTHOR</a><br> 458<P> 459Philip Hazel (FAQ by Zoltan Herczeg) 460<br> 461University Computing Service 462<br> 463Cambridge, England. 464<br> 465</P> 466<br><a name="SEC14" href="#TOC1">REVISION</a><br> 467<P> 468Last updated: 23 May 2019 469<br> 470Copyright © 1997-2019 University of Cambridge. 471<br> 472<p> 473Return to the <a href="index.html">PCRE2 index page</a>. 474</p> 475