On Sun, 1 May 2011, Patrick Dupre wrote:
It is a perl application calling my own c routines. I made tons of them but here I get:
Can't load '/home/pdupre/perl_lib/i386-linux-thread-multi/auto/Absor_satur/Absor_satur.so' for module Absor_satur: /home/pdupre/perl_lib/i386-linux-thread-multi/auto/Absor_satur/Absor_satur.so: cannot restore segment prot after reloc: Permission denied at /usr/lib/perl5/DynaLoader.pm line 200. at ./Profile.pl line 22
It looks like you might have run afoul of an anti-stack-smashing mechanism. One idea is to mark some parts of memory non-executable. That limits the places to where evil folks can do a pseudo-return. Another idea is to rearrange the places where shared objects are stored. This limits the information avaiable to an evil-doer. An unrelocateable shared object sometimes gets evicted.
I do not know how to debug this !
I wish to link several .o files to make only one .o file not executable (it will relinked later). I would like to first make a prelinked file easier to then link them to the excutable file (ie. with a main).
ld -r can do that, but are you sure you don't just want to stick all the .o files in an archive with ar and link with that static library later?
I've read the linking with -r is *not* the same as just "concatenating", but I'm not sure what the difference is.
You can make an archive.a and use -whole when listing it for inclusion.