If you want to play with gcc 4.9 really badly *and* you're a masochist,
it's in ports now.

However, you need to sacrifice a chicken before it builds:

- Patch binutils-2.17 and install them
- Modify both share/mk/bsd.own.mk and add arm to BINUTILS217_ARCH
- rebuild base etc with new binutils.

Now build gcc and enjoy your FrankensteinBSD with the latest gnu
bloatware.

I do not expect anyone attempting this, it's more of a reminder that
someone(tm) needs to look into binutils-2.17 and make it the default on
arm. Or tell me what needs to be done to it before it can be made the
default.

Index: binutils-2.17/gas/config/tc-arm.c
===================================================================
RCS file: 
/home/vcs/cvs/openbsd/src/gnu/usr.bin/binutils-2.17/gas/config/tc-arm.c,v
retrieving revision 1.3
diff -u -p -r1.3 tc-arm.c
--- binutils-2.17/gas/config/tc-arm.c   22 Aug 2012 14:39:43 -0000      1.3
+++ binutils-2.17/gas/config/tc-arm.c   30 Sep 2014 12:15:06 -0000
@@ -1730,6 +1730,43 @@ s_syntax (int unused ATTRIBUTE_UNUSED)
   demand_empty_rest_of_line ();
 }
 
+/* .inst directive from GPLv3 binutils. This is a GPLv2 compatible
+ * re-implementation for OpenBSD. It does not support Thumb mode.
+ */
+static void
+s_inst(int ignore ATTRIBUTE_UNUSED)
+{
+  expressionS exp;
+
+  if (is_it_end_of_statement()) {
+    demand_empty_rest_of_line();
+    return;
+  }
+
+  if (thumb_mode) {
+    as_bad(".inst not implemented in Thumb mode");
+    ignore_rest_of_line();
+    return;
+  }
+
+  do {
+    expression(&exp);
+#if 0
+    fprintf(stderr, "X_op=%d, value=0x%x\n", exp.X_op, exp.X_add_number);
+#endif
+
+    if (exp.X_op != O_constant)
+      as_bad("constant expression required");
+    else
+      emit_expr(&exp, 4);
+
+  } while (*input_line_pointer++ == ',');
+
+  /* Put terminator back into stream.  */
+  input_line_pointer--;
+  demand_empty_rest_of_line();
+}
+
 /* Directives: sectioning and alignment.  */
 
 /* Same as s_align_ptwo but align 0 => align 2.         */
@@ -2985,6 +3022,7 @@ const pseudo_typeS md_pseudo_table[] =
   { "ltorg",      s_ltorg,       0 },
   { "pool",       s_ltorg,       0 },
   { "syntax",     s_syntax,      0 },
+  { "inst",        s_inst,        0 },
 #ifdef OBJ_ELF
   { "word",       s_arm_elf_cons, 4 },
   { "long",       s_arm_elf_cons, 4 },

Reply via email to