Compiling GCC for different x86 CPU generation
U.Mutlu
um@mutluit.com
Tue Jul 24 10:10:00 GMT 2018
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
>
More information about the Gcc-help
mailing list