aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Gingold <tristan.gingold@adacore.com>2014-04-09 10:10:44 +0200
committerTristan Gingold <tristan.gingold@adacore.com>2014-04-18 10:45:33 +0200
commit4384b28422294779be111ac24fb34fb6bfe57b32 (patch)
tree9399a5bb07f116bd6334cf9cfc8b59e38e8edc05
parent452216ab0978a5684aacc76a422efd910d7c15df (diff)
downloadgdb-4384b28422294779be111ac24fb34fb6bfe57b32.zip
gdb-4384b28422294779be111ac24fb34fb6bfe57b32.tar.gz
gdb-4384b28422294779be111ac24fb34fb6bfe57b32.tar.bz2
mach-o: add page_size to backend data.
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.
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/mach-o-i386.c1
-rw-r--r--bfd/mach-o-target.c5
-rw-r--r--bfd/mach-o-x86-64.c1
-rw-r--r--bfd/mach-o.c6
-rw-r--r--bfd/mach-o.h1
6 files changed, 24 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index baa3072..ce7cff5 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,15 @@
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)
(bfd_mach_o_write_section_32, bfd_mach_o_write_section_64)
(bfd_mach_o_write_segment_32, bfd_mach_o_write_segment_64)
diff --git a/bfd/mach-o-i386.c b/bfd/mach-o-i386.c
index 8349c66..6b59ed2 100644
--- a/bfd/mach-o-i386.c
+++ b/bfd/mach-o-i386.c
@@ -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
diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c
index 65d5118..00bd586 100644
--- a/bfd/mach-o-target.c
+++ b/bfd/mach-o-target.c
@@ -85,6 +85,10 @@
#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,
diff --git a/bfd/mach-o-x86-64.c b/bfd/mach-o-x86-64.c
index 017a6b8..14a7067 100644
--- a/bfd/mach-o-x86-64.c
+++ b/bfd/mach-o-x86-64.c
@@ -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
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index a7bafb5..ab2af7c 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -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
diff --git a/bfd/mach-o.h b/bfd/mach-o.h
index 629459b..95827e8 100644
--- a/bfd/mach-o.h
+++ b/bfd/mach-o.h
@@ -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 *,