+ default:
+ gcc_unreachable ();
+ }
+}
+
+/* Yield a name for a given pointer encoding. */
+
+const char *
+eh_data_format_name (int format)
+{
+#if HAVE_DESIGNATED_INITIALIZERS
+#define S(p, v) [p] = v,
+#else
+#define S(p, v) case p: return v;
+#endif
+
+#if HAVE_DESIGNATED_INITIALIZERS
+ __extension__ static const char * const format_names[256] = {
+#else
+ switch (format) {
+#endif
+
+ S(DW_EH_PE_absptr, "absolute")
+ S(DW_EH_PE_omit, "omit")
+ S(DW_EH_PE_aligned, "aligned absolute")
+
+ S(DW_EH_PE_uleb128, "uleb128")
+ S(DW_EH_PE_udata2, "udata2")
+ S(DW_EH_PE_udata4, "udata4")
+ S(DW_EH_PE_udata8, "udata8")
+ S(DW_EH_PE_sleb128, "sleb128")
+ S(DW_EH_PE_sdata2, "sdata2")
+ S(DW_EH_PE_sdata4, "sdata4")
+ S(DW_EH_PE_sdata8, "sdata8")
+
+ S(DW_EH_PE_absptr | DW_EH_PE_pcrel, "pcrel")
+ S(DW_EH_PE_uleb128 | DW_EH_PE_pcrel, "pcrel uleb128")
+ S(DW_EH_PE_udata2 | DW_EH_PE_pcrel, "pcrel udata2")
+ S(DW_EH_PE_udata4 | DW_EH_PE_pcrel, "pcrel udata4")
+ S(DW_EH_PE_udata8 | DW_EH_PE_pcrel, "pcrel udata8")
+ S(DW_EH_PE_sleb128 | DW_EH_PE_pcrel, "pcrel sleb128")
+ S(DW_EH_PE_sdata2 | DW_EH_PE_pcrel, "pcrel sdata2")
+ S(DW_EH_PE_sdata4 | DW_EH_PE_pcrel, "pcrel sdata4")
+ S(DW_EH_PE_sdata8 | DW_EH_PE_pcrel, "pcrel sdata8")
+
+ S(DW_EH_PE_absptr | DW_EH_PE_textrel, "textrel")
+ S(DW_EH_PE_uleb128 | DW_EH_PE_textrel, "textrel uleb128")
+ S(DW_EH_PE_udata2 | DW_EH_PE_textrel, "textrel udata2")
+ S(DW_EH_PE_udata4 | DW_EH_PE_textrel, "textrel udata4")
+ S(DW_EH_PE_udata8 | DW_EH_PE_textrel, "textrel udata8")
+ S(DW_EH_PE_sleb128 | DW_EH_PE_textrel, "textrel sleb128")
+ S(DW_EH_PE_sdata2 | DW_EH_PE_textrel, "textrel sdata2")
+ S(DW_EH_PE_sdata4 | DW_EH_PE_textrel, "textrel sdata4")
+ S(DW_EH_PE_sdata8 | DW_EH_PE_textrel, "textrel sdata8")
+
+ S(DW_EH_PE_absptr | DW_EH_PE_datarel, "datarel")
+ S(DW_EH_PE_uleb128 | DW_EH_PE_datarel, "datarel uleb128")
+ S(DW_EH_PE_udata2 | DW_EH_PE_datarel, "datarel udata2")
+ S(DW_EH_PE_udata4 | DW_EH_PE_datarel, "datarel udata4")
+ S(DW_EH_PE_udata8 | DW_EH_PE_datarel, "datarel udata8")
+ S(DW_EH_PE_sleb128 | DW_EH_PE_datarel, "datarel sleb128")
+ S(DW_EH_PE_sdata2 | DW_EH_PE_datarel, "datarel sdata2")
+ S(DW_EH_PE_sdata4 | DW_EH_PE_datarel, "datarel sdata4")
+ S(DW_EH_PE_sdata8 | DW_EH_PE_datarel, "datarel sdata8")
+
+ S(DW_EH_PE_absptr | DW_EH_PE_funcrel, "funcrel")
+ S(DW_EH_PE_uleb128 | DW_EH_PE_funcrel, "funcrel uleb128")
+ S(DW_EH_PE_udata2 | DW_EH_PE_funcrel, "funcrel udata2")
+ S(DW_EH_PE_udata4 | DW_EH_PE_funcrel, "funcrel udata4")
+ S(DW_EH_PE_udata8 | DW_EH_PE_funcrel, "funcrel udata8")
+ S(DW_EH_PE_sleb128 | DW_EH_PE_funcrel, "funcrel sleb128")
+ S(DW_EH_PE_sdata2 | DW_EH_PE_funcrel, "funcrel sdata2")
+ S(DW_EH_PE_sdata4 | DW_EH_PE_funcrel, "funcrel sdata4")
+ S(DW_EH_PE_sdata8 | DW_EH_PE_funcrel, "funcrel sdata8")
+
+ S(DW_EH_PE_indirect | DW_EH_PE_absptr, "indirect absolute")
+
+ S(DW_EH_PE_indirect | DW_EH_PE_absptr | DW_EH_PE_pcrel,
+ "indirect pcrel")
+ S(DW_EH_PE_indirect | DW_EH_PE_uleb128 | DW_EH_PE_pcrel,
+ "indirect pcrel uleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata2 | DW_EH_PE_pcrel,
+ "indirect pcrel udata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata4 | DW_EH_PE_pcrel,
+ "indirect pcrel udata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata8 | DW_EH_PE_pcrel,
+ "indirect pcrel udata8")
+ S(DW_EH_PE_indirect | DW_EH_PE_sleb128 | DW_EH_PE_pcrel,
+ "indirect pcrel sleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata2 | DW_EH_PE_pcrel,
+ "indirect pcrel sdata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata4 | DW_EH_PE_pcrel,
+ "indirect pcrel sdata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata8 | DW_EH_PE_pcrel,
+ "indirect pcrel sdata8")
+
+ S(DW_EH_PE_indirect | DW_EH_PE_absptr | DW_EH_PE_textrel,
+ "indirect textrel")
+ S(DW_EH_PE_indirect | DW_EH_PE_uleb128 | DW_EH_PE_textrel,
+ "indirect textrel uleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata2 | DW_EH_PE_textrel,
+ "indirect textrel udata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata4 | DW_EH_PE_textrel,
+ "indirect textrel udata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata8 | DW_EH_PE_textrel,
+ "indirect textrel udata8")
+ S(DW_EH_PE_indirect | DW_EH_PE_sleb128 | DW_EH_PE_textrel,
+ "indirect textrel sleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata2 | DW_EH_PE_textrel,
+ "indirect textrel sdata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata4 | DW_EH_PE_textrel,
+ "indirect textrel sdata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata8 | DW_EH_PE_textrel,
+ "indirect textrel sdata8")
+
+ S(DW_EH_PE_indirect | DW_EH_PE_absptr | DW_EH_PE_datarel,
+ "indirect datarel")
+ S(DW_EH_PE_indirect | DW_EH_PE_uleb128 | DW_EH_PE_datarel,
+ "indirect datarel uleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata2 | DW_EH_PE_datarel,
+ "indirect datarel udata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata4 | DW_EH_PE_datarel,
+ "indirect datarel udata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata8 | DW_EH_PE_datarel,
+ "indirect datarel udata8")
+ S(DW_EH_PE_indirect | DW_EH_PE_sleb128 | DW_EH_PE_datarel,
+ "indirect datarel sleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata2 | DW_EH_PE_datarel,
+ "indirect datarel sdata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata4 | DW_EH_PE_datarel,
+ "indirect datarel sdata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata8 | DW_EH_PE_datarel,
+ "indirect datarel sdata8")
+
+ S(DW_EH_PE_indirect | DW_EH_PE_absptr | DW_EH_PE_funcrel,
+ "indirect funcrel")
+ S(DW_EH_PE_indirect | DW_EH_PE_uleb128 | DW_EH_PE_funcrel,
+ "indirect funcrel uleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata2 | DW_EH_PE_funcrel,
+ "indirect funcrel udata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata4 | DW_EH_PE_funcrel,
+ "indirect funcrel udata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_udata8 | DW_EH_PE_funcrel,
+ "indirect funcrel udata8")
+ S(DW_EH_PE_indirect | DW_EH_PE_sleb128 | DW_EH_PE_funcrel,
+ "indirect funcrel sleb128")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata2 | DW_EH_PE_funcrel,
+ "indirect funcrel sdata2")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata4 | DW_EH_PE_funcrel,
+ "indirect funcrel sdata4")
+ S(DW_EH_PE_indirect | DW_EH_PE_sdata8 | DW_EH_PE_funcrel,
+ "indirect funcrel sdata8")
+
+#if HAVE_DESIGNATED_INITIALIZERS
+ };
+
+ gcc_assert (format >= 0 && format < 0x100 && format_names[format]);
+
+ return format_names[format];
+#else
+ }
+ gcc_unreachable ();
+#endif
+}
+
+/* Output an unsigned LEB128 quantity, but only the byte values. */
+
+void
+dw2_asm_output_data_uleb128_raw (unsigned HOST_WIDE_INT value)
+{
+ while (1)
+ {
+ int byte = (value & 0x7f);
+ value >>= 7;
+ if (value != 0)
+ /* More bytes to follow. */
+ byte |= 0x80;
+
+ fprintf (asm_out_file, "0x%x", byte);
+ if (value == 0)
+ break;
+ fputc (',', asm_out_file);