VirtualBox

Ignore:
Timestamp:
Apr 21, 2020 11:14:20 AM (5 years ago)
Author:
vboxsync
Message:

IPRT: Implement RTStrEnd in assembly & C++, drop the inlining. memchr from VC++ 14.1 cannot deal wtih RTSTR_MAX on unaligned string, it may step into an electric fence page after the end of the string. bugref:8489

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/string/RTStrEnd.asm

    r83872 r83886  
    11; $Id$
    22;; @file
    3 ; IPRT - No-CRT memchr - AMD64 & X86.
     3; IPRT - RTStrEnd - AMD64 & X86.
    44;
    55
     
    3030
    3131;;
    32 ; @param    pv      gcc: rdi  msc: ecx  x86:[esp+4]   wcall: eax
    33 ; @param    ch      gcc: esi  msc: edx  x86:[esp+8]   wcall: edx
    34 ; @param    cb      gcc: rdx  msc: r8   x86:[esp+0ch] wcall: ebx
    35 RT_NOCRT_BEGINPROC memchr
     32; @param    pszString   gcc: rdi  msc: rcx  x86:[esp+4]   wcall: eax
     33; @param    cchMax      gcc: rsi  msc: rdx  x86:[esp+8]   wcall: edx
     34;
     35BEGINPROC_EXPORTED RTStrEnd
    3636        cld
    3737%ifdef RT_ARCH_AMD64
    3838 %ifdef ASM_CALL64_MSC
    39         or      r8, r8
     39        or      rdx, rdx
    4040        jz      .not_found_early
    4141
    4242        mov     r9, rdi                 ; save rdi
    43         mov     eax, edx
    4443        mov     rdi, rcx
    45         mov     rcx, r8
     44        mov     rcx, rdx
    4645 %else
    47         mov     rcx, rdx
     46        mov     rcx, rsi
    4847        jrcxz   .not_found_early
    49 
    50         mov     eax, esi
    5148 %endif
    5249
    5350%else
    5451 %ifdef ASM_CALL32_WATCOM
    55         mov     ecx, ebx
     52        mov     ecx, edx
    5653        jecxz   .not_found_early
    57         xchg    eax, edx
    58         xchg    edi, edx                ; load and save edi.
     54        mov     edx, edi                ; save rdi
     55        mov     edi, eax
    5956 %else
    60         mov     ecx, [esp + 0ch]
     57        mov     ecx, [esp + 8]
    6158        jecxz   .not_found_early
    6259        mov     edx, edi                ; save edi
    63         mov     eax, [esp + 8]
    6460        mov     edi, [esp + 4]
    6561 %endif
    6662%endif
     63        xor     eax, eax                ; we're searching for zero
    6764
    6865        ; do the search
     
    9087        xor     eax, eax
    9188        ret
    92 ENDPROC RT_NOCRT(memchr)
     89ENDPROC RTStrEnd
    9390
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette