RFC: GCC plugin to find encrypted function pointer calls in glibc

Aldy Hernandez aldyh@redhat.com
Thu May 19 13:00:00 GMT 2016


Sorry, I thought I had already responded to this.

On 05/05/2016 08:47 AM, Mikhail Maltsev wrote:
> On 05/05/2016 01:10 PM, Aldy Hernandez wrote:
>> You can leave the attributes enabled unconditionally.  GCC ignores unknown
>> attributes, so the old compiler compiling the attributed source will behave as
>> usual.
>>
>> However, you will get an "unknown attribute ignored" warning with -Wall, but you
>> can easily silence that particular warning just for the wrapper:
>>
>> #pragma GCC diagnostic push
>> #pragma GCC diagnostic ignored "-Wattributes"
>> static inline void
>> __attribute__((SOME_POSSIBLY_UNKNOWN_ATTRIBUTE))
>> wrapper_function (void)
>> {
>> }
>> #pragma GCC diagnostic pop
>>
> Another option is:
>
> 1. Define attribute as a macro:
> #ifdef __PLUGIN_LOADED__
> #  define PLUGIN_ATTRIBUTE __attribute__((SOME_ATTRIBUTE))
> #else
> #  define PLUGIN_ATTRIBUTE /* nothing */
> #endif
>
> ...
>
> static inline void
> PLUGIN_ATTRIBUTE
> wrapper_function (void)
> {
> }
>
> 2. Define __PLUGIN_LOADED__ from PLUGIN_START_UNIT event:
>
> static void
> start_unit(void* /*event_data*/, void* /*data*/)
> {
>    gcc_assert(parse_in);
>    cpp_define(parse_in, "__PLUGIN_LOADED__=1");
> }
>
> int
> plugin_init(plugin_name_args* plugin_info, plugin_gcc_version* version)
> {
>    ...
>    register_callback(plugin_name, PLUGIN_START_UNIT, start_unit, nullptr);
>    ...
> }
>

Sounds good.  I can certainly provide a pre-processor macro if it works 
for y'all.

Also, what attribute name would folks prefer?

1. function_pointer_demangle{r}
2. pointer_demangle{r}
3. pointer_decrypt

??

I have no preference, but if no one has strong opinions, I'm arbitrarily 
choosing "pointer_demangler".

Aldy



More information about the Libc-alpha mailing list