summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2008-05-21 14:50:07 +0000
committerNick Clifton <nickc@redhat.com>2008-05-21 14:50:07 +0000
commit804c0cc6d0eae37680bfc2900832958ad4915519 (patch)
treea5f679bf58697cde831f9cf4f7e2328ab169bf9f
parent380b8bac123f819fb24eccbea12c23b88a5d12b7 (diff)
downloadcygnal-804c0cc6d0eae37680bfc2900832958ad4915519.tar.gz
cygnal-804c0cc6d0eae37680bfc2900832958ad4915519.tar.bz2
cygnal-804c0cc6d0eae37680bfc2900832958ad4915519.zip
* reloc-macros.h: Add a comment about the use of the
END_RELOC_NUMBERS symbol as a sentinel value. * arm.h (END_RELOC_NUMBERS): Provide a maximum value.
-rw-r--r--include/elf/ChangeLog9
-rw-r--r--include/elf/arm.h3
-rw-r--r--include/elf/reloc-macros.h28
3 files changed, 39 insertions, 1 deletions
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index a4288a7ba..81f5478bc 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,12 @@
+2008-05-21 Nick Clifton <nickc@redhat.com>
+
+ * reloc-macros.h: Add a comment about the use of the
+ END_RELOC_NUMBERS symbol as a sentinel value.
+
+2008-05-15 Christophe Lyon <christophe.lyon@st.com>
+
+ * arm.h (END_RELOC_NUMBERS): Provide a maximum value.
+
2008-04-16 David S. Miller <davem@davemloft.net>
* elf/sparc.h (R_SPARC_GOTDATA_HIX22,
diff --git a/include/elf/arm.h b/include/elf/arm.h
index e70188338..af623f1c1 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -234,7 +234,8 @@ START_RELOC_NUMBERS (elf_arm_reloc_type)
FAKE_RELOC (R_ARM_GOT32, R_ARM_GOT_BREL) /* 32 bit GOT entry. */
FAKE_RELOC (R_ARM_ROSEGREL32, R_ARM_SBREL31) /* ??? */
FAKE_RELOC (R_ARM_AMP_VCALL9, R_ARM_BREL_ADJ) /* Thumb-something. Not used. */
-END_RELOC_NUMBERS (R_ARM_max)
+
+END_RELOC_NUMBERS (R_ARM_max = 256)
#ifdef BFD_ARCH_SIZE
/* EABI object attributes. */
diff --git a/include/elf/reloc-macros.h b/include/elf/reloc-macros.h
index a67419d22..aefb85f2c 100644
--- a/include/elf/reloc-macros.h
+++ b/include/elf/reloc-macros.h
@@ -43,6 +43,34 @@
R_foo_count
};
+ Note: The value of the symbol defined in the END_RELOC_NUMBERS
+ macro (R_foo_count in the case of the example above) will be
+ set to the value of the whichever *_RELOC macro preceeds it plus
+ one. Therefore if you intend to use the symbol as a sentinel for
+ the highest valid macro value you should make sure that the
+ preceeding *_RELOC macro is the highest valid number. ie a
+ declaration like this:
+
+ START_RELOC_NUMBERS (foo)
+ RELOC_NUMBER (R_foo_NONE, 0)
+ RELOC_NUMBER (R_foo_32, 1)
+ FAKE_RELOC (R_foo_illegal, 9)
+ FAKE_RELOC (R_foo_synonym, 0)
+ END_RELOC_NUMBERS (R_foo_count)
+
+ will result in R_foo_count having a value of 1 (R_foo_synonym + 1)
+ rather than 10 or 2 as might be expected.
+
+ Alternatively you can assign a value to END_RELOC_NUMBERS symbol
+ explicitly, like this:
+
+ START_RELOC_NUMBERS (foo)
+ RELOC_NUMBER (R_foo_NONE, 0)
+ RELOC_NUMBER (R_foo_32, 1)
+ FAKE_RELOC (R_foo_illegal, 9)
+ FAKE_RELOC (R_foo_synonym, 0)
+ END_RELOC_NUMBERS (R_foo_count = 2)
+
If RELOC_MACROS_GEN_FUNC *is* defined, then instead the
following function will be generated: