+#define LOCAL_LABEL(name) (name[0] == '.' && name[1] == 'L')
+#define LOCAL_LABELS_FB 1
+
+/* This expression evaluates to true if the relocation is for a local
+ object for which we still want to do the relocation at runtime.
+ False if we are willing to perform this relocation while building
+ the .o file. GOTOFF does not need to be checked here because it is
+ not pcrel. I am not sure if some of the others are ever used with
+ pcrel, but it is easier to be safe than sorry. */
+
+#define TC_FORCE_RELOCATION_LOCAL(FIX) \
+ (GENERIC_FORCE_RELOCATION_LOCAL (FIX) \
+ || (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32 \
+ || (FIX)->fx_r_type == BFD_RELOC_32 \
+ || ((FIX)->fx_addsy != NULL \
+ && S_IS_WEAK ((FIX)->fx_addsy)))
+
+/* Force output of R_ARM_REL32 relocations against thumb function symbols.
+ This is needed to ensure the low bit is handled correctly. */
+#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
+ (GENERIC_FORCE_RELOCATION_SUB_SAME (FIX, SEG) \
+ || THUMB_IS_FUNC ((FIX)->fx_addsy))
+
+#define TC_FORCE_RELOCATION_ABS(FIX) \
+ (((FIX)->fx_pcrel \
+ && (FIX)->fx_r_type != BFD_RELOC_32 \
+ && (FIX)->fx_r_type != BFD_RELOC_ARM_GOT32) \
+ || TC_FORCE_RELOCATION(FIX))
+
+#define TC_CONS_FIX_NEW cons_fix_new_arm
+
+#define MAX_MEM_ALIGNMENT_BYTES 6
+#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << MAX_MEM_ALIGNMENT_BYTES) - 1)
+
+/* For frags in code sections we need to record whether they contain
+ ARM code or THUMB code. This is that if they have to be aligned,
+ they can contain the correct type of no-op instruction. */
+struct arm_frag_type
+{
+ int thumb_mode;