Re: Compiling GCC for different x86 CPU generation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



What happens if you do this:
  $ gfortran -g -o hello_world hello_world.f90
  $ gdb --args ./hello_world
    and in gdb then issue "run", ..., then issue "quit"
?


Andrew Janke wrote on 07/24/2018 10:06 AM:


On 7/24/18 1:58 AM, Marc Glisse wrote:
On Tue, 24 Jul 2018, Andrew Janke wrote:

I am having difficulty compiling GCC for a different generation of x86 CPU.
I would like to produce a portable/redistributable build of GCC to be
distributed along with a packaging of GNU Octave. So I would like to build
it for the Core2 architecture, even though my build box has a Skylake CPU.

This is for GCC 8.1.0 on macOS.

It seems like setting "-march=core2" in CFLAGS, BOOT_CFLAGS, and
CFLAGS_FOR_TARGET is the way to do this, but it doesn't seem to be working.
When I do the build, and then copy the built GCC to an older Ivy Bridge
Mac, and attempt to use gfortran to compile a program, it errors out with
an "internal compiler error: Illegal instruction: 4" error message.

Here you are supposed to use a debugger to find out what instruction this is
and where it is (could be in libgmp for instance).


 >
Thanks.

I'm trying to use gdb 8.0.1 to do this, but it doesn't seem to be stopping the
program when SIGILL is raised for the illegal instruction. Or maybe SIGILL
isn't being raised, and something else is happening? Is gfortran doing
something special that's preventing the debugger from capturing it, or maybe
I'm using the debugger wrong?

[~/tmp/test_gfortran]
$ cat hello_world.f90
program hello
   print *, "Hello World!"
end program hello
[~/tmp/test_gfortran]
$ sudo gdb -q /Applications/Octave-4.4.0.app/Contents/Resources/usr/bin/gfortran
Reading symbols from
/Applications/Octave-4.4.0.app/Contents/Resources/usr/bin/gfortran...(no
debugging symbols found)...done.
(gdb) r hello_world.f90
Starting program:
/Applications/Octave-4.4.0.app/Contents/Resources/usr/bin/gfortran
hello_world.f90
[New Thread 0xd03 of process 812]
warning: unhandled dyld version (15)
<built-in>: internal compiler error: Illegal instruction: 4
libbacktrace could not find executable to open
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
[Inferior 1 (process 812) exited with code 01]
(gdb) bt
No stack.
(gdb) info signals SIGILL
Signal        Stop    Print    Pass to program    Description
SIGILL        Yes    Yes    Yes        Illegal instruction
(gdb)

I haven't been able to figure out how to get lldb to do a breakpoint at the
illegal instruction, either.

This is with "csrutil disable" done, so gdb works. I couldn't get the code
signing method to work.

I think the "unhandled dyld version (15)" is a red herring, since GDB 8.0.1
doesn't include
https://github.com/bminor/binutils-gdb/commit/4bbd4ef219c5b4c7d437618ba8937af86dd1032e,

which updates the maximum handled dyld version.

Cheers,
Andrew





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux