mach-o: add page_size to backend data.
authorTristan Gingold <tristan.gingold@adacore.com>
Wed, 9 Apr 2014 08:10:44 +0000 (10:10 +0200)
committerTristan Gingold <tristan.gingold@adacore.com>
Fri, 18 Apr 2014 08:45:33 +0000 (10:45 +0200)
This is preliminary work to layout executables.

bfd/
* mach-o.h (bfd_mach_o_backend_data): Add page_size field.
* mach-o-target.c: Check TARGET_PAGESIZE is defined.
(TARGET_NAME_BACKEND): Add TARGET_PAGESIZE.
* mach-o.c (TARGET_PAGESIZE): Define and undefined for
each targets declared.
* mach-o-x86-64.c (TARGET_PAGESIZE): Define.
* mach-o-i386.c (TARGET_PAGESIZE): Define.

bfd/ChangeLog
bfd/mach-o-i386.c
bfd/mach-o-target.c
bfd/mach-o-x86-64.c
bfd/mach-o.c
bfd/mach-o.h

index baa307275d5aae569340d5170bcbda910b85e173..ce7cff5b65233a715838011eda908042a987e69d 100644 (file)
@@ -1,3 +1,13 @@
+2014-04-18  Tristan Gingold  <gingold@adacore.com>
+
+       * mach-o.h (bfd_mach_o_backend_data): Add page_size field.
+       * mach-o-target.c: Check TARGET_PAGESIZE is defined.
+       (TARGET_NAME_BACKEND): Add TARGET_PAGESIZE.
+       * mach-o.c (TARGET_PAGESIZE): Define and undefined for
+       each targets declared.
+       * mach-o-x86-64.c (TARGET_PAGESIZE): Define.
+       * mach-o-i386.c (TARGET_PAGESIZE): Define.
+
 2014-04-18  Tristan Gingold  <gingold@adacore.com>
 
        * mach-o.c (bfd_mach_o_write_thread)
index 8349c66c575e8604dfe70637e2d5caf44ec0c830..6b59ed24aa1bcfd0a21fd64b66c62af1addf92e6 100644 (file)
@@ -397,6 +397,7 @@ const mach_o_segment_name_xlat mach_o_i386_segsec_names_xlat[] =
 #define TARGET_NAME            mach_o_i386_vec
 #define TARGET_STRING          "mach-o-i386"
 #define TARGET_ARCHITECTURE    bfd_arch_i386
+#define TARGET_PAGESIZE                4096
 #define TARGET_BIG_ENDIAN      0
 #define TARGET_ARCHIVE                 0
 #define TARGET_PRIORITY                0
index 65d51182202910d406eb53ec14c21987f4e45090..00bd586c97aab8e6258d5f52c79adf35c48d59f8 100644 (file)
 #error TARGET_ARCHIVE must be defined
 #endif /* TARGET_ARCHIVE */
 
+#ifndef TARGET_PAGESIZE
+#error TARGET_PAGESIZE must be defined
+#endif
+
 #if ((TARGET_ARCHIVE) && (! TARGET_BIG_ENDIAN))
 #error Mach-O fat files must always be big-endian.
 #endif /* ((TARGET_ARCHIVE) && (! TARGET_BIG_ENDIAN)) */
@@ -92,6 +96,7 @@
 static const bfd_mach_o_backend_data TARGET_NAME_BACKEND =
 {
   TARGET_ARCHITECTURE,
+  TARGET_PAGESIZE,
   bfd_mach_o_swap_reloc_in,
   bfd_mach_o_swap_reloc_out,
   bfd_mach_o_print_thread,
index 017a6b891918e73ab2409f4069968c40916eae73..14a7067e9de6ff5b2904ac0348a21cbf4e4949dc 100644 (file)
@@ -356,6 +356,7 @@ const mach_o_segment_name_xlat mach_o_x86_64_segsec_names_xlat[] =
 #define TARGET_NAME            mach_o_x86_64_vec
 #define TARGET_STRING          "mach-o-x86-64"
 #define TARGET_ARCHITECTURE    bfd_arch_i386
+#define TARGET_PAGESIZE                4096
 #define TARGET_BIG_ENDIAN      0
 #define TARGET_ARCHIVE                 0
 #define TARGET_PRIORITY                0
index a7bafb5ccdb49cedbc71765446175bf3640efec3..ab2af7c7f91883d9dc5f3d0ff4606bfa1d664385 100644 (file)
@@ -5084,6 +5084,7 @@ bfd_boolean bfd_mach_o_free_cached_info (bfd *abfd)
 #define TARGET_NAME            mach_o_be_vec
 #define TARGET_STRING          "mach-o-be"
 #define TARGET_ARCHITECTURE    bfd_arch_unknown
+#define TARGET_PAGESIZE                1
 #define TARGET_BIG_ENDIAN      1
 #define TARGET_ARCHIVE                 0
 #define TARGET_PRIORITY                1
@@ -5092,6 +5093,7 @@ bfd_boolean bfd_mach_o_free_cached_info (bfd *abfd)
 #undef TARGET_NAME
 #undef TARGET_STRING
 #undef TARGET_ARCHITECTURE
+#undef TARGET_PAGESIZE
 #undef TARGET_BIG_ENDIAN
 #undef TARGET_ARCHIVE
 #undef TARGET_PRIORITY
@@ -5099,6 +5101,7 @@ bfd_boolean bfd_mach_o_free_cached_info (bfd *abfd)
 #define TARGET_NAME            mach_o_le_vec
 #define TARGET_STRING          "mach-o-le"
 #define TARGET_ARCHITECTURE    bfd_arch_unknown
+#define TARGET_PAGESIZE                1
 #define TARGET_BIG_ENDIAN      0
 #define TARGET_ARCHIVE                 0
 #define TARGET_PRIORITY                1
@@ -5108,6 +5111,7 @@ bfd_boolean bfd_mach_o_free_cached_info (bfd *abfd)
 #undef TARGET_NAME
 #undef TARGET_STRING
 #undef TARGET_ARCHITECTURE
+#undef TARGET_PAGESIZE
 #undef TARGET_BIG_ENDIAN
 #undef TARGET_ARCHIVE
 #undef TARGET_PRIORITY
@@ -5130,6 +5134,7 @@ bfd_boolean bfd_mach_o_free_cached_info (bfd *abfd)
 #define TARGET_NAME            mach_o_fat_vec
 #define TARGET_STRING          "mach-o-fat"
 #define TARGET_ARCHITECTURE    bfd_arch_unknown
+#define TARGET_PAGESIZE                1
 #define TARGET_BIG_ENDIAN      1
 #define TARGET_ARCHIVE                 1
 #define TARGET_PRIORITY                0
@@ -5139,6 +5144,7 @@ bfd_boolean bfd_mach_o_free_cached_info (bfd *abfd)
 #undef TARGET_NAME
 #undef TARGET_STRING
 #undef TARGET_ARCHITECTURE
+#undef TARGET_PAGESIZE
 #undef TARGET_BIG_ENDIAN
 #undef TARGET_ARCHIVE
 #undef TARGET_PRIORITY
index 629459bc3e435c2b081e78a677d1cd89286fe5fb..95827e804e5f976d358bea3c33d822961007b223 100644 (file)
@@ -719,6 +719,7 @@ bfd_mach_o_section_data_for_bfd_name (bfd *, const char *, const char **);
 typedef struct bfd_mach_o_backend_data
 {
   enum bfd_architecture arch;
+  bfd_vma page_size;
   bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *);
   bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *);
   bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *,