From: Rich Felker <dalias@libc.org>
To: "tenspd137 ." <dcday137@gmail.com>
Cc: musl@lists.openwall.com
Subject: Re: Illegal instruction in __copy_tls()
Date: Wed, 5 Jun 2019 16:07:47 -0400 [thread overview]
Message-ID: <20190605200747.GL1506@brightrain.aerifal.cx> (raw)
In-Reply-To: <CAB=m8wKevO1tOZ8ZXqdAcF2rqPMgOx_A10AL296a40+W8NPGzA@mail.gmail.com>
On Wed, Jun 05, 2019 at 01:53:58PM -0600, tenspd137 . wrote:
> Sure -
>
> strace -d -v ./a.out:
> strace: ptrace_setoptions = 0x51
> strace: new tcb for pid 26302, active tcbs:1
> strace: [wait(0x80137f) = 26302] WIFSTOPPED,sig=SIGSTOP,EVENT_STOP (128)
> strace: pid 26302 has TCB_STARTUP, initializing it
> strace: [wait(0x80057f) = 26302] WIFSTOPPED,sig=SIGTRAP,EVENT_STOP (128)
> strace: [wait(0x00127f) = 26302] WIFSTOPPED,sig=SIGCONT
> strace: [wait(0x00857f) = 26302] WIFSTOPPED,sig=133
> execve("./a.out", ["./a.out"], ["SSH_CONNECTION=15.86.136.27 5196"...,
> "LANG=en_US.UTF-8", "XDG_SESSION_ID=41", "USER=dayd",
> "PWD=/home/dayd/projects/musl-tes"..., "HOME=/home/dayd",
> "SSH_CLIENT=xx.xxx.xxx.xx 51960 22", "CCACHE_DIR=/ssd/dayd/.ccache",
> "VMWARE_USE_SHIPPED_GTK=yes", "XDG_DATA_DIRS=/usr/local/share:/"...,
> "USECCACHE=ON", "SSH_TTY=/dev/pts/2", "MAIL=/var/mail/dayd",
> "TERM=rxvt-unicode-256color", "SHELL=/bin/bash", "SHLVL=1",
> "PYTHONPATH=:/home/dayd/projects/"..., "LOGNAME=dayd",
> "DBUS_SESSION_BUS_ADDRESS=unix:pa"...,
> "XDG_RUNTIME_DIR=/run/user/6686",
> "PATH=/usr/lib/ccache/bin/:/usr/l"..., "USEDISTCC=OFF",
> "_=/usr/bin/strace", "OLDPWD=/home/dayd/projects"]strace:
> [wait(0x04057f) = 26302] WIFSTOPPED,sig=SIGTRAP,EVENT_EXEC (4)
> strace: [wait(0x00857f) = 26302] WIFSTOPPED,sig=133
> ) = 0
> strace: [wait(0x00047f) = 26302] WIFSTOPPED,sig=SIGILL
> --- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPN, si_addr=0x40169e} ---
> strace: [wait(0x06057f) = 26302] WIFSTOPPED,sig=SIGTRAP,EVENT_EXIT (6)
> strace: [wait(0x000084) = 26302] WIFSIGNALED,core,sig=SIGILL
> +++ killed by SIGILL (core dumped) +++
> strace: dropped tcb for pid 26302, 0 remain
> Illegal instruction (core dumped)
> ******************************************************************************************
> (gdb) bt
> #0 0x00000000004016ae in __copy_tls ()
> #1 0x0000000000000000 in ?? ()
> *****************************************************************************************
>
> (gdb) disassemble
> Dump of assembler code for function __copy_tls:
> 0x0000000000401680 <+0>: push %r13
> 0x0000000000401682 <+2>: mov %rdi,%r13
> 0x0000000000401685 <+5>: push %r12
> 0x0000000000401687 <+7>: push %rbp
> 0x0000000000401688 <+8>: push %rbx
> 0x0000000000401689 <+9>: sub $0x8,%rsp
> 0x000000000040168d <+13>: mov 0x410c(%rip),%rax #
> 0x4057a0 <__libc+32>
> 0x0000000000401694 <+20>: mov 0x410d(%rip),%rcx #
> 0x4057a8 <__libc+40>
> 0x000000000040169b <+27>: mov 0x40f6(%rip),%rbx #
> 0x405798 <__libc+24>
> 0x00000000004016a2 <+34>: lea -0xe0(%rdi,%rax,1),%rax
> 0x00000000004016aa <+42>: lea -0x1(%rcx),%r12
> => 0x00000000004016ae <+46>: andn %rax,%r12,%r12
This instruction, andn, is not in the base x86_64 ISA. It's part of
the BMI1 extension:
https://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets#BMI1_(Bit_Manipulation_Instruction_Set_1)
Apparently Gentoo is providing cross compilers that default to
producing "native ISA level" code for the host, rather than baseline
ISA for the target. But:
> as a bonus (I thought this might also help):
> (%:~/projects/musl-test)┌- x86_64-pc-linux-musl-gcc -v -static -O0 -g
> hello.c
> Using built-in specs.
> COLLECT_GCC=x86_64-pc-linux-musl-gcc
> COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-musl/9.1.0/lto-wrapper
> Target: x86_64-pc-linux-musl
> Configured with:
> /var/tmp/portage/cross-x86_64-pc-linux-musl/gcc-9.1.0/work/gcc-9.1.0/configure
> --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-musl
> --build=x86_64-pc-linux-gnu --prefix=/usr
> --bindir=/usr/x86_64-pc-linux-gnu/x86_64-pc-linux-musl/gcc-bin/9.1.0
> --includedir=/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/include
> --datadir=/usr/share/gcc-data/x86_64-pc-linux-musl/9.1.0
> --mandir=/usr/share/gcc-data/x86_64-pc-linux-musl/9.1.0/man
> --infodir=/usr/share/gcc-data/x86_64-pc-linux-musl/9.1.0/info
> --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/include/g++-v9
> --with-python-dir=/share/gcc-data/x86_64-pc-linux-musl/9.1.0/python
> --enable-languages=c,c++,fortran --enable-obsolete --enable-secureplt
> --disable-werror --with-system-zlib --enable-nls
> --without-included-gettext --enable-checking=release
> --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo 9.1.0
> p1.0' --disable-esp --enable-libstdcxx-time
> --enable-poison-system-directories
> --with-sysroot=/usr/x86_64-pc-linux-musl --disable-bootstrap
> --enable-__cxa_atexit --disable-multilib --with-multilib-list=m64
> --disable-altivec --disable-fixed-point --enable-targets=all
> --enable-libgomp --disable-libmudflap --disable-libssp
> --disable-systemtap --disable-vtable-verify --disable-libvtv
> --enable-lto --without-isl --disable-libsanitizer --enable-default-pie
> --enable-default-ssp
> Thread model: posix
> gcc version 9.1.0 (Gentoo 9.1.0 p1.0)
> COLLECT_GCC_OPTIONS='-v' '-static' '-O0' '-g' '-mtune=generic' '-march=x86-64'
> /usr/libexec/gcc/x86_64-pc-linux-musl/9.1.0/cc1 -quiet -v hello.c
> -quiet -dumpbase hello.c -mtune=generic -march=x86-64 -auxbase hello
> -g -O0 -version -o /tmp/ccoTkh38.s
> GNU C17 (Gentoo 9.1.0 p1.0) version 9.1.0 (x86_64-pc-linux-musl)
> compiled by GNU C version 8.3.0, GMP version 6.1.2, MPFR version
> 4.0.2, MPC version 1.1.0, isl version none
> GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
> ignoring nonexistent directory "/usr/x86_64-pc-linux-musl/usr/local/include"
> ignoring nonexistent directory
> "/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/../../../../x86_64-pc-linux-musl/include"
> #include "..." search starts here:
> #include <...> search starts here:
> /usr/x86_64-pc-linux-musl/usr/include
> /usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/include
> End of search list.
> GNU C17 (Gentoo 9.1.0 p1.0) version 9.1.0 (x86_64-pc-linux-musl)
> compiled by GNU C version 8.3.0, GMP version 6.1.2, MPFR version
> 4.0.2, MPC version 1.1.0, isl version none
> GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
> Compiler executable checksum: a3183e5f435d1938198d432af6db159b
> COLLECT_GCC_OPTIONS='-v' '-static' '-O0' '-g' '-mtune=generic' '-march=x86-64'
> /usr/libexec/gcc/x86_64-pc-linux-musl/as -v --64 -o /tmp/ccHq7CL6.o
> /tmp/ccoTkh38.s
> GNU assembler version 2.32.0 (x86_64-pc-linux-musl) using BFD version
> (Gentoo 2.32 p2) 2.32.0
> COMPILER_PATH=/usr/libexec/gcc/x86_64-pc-linux-musl/9.1.0/:/usr/libexec/gcc/x86_64-pc-linux-musl/9.1.0/:/usr/libexec/gcc/x86_64-pc-linux-musl/:/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/:/usr/lib/gcc/x86_64-pc-linux-musl/
> LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/:/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/../../../../x86_64-pc-linux-musl/lib/:/usr/x86_64-pc-linux-musl/lib/:/usr/x86_64-pc-linux-musl/usr/lib/
> COLLECT_GCC_OPTIONS='-v' '-static' '-O0' '-g' '-mtune=generic' '-march=x86-64'
> /usr/libexec/gcc/x86_64-pc-linux-musl/9.1.0/collect2 -plugin
> /usr/libexec/gcc/x86_64-pc-linux-musl/9.1.0/liblto_plugin.so
> -plugin-opt=/usr/libexec/gcc/x86_64-pc-linux-musl/9.1.0/lto-wrapper
> -plugin-opt=-fresolution=/tmp/ccWcifv4.res
> -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh
> -plugin-opt=-pass-through=-lc --sysroot=/usr/x86_64-pc-linux-musl -m
> elf_x86_64 -static /usr/x86_64-pc-linux-musl/usr/lib/crt1.o
> /usr/x86_64-pc-linux-musl/usr/lib/crti.o
> /usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/crtbeginT.o
> -L/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0
> -L/usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/../../../../x86_64-pc-linux-musl/lib
> -L/usr/x86_64-pc-linux-musl/lib -L/usr/x86_64-pc-linux-musl/usr/lib
> /tmp/ccHq7CL6.o --start-group -lgcc -lgcc_eh -lc --end-group
> /usr/lib/gcc/x86_64-pc-linux-musl/9.1.0/crtend.o
> /usr/x86_64-pc-linux-musl/usr/lib/crtn.o
> COLLECT_GCC_OPTIONS='-v' '-static' '-O0' '-g' '-mtune=generic' '-march=x86-64'
>
> mtune=generic and march=x86-64 suggests it isn't trying to do
> something weird on the compile computer.
Indeed, it looks like the default is right. So you probably need to
check how musl was built. Is it also a package provided by Gentoo, and
did they perhaps use -march=native even though it's being cross
compiled?
Rich
next prev parent reply other threads:[~2019-06-05 20:07 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-05 18:16 tenspd137 .
2019-06-05 18:37 ` Rich Felker
2019-06-05 19:53 ` tenspd137 .
2019-06-05 20:07 ` Rich Felker [this message]
2019-06-05 21:27 ` tenspd137 .
2019-06-05 21:56 ` Michael Everitt
2019-06-05 23:09 ` tenspd137 .
2019-06-05 23:32 ` tenspd137 .
2019-06-05 23:34 ` Michael Everitt
2019-06-05 23:37 ` tenspd137 .
2019-06-05 23:41 ` tenspd137 .
2019-06-06 0:24 ` Rich Felker
2019-06-06 0:34 ` tenspd137 .
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190605200747.GL1506@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=dcday137@gmail.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).