mardi 21 juillet 2015

different versions of gcc crash with SIGSEGV address boundary

I have a small library which I normally compile with gcc-4.9 and create both a shared (so) and static version, although I always use the shared version.

My other app (which uses that library) also compiles with gcc-4.9. Now, due to completely irrelevant reasons, I had reverted to gcc-4.8. When I compiled my app with 4.8 it started crashing when I started it, giving the SIGSEGV Address boundary error.

“./icarus” terminated by signal SIGSEGV (Address boundary error)

First thing I tried was to see in gdb what was wrong, but to my surprise gdb also crashed without being able to run my app.

(gdb) run
Starting program: /home/alex/Projects/Icarus/branches/epsilon/build/icarus 
warning: the debug information found in "/lib64/ld-2.19.so" does not match "/lib64/ld-linux-x86-64.so.2" (CRC mismatch).

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
fish: “gdb ./icarus” terminated by signal SIGSEGV (Address boundary error)

I finally changed back to gcc/g++ 4.9, and the issue was resolved. However I would really like to understand why this happened. I was under the impression that even different ABI/gcc/g++ versions should be compatible?

System is Debian 8.0 and I am using C++11. I have made no code changes from the previous working version, so this must be an issue with gcc/g++ version changes?

Aucun commentaire:

Enregistrer un commentaire