Hi John !

On Tue, Jun 28, 2022 at 1:16 PM John Reiser <jrei...@bitwagon.com> wrote:
>
> On 6/28/22, Mathieu Malaterre wrote:
> > % strace ./memcheck/memcheck-arm-linux
> > execve("./memcheck/memcheck-arm-linux",
> > ["./memcheck/memcheck-arm-linux"], 0xbe962730 /* 19 vars */) = 0
> > --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPC, si_addr=0x58072020} ---
> > +++ killed by SIGILL +++
> > zsh: illegal hardware instruction  strace ./memcheck/memcheck-arm-linux
>
> memcheck wants determine the actual hardware capabilities.
> The description given by AT_PLATFORM, AT_HWCAP, AT_HWCAP2
> has not always been complete and correct, so memcheck
> tries the hardware instructions that matter, and memcheck
> is prepared to handle SIGILL if it occurs.  Thus there
> are likely to be a few deliberate SIGILL near the beginning.
> If strace always halts upon SIGILL, without letting
> memcheck's handler catch the SIGILL and recover from it,
> then strace is too eager.  For instance, on x86_64
> strace always aborts on 'int3' regardless of signal handlers.

Thanks for the detailed explanation. I must admit this is way too low
level stuff for me.

> What happens without using 'strace'?

Same symptoms (AFAIK):

% ./memcheck/memcheck-arm-linux
zsh: illegal hardware instruction  ./memcheck/memcheck-arm-linux

Just in case that help, here is the gdb output (*)

Let me know if you need more output.

(*)
% gdb ./memcheck/memcheck-arm-linux
GNU gdb (Debian 12.1-2) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "arm-linux-gnueabihf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./memcheck/memcheck-arm-linux...
(gdb) r
Starting program: /home/malat/valgrind-3.19.0/memcheck/memcheck-arm-linux

Program received signal SIGILL, Illegal instruction.
vgPlain_am_startup (sp_at_startup=3204445840) at
m_aspacemgr/aspacemgr-linux.c:1626
1626       init_nsegment(&seg);
(gdb) bt full
#0  vgPlain_am_startup (sp_at_startup=3204445840) at
m_aspacemgr/aspacemgr-linux.c:1626
        seg = {kind = 0, start = 0, end = 0, smode = SmLower, dev = 0,
ino = 0, offset = 5378467285696512, mode = 3204445844, fnIdx =
-1090521456, hasR = 0 '\000', hasW = 0 '\000', hasX = 38 '&',
          hasT = 88 'X', isCH = 164 '\244'}
        suggested_clstack_end = <optimized out>
        __PRETTY_FUNCTION__ = "vgPlain_am_startup"
#1  0x580ccec4 in valgrind_main (envp=0xbefff69c, argv=0xbefff694,
argc=1) at m_main.c:1431
        loglevel = <optimized out>
        i = <optimized out>
        vex_archinfo = {hwcaps = 1482711920, endness = 0, hwcache_info
= {num_levels = 0, num_caches = 0, caches = 0x0,
icaches_maintain_coherence = 0 '\000'}, ppc_icache_line_szB = 0,
ppc_dcbz_szB = 0,
          ppc_scv_supported = 0 '\000', ppc_dcbzl_szB = 0,
arm64_dMinLine_lg2_szB = 0, arm64_iMinLine_lg2_szB = 0,
arm64_requires_fallback_LLSC = 0 '\000'}
        need_help = <optimized out>
        tid_main = 0
        addr2dihandle = 0x0
        wd = <optimized out>
        need_help = <optimized out>
        tid_main = <optimized out>
        loglevel = <optimized out>
        i = <optimized out>
        addr2dihandle = <optimized out>
        __PRETTY_FUNCTION__ = "valgrind_main"
        vex_archinfo = <optimized out>
        wd = <optimized out>
        tmp_str = <optimized out>
        res = <optimized out>
        val = <optimized out>
        res = <optimized out>
        val = <optimized out>
        s = <optimized out>
        n = <optimized out>
        res = <optimized out>
        val = <optimized out>
        s = <optimized out>
        n = <optimized out>
        val = <optimized out>
        ok = <optimized out>
        errmsg = <optimized out>
        limLo = <optimized out>
        limHi = <optimized out>
        aLocal = <optimized out>
        p = <optimized out>
        cp = <optimized out>
        vex_arch = <optimized out>
        ok = <optimized out>
        buf = <optimized out>
        buf2 = <optimized out>
        fd = <optimized out>
        r = <optimized out>
        nul = <optimized out>
        exename = <optimized out>
        client_auxv = <optimized out>
        client_auxv_len = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
        arg = <optimized out>
        s = <optimized out>
        ok = <optimized out>
        seg_starts = <optimized out>
        n_seg_starts = <optimized out>
        anu = <optimized out>
        change_ownership_v_c_OK = <optimized out>
        co_start = <optimized out>
        co_endPlus = <optimized out>
        buf = <optimized out>
        seg_starts = <optimized out>
        n_seg_starts = <optimized out>
        j = <optimized out>
        n = <optimized out>
        seg = <optimized out>
        anl = <optimized out>
        inaccessible_len = <optimized out>
        seg = <optimized out>
        seg = <optimized out>
#2  _start_in_C_linux (pArgc=0xbefff690) at m_main.c:3125
        r = <optimized out>
        argc = 1
        argv = 0xbefff694
        envp = 0xbefff69c
#3  0x00000000 in ?? ()
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)


_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to