function_reordering_plugin.c includes <elf.h> which is not available on non-ELF platforms building a cross-compiler. This patch checks for <elf.h> before including it. Otherwise, it redefines the macros used. This is safe because the macros will not change.
For context, this linker plugin itself is only available in the google 4_6 branch and I will port it to other branches and make it available for review for trunk soon. 2012-02-24 Sriraman Tallam <tmsri...@google.com> * function_reordering_plugin.c: Check for presence of elf.h. Otherwise, redefine the elf macros used. Ok to commit? Thanks, -Sri.
Index: function_reordering_plugin/function_reordering_plugin.c =================================================================== --- function_reordering_plugin/function_reordering_plugin.c (revision 184564) +++ function_reordering_plugin/function_reordering_plugin.c (working copy) @@ -43,11 +43,23 @@ along with this program; see the file COPYING3. I #include <stdlib.h> #include <assert.h> #include <string.h> -#include <elf.h> +#if defined (__ELF__) + #include <elf.h> +#endif #include "config.h" #include "plugin-api.h" #include "callgraph.h" +/* #include <elf.h> Not available on Darwin. + Rather than dealing with cross-compilation includes, hard code the + values we need, as these will not change. */ +#ifndef SHT_NULL + #define SHT_NULL 0 +#endif +#ifndef SHT_PROGBITS + #define SHT_PROGBITS 1 +#endif + enum ld_plugin_status claim_file_hook (const struct ld_plugin_input_file *file, int *claimed); enum ld_plugin_status all_symbols_read_hook ();