* arm-tdep.c: Include elf-bfd.h and coff/internal.h.
authorRichard Earnshaw <richard.earnshaw@arm.com>
Wed, 6 Feb 2002 15:21:17 +0000 (15:21 +0000)
committerRichard Earnshaw <richard.earnshaw@arm.com>
Wed, 6 Feb 2002 15:21:17 +0000 (15:21 +0000)
(MSYMBOL_SET_SPECIAL, MSYMBOL_IS_SPECIAL, MSYMBOL_SIZE): Move defines
to here from config/tm-arm.h.
(coff_sym_is_thumb): Make static.
(arm_elf_make_msymbol_special): New function.
(arm_coff_make_msymbol_special): New function.
* config/arm/tm-arm.h (MSYMBOL_SET_SPECIAL): Delete definition.
(MSYMBOL_IS_SPECIAL, MSYMBOL_SIZE): Likewise.
(coff_sym_is_thumb): Delete declaration.
(arm_elf_make_msymbol_special): Declare.
(arm_coff_make_msymbol_special): Declare.
(ELF_MAKE_MSYMBOL_SPECIAL): Call arm_elf_make_msymbol_special.
(COFF_MAKE_MSYMBOL_SPECIAL): Call arm_coff_make_msymbol_special.

gdb/ChangeLog
gdb/arm-tdep.c
gdb/config/arm/tm-arm.h

index f74e8e146faa6a221215f6775b336bcfbd76c278..898d48a8327b760dc84d885dd0dccaa9444e882a 100644 (file)
@@ -1,3 +1,19 @@
+2002-02-06  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm-tdep.c: Include elf-bfd.h and coff/internal.h.
+       (MSYMBOL_SET_SPECIAL, MSYMBOL_IS_SPECIAL, MSYMBOL_SIZE): Move defines
+       to here from config/tm-arm.h.
+       (coff_sym_is_thumb): Make static.
+       (arm_elf_make_msymbol_special): New function.
+       (arm_coff_make_msymbol_special): New function.
+       * config/arm/tm-arm.h (MSYMBOL_SET_SPECIAL): Delete definition.
+       (MSYMBOL_IS_SPECIAL, MSYMBOL_SIZE): Likewise.
+       (coff_sym_is_thumb): Delete declaration.
+       (arm_elf_make_msymbol_special): Declare.
+       (arm_coff_make_msymbol_special): Declare.
+       (ELF_MAKE_MSYMBOL_SPECIAL): Call arm_elf_make_msymbol_special.
+       (COFF_MAKE_MSYMBOL_SPECIAL): Call arm_coff_make_msymbol_special.
+
 2002-02-06  Richard Earnshaw  <rearnsha@arm.com>
 
        * arm-tdep.c (arm_software_single_step): ANSIfy function declaration.
index 1726dad64854797996b3102c558b2139b8a1e9f0..3228842399caf609b86ccd86b87299b60fd9c2f0 100644 (file)
@@ -33,6 +33,8 @@
 #include "doublest.h"
 #include "value.h"
 #include "solib-svr4.h"
+#include "elf-bfd.h"
+#include "coff/internal.h"
 
 /* Each OS has a different mechanism for accessing the various
    registers stored in the sigcontext structure.
 #define SIGCONTEXT_REGISTER_ADDRESS_P() 0
 #endif
 
-extern void _initialize_arm_tdep (void);
+/* Macros for setting and testing a bit in a minimal symbol that marks
+   it as Thumb function.  The MSB of the minimal symbol's "info" field
+   is used for this purpose. This field is already being used to store
+   the symbol size, so the assumption is that the symbol size cannot
+   exceed 2^31.
+
+   MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
+   MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.
+   MSYMBOL_SIZE         Returns the size of the minimal symbol,
+                       i.e. the "info" field with the "special" bit
+                       masked out.  */
+
+#define MSYMBOL_SET_SPECIAL(msym)                                      \
+       MSYMBOL_INFO (msym) = (char *) (((long) MSYMBOL_INFO (msym))    \
+                                       | 0x80000000)
+
+#define MSYMBOL_IS_SPECIAL(msym)                               \
+       (((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
+
+#define MSYMBOL_SIZE(msym)                             \
+       ((long) MSYMBOL_INFO (msym) & 0x7fffffff)
 
 /* Number of different reg name sets (options). */
 static int num_flavor_options;
@@ -2282,6 +2304,43 @@ arm_linux_svr4_fetch_link_map_offsets (void)
     return lmp;
 }
 
+/* Test whether the coff symbol specific value corresponds to a Thumb
+   function.  */
+
+static int
+coff_sym_is_thumb (int val)
+{
+  return (val == C_THUMBEXT ||
+         val == C_THUMBSTAT ||
+         val == C_THUMBEXTFUNC ||
+         val == C_THUMBSTATFUNC ||
+         val == C_THUMBLABEL);
+}
+
+/* arm_coff_make_msymbol_special()
+   arm_elf_make_msymbol_special()
+   
+   These functions test whether the COFF or ELF symbol corresponds to
+   an address in thumb code, and set a "special" bit in a minimal
+   symbol to indicate that it does.  */
+   
+void
+arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
+{
+  /* Thumb symbols are of type STT_LOPROC, (synonymous with
+     STT_ARM_TFUNC).  */
+  if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
+      == STT_LOPROC)
+    MSYMBOL_SET_SPECIAL (msym);
+}
+
+void
+arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
+{
+  if (coff_sym_is_thumb (val))
+    MSYMBOL_SET_SPECIAL (msym);
+}
+
 void
 _initialize_arm_tdep (void)
 {
@@ -2359,16 +2418,3 @@ The valid values are:\n");
   prologue_cache.saved_regs = (CORE_ADDR *)
     xcalloc (1, SIZEOF_FRAME_SAVED_REGS);
 }
-
-/* Test whether the coff symbol specific value corresponds to a Thumb
-   function.  */
-
-int
-coff_sym_is_thumb (int val)
-{
-  return (val == C_THUMBEXT ||
-         val == C_THUMBSTAT ||
-         val == C_THUMBEXTFUNC ||
-         val == C_THUMBSTATFUNC ||
-         val == C_THUMBLABEL);
-}
index 0ff2c337c067a7830546eca5102799f6da0bad69..b203da120749945e99540c3b7d91085e60656ef2 100644 (file)
@@ -409,42 +409,16 @@ void arm_software_single_step (int, int);
 
 CORE_ADDR arm_get_next_pc (CORE_ADDR pc);
 
-/* Macros for setting and testing a bit in a minimal symbol that marks
-   it as Thumb function.  The MSB of the minimal symbol's "info" field
-   is used for this purpose. This field is already being used to store
-   the symbol size, so the assumption is that the symbol size cannot
-   exceed 2^31.
-
-   COFF_MAKE_MSYMBOL_SPECIAL
-   ELF_MAKE_MSYMBOL_SPECIAL
-   
-   These macros test whether the COFF or ELF symbol corresponds to a
-   thumb function, and set a "special" bit in a minimal symbol to
-   indicate that it does.
-   
-   MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
-   MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.
-   MSYMBOL_SIZE         Returns the size of the minimal symbol,
-                       i.e. the "info" field with the "special" bit
-                       masked out 
-   */
-
-extern int coff_sym_is_thumb (int val);
-
-#define MSYMBOL_SET_SPECIAL(msym) \
-       MSYMBOL_INFO (msym) = (char *) (((long) MSYMBOL_INFO (msym)) | 0x80000000)
-#define MSYMBOL_IS_SPECIAL(msym) \
-  (((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
-#define MSYMBOL_SIZE(msym) \
-  ((long) MSYMBOL_INFO (msym) & 0x7fffffff)
-
-/* Thumb symbols are of type STT_LOPROC, (synonymous with STT_ARM_TFUNC) */
-#define ELF_MAKE_MSYMBOL_SPECIAL(sym,msym) \
-       { if(ELF_ST_TYPE(((elf_symbol_type *)(sym))->internal_elf_sym.st_info) == STT_LOPROC) \
-               MSYMBOL_SET_SPECIAL(msym); }
-
-#define COFF_MAKE_MSYMBOL_SPECIAL(val,msym) \
- { if(coff_sym_is_thumb(val)) MSYMBOL_SET_SPECIAL(msym); }
+
+struct minimal_symbol;
+
+void arm_elf_make_msymbol_special(asymbol *, struct minimal_symbol *);
+#define ELF_MAKE_MSYMBOL_SPECIAL(SYM,MSYM) \
+       arm_elf_make_msymbol_special (SYM, MSYM)
+
+void arm_coff_make_msymbol_special(int, struct minimal_symbol *);
+#define COFF_MAKE_MSYMBOL_SPECIAL(VAL,MSYM) \
+       arm_coff_make_msymbol_special (VAL, MSYM)
 
 /* The first 0x20 bytes are the trap vectors.  */
 #define LOWEST_PC      0x20