diff options
Diffstat (limited to 'bfd/arc-plt.h')
-rw-r--r-- | bfd/arc-plt.h | 93 |
1 files changed, 83 insertions, 10 deletions
diff --git a/bfd/arc-plt.h b/bfd/arc-plt.h index ad1b86f..e11b72e 100644 --- a/bfd/arc-plt.h +++ b/bfd/arc-plt.h @@ -22,9 +22,6 @@ #ifndef ARC_PLT_H #define ARC_PLT_H -#include "sysdep.h" -#include "bfd.h" - /* Instructions appear in memory as a sequence of half-words (16 bit); individual half-words are represented on the target in target byte order. We use 'unsigned short' on the host to represent the PLT templates, @@ -95,15 +92,47 @@ struct plt_version_t }; #define PLT_TYPE_START(NAME) \ - extern const insn_hword NAME##_plt_entry[]; \ - extern const struct plt_reloc NAME##_plt_entry_relocs[]; \ - extern const insn_hword NAME##_plt_elem[]; \ - extern const struct plt_reloc NAME##_plt_elem_relocs[]; + const insn_hword NAME##_plt_entry[] = { +#define PLT_TYPE_END(NAME) }; +#define PLT_ENTRY(...) __VA_ARGS__, +#define PLT_ELEM(...) +#define ENTRY_RELOC(...) +#define ELEM_RELOC(...) +#include "arc-plt.def" -#define PLT_TYPE_END(NAME) +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + +#define PLT_TYPE_START(NAME) \ + const struct plt_reloc NAME##_plt_entry_relocs[] = { +#define PLT_TYPE_END(NAME) \ + {0, 0, 0, LAST_RELOC, 0} \ + }; #define PLT_ENTRY(...) #define PLT_ELEM(...) +#define ENTRY_RELOC(...) { __VA_ARGS__ }, +#define ELEM_RELOC(...) + +#include "arc-plt.def" + +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + + +#define PLT_TYPE_START(NAME) \ + const insn_hword NAME##_plt_elem[] = { +#define PLT_TYPE_END(NAME) }; +#define PLT_ENTRY(...) +#define PLT_ELEM(...) __VA_ARGS__, #define ENTRY_RELOC(...) #define ELEM_RELOC(...) @@ -116,6 +145,50 @@ struct plt_version_t #undef ENTRY_RELOC #undef ELEM_RELOC -extern struct plt_version_t plt_versions[PLT_MAX]; +#define PLT_TYPE_START(NAME) \ + const struct plt_reloc NAME##_plt_elem_relocs[] = { +#define PLT_TYPE_END(NAME) \ + {0, 0, 0, LAST_RELOC, 0} \ + }; +#define PLT_ENTRY(...) +#define PLT_ELEM(...) +#define ENTRY_RELOC(...) +#define ELEM_RELOC(...) { __VA_ARGS__ }, + +#include "arc-plt.def" + +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + + +#define PLT_TYPE_START(NAME) \ + { \ + .entry = &NAME##_plt_entry, \ + .entry_size = sizeof (NAME##_plt_entry), \ + .elem = &NAME##_plt_elem, \ + .elem_size = sizeof (NAME##_plt_elem), \ + .entry_relocs = NAME##_plt_entry_relocs, \ + .elem_relocs = NAME##_plt_elem_relocs +#define PLT_TYPE_END(NAME) }, +#define PLT_ENTRY(...) +#define PLT_ELEM(...) +#define ENTRY_RELOC(...) +#define ELEM_RELOC(...) +const struct plt_version_t plt_versions[PLT_MAX] = { + +#include "arc-plt.def" + +}; +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + -#endif +#endif /* ARC_PLT_H */ |