dl-sysdep.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /* Copyright (C) 2003, 2004 Red Hat, Inc.
  2. * Contributed by Alexandre Oliva <aoliva@redhat.com>
  3. * Based on ../i386/dl-sysdep.h
  4. *
  5. * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  6. */
  7. /*
  8. * Various assembly language/system dependent hacks that are required
  9. * so that we can minimize the amount of platform specific code.
  10. */
  11. /*
  12. * Define this if the system uses RELOCA.
  13. */
  14. #undef ELF_USES_RELOCA
  15. /* JMPREL relocs are inside the DT_RELA table. */
  16. #define ELF_MACHINE_PLTREL_OVERLAP
  17. #define DL_NO_COPY_RELOCS
  18. /* Here we define the magic numbers that this dynamic loader should accept */
  19. #define MAGIC1 EM_CYGNUS_FRV
  20. #undef MAGIC2
  21. /* Used for error messages */
  22. #define ELF_TARGET "FR-V"
  23. /* Need bootstrap relocations */
  24. #define ARCH_NEEDS_BOOTSTRAP_RELOCS
  25. extern int _dl_linux_resolve(void) __attribute__((__visibility__("hidden")));
  26. /* We must force strings used early in the bootstrap into the data
  27. segment, such that they are referenced with GOTOFF instead of
  28. GPREL, because GPREL needs the GOT to have already been
  29. relocated. */
  30. #undef SEND_EARLY_STDERR
  31. #define SEND_EARLY_STDERR(S) \
  32. do { static char __s[] = (S); SEND_STDERR (__s); } while (0)
  33. #define DL_RELOC_ADDR(ADDR, LOADADDR) \
  34. (__reloc_pointer ((void*)(ADDR), (LOADADDR).map))
  35. /* Make sure we only load libraries that use the same number of
  36. general-purpose and floating-point registers the dynamic loader was
  37. compiled for. */
  38. #define DL_CHECK_REG_COUNT(flags) \
  39. (((flags & EF_FRV_GPR_MASK) == EF_FRV_GPR_32 ? __FRV_GPR__ == 32 : 1) \
  40. && ((flags & EF_FRV_GPR_MASK) == EF_FRV_GPR_64 ? __FRV_GPR__ == 64 : 1) \
  41. && ((flags & EF_FRV_FPR_MASK) == EF_FRV_FPR_32 ? __FRV_FPR__ == 32 : 1) \
  42. && ((flags & EF_FRV_FPR_MASK) == EF_FRV_FPR_64 ? __FRV_FPR__ == 64 : 1) \
  43. && ((flags & EF_FRV_FPR_MASK) == EF_FRV_FPR_NONE ? __FRV_FPR__ == 0 : 1))
  44. /* We only support loading FDPIC independently-relocatable shared
  45. libraries. It probably wouldn't be too hard to support loading
  46. shared libraries that require relocation by the same amount, but we
  47. don't know that they exist or would be useful, and the dynamic
  48. loader code could leak the whole-library map unless we keeping a
  49. bit more state for DL_LOADADDR_UNMAP and DL_LIB_UNMAP, so let's
  50. keep things simple for now. */
  51. #define DL_CHECK_LIB_TYPE(epnt, piclib, _dl_progname, libname) \
  52. do \
  53. { \
  54. if (((epnt)->e_flags & EF_FRV_FDPIC) && ! ((epnt)->e_flags & EF_FRV_PIC)) \
  55. (piclib) = 2; \
  56. else \
  57. { \
  58. _dl_internal_error_number = LD_ERROR_NOTDYN; \
  59. _dl_dprintf(2, "%s: '%s' is not an FDPIC shared library" \
  60. "\n", (_dl_progname), (libname)); \
  61. _dl_close(infile); \
  62. return NULL; \
  63. } \
  64. \
  65. if (! DL_CHECK_REG_COUNT ((epnt)->e_flags)) \
  66. { \
  67. _dl_internal_error_number = LD_ERROR_NOTDYN; \
  68. _dl_dprintf(2, "%s: '%s' assumes different register counts" \
  69. "\n", (_dl_progname), (libname)); \
  70. _dl_close(infile); \
  71. } \
  72. } \
  73. while (0)
  74. #include "../fdpic/dl-sysdep.h"