On 05/21/2015 11:02 PM, Sriraman Tallam wrote: > On Thu, May 21, 2015 at 2:51 PM, Pedro Alves <pal...@redhat.com> wrote: >> On 05/21/2015 10:12 PM, Sriraman Tallam wrote: >>> >>> My original proposal, for x86_64 only, was to add >>> -fno-plt=<function-name>. This lets the user decide for which >>> functions PLT must be avoided. Let the compiler always generate an >>> indirect call using call *func@GOTPCREL(%rip). We could do this for >>> non-PIC code too. No need for linker fixups since this relies on the >>> user to know that func is from a shared object. >> >> Having to pass function names on the command line seems like an odd >> interface. E.g, you'll need to pass the mangled name for >> C++ functions. Any reason this isn't a function attribute? > > It is not clear to me where I would stick the attribute. Example > usage in foo.cc: > > #include<string.h> > > int main() { > int n = memcmp(....); > } > > I want memcmp to not go through PLT, do you propose explicitly > re-declaring it in foo.cc with the attribute?
I guess you'd do: #include<string.h> __attribute__((no_plt)) typeof (memcpy) memcpy; int main() { int n = memcmp(....); } or even: #include<string.h> int main() { if (hotpath) { __attribute__((no_plt)) typeof (memcpy) memcpy; for (..) { int n = memcmp(....); } } else { int n = memcmp(....); } } or globally: $ cat no-plt/string.h: #include_next <string.h> __attribute__((no_plt)) typeof (memcpy) memcpy; $ gcc -I no-plt/ ... Thanks, Pedro Alves