diff --git a/src/xerbla.c b/src/xerbla.c
index a12fc78e..209c0f23 100644
--- a/src/xerbla.c
+++ b/src/xerbla.c
@@ -42,6 +42,7 @@ void flexiblas_internal_xerbla(char *SNAME, Int *Info, flexiblas_fortran_charlen
 #ifdef __ELF__
 #pragma weak xerbla_
 #pragma weak xerbla
+#pragma weak XERBLA
 void xerbla_(char *, Int *, flexiblas_fortran_charlen_t) __attribute__ (( alias ("flexiblas_internal_xerbla")));
 void xerbla(char *, Int *, flexiblas_fortran_charlen_t) __attribute__ (( alias ("flexiblas_internal_xerbla")));
 void XERBLA(char *, Int *, flexiblas_fortran_charlen_t) __attribute__ (( alias ("flexiblas_internal_xerbla")));
@@ -130,6 +131,33 @@ void flexiblas_internal_xerbla(char *SNAME, Int *Info, flexiblas_fortran_charlen
     return;
 }
 
+/* XERBLA_ARRAY handler */
+
+void xerbla_array_ (char *srname_array, Int *srname_len, Int *info, flexiblas_fortran_charlen_t srname_array_len)
+{
+    size_t k = 0;
+    size_t len = 0;
+    if (*srname_len > 0 ) len = (int) *srname_len;
+    (void) srname_array_len;
+    char tmp[len+1];
+    tmp[len] = '\0';
+
+    for(k = 0; k < len; k++) tmp[k] = srname_array[k];
+
+    flexiblas_internal_xerbla(tmp, info, len);
+    return;
+}
+
+void xerbla_array(char *srname_array, Int *srname_len, Int *info, flexiblas_fortran_charlen_t srname_array_len)
+{
+    xerbla_array_(srname_array, srname_len, info, srname_array_len);
+}
+
+void XERBLA_ARRAY(char *srname_array, Int *srname_len, Int *info, flexiblas_fortran_charlen_t srname_array_len)
+{
+    xerbla_array_(srname_array, srname_len, info, srname_array_len);
+}
+
 
 
 /*
@@ -155,7 +183,7 @@ void internal_cblas_xerbla(CBLAS_INT _info, const char *rout, const char *form,
     va_list argptr;
 
     va_start(argptr, form);
-    Int info = _info; 
+    Int info = _info;
 
     if (RowMajorStrg)
     {
