diff --git a/libasm/asm_newabssym.c b/libasm/asm_newabssym.c
new file mode 100644
index 0000000..34fef3e
--- /dev/null
+++ b/libasm/asm_newabssym.c
@@ -0,0 +1,131 @@
+/* Create new ABS symbol.
+   Copyright (C) 2002, 2016 Red Hat, Inc.
+   This file is part of elfutils.
+   Written by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of either
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at
+       your option) any later version
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at
+       your option) any later version
+
+   or both in parallel, as here.
+
+   elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <libasmP.h>
+#include <system.h>
+
+
+/* Object for special COMMON section.  */
+static const AsmScn_t __libasm_abs_scn =
+  {
+    .data = {
+      .main = {
+	.scn = ASM_ABS_SCN
+      }
+    }
+  };
+
+
+AsmSym_t *
+asm_newabssym (AsmCtx_t *ctx, const char *name, GElf_Xword size,
+	       GElf_Addr value, int type, int binding)
+{
+  AsmSym_t *result;
+
+  if (ctx == NULL)
+    /* Something went wrong before.  */
+    return NULL;
+
+  /* Common symbols are public.  Therefore the user must provide a
+     name.  */
+  if (name == NULL)
+    {
+      __libasm_seterrno (ASM_E_INVALID);
+      return NULL;
+    }
+
+  rwlock_wrlock (ctx->lock);
+
+  result = (AsmSym_t *) malloc (sizeof (AsmSym_t));
+  if (result == NULL)
+    return NULL;
+
+  result->scn = (AsmScn_t *) &__libasm_abs_scn;
+  result->size = size;
+  result->type = type;
+  result->binding = binding;
+  result->symidx = 0;
+  result->strent = dwelf_strtab_add (ctx->symbol_strtab, name);
+
+  /* The value of an ABS symbol must not be modified.  Since there are
+     no subsection and the initial offset of the section is 0 we can
+     get the alignment recorded by storing it into the offset
+     field.  */
+  result->offset = value;
+
+  if (unlikely (ctx->textp))
+    {
+      /* An absolute symbol can be defined by giving a symbol a
+	 specific value.  */
+      if (binding == STB_GLOBAL)
+	fprintf (ctx->out.file, "\t.globl %s\n", name);
+      else if (binding == STB_WEAK)
+	fprintf (ctx->out.file, "\t.weak %s\n", name);
+
+      if (type == STT_OBJECT)
+	fprintf (ctx->out.file, "\t.type %s,@object\n", name);
+      else if (type == STT_FUNC)
+	fprintf (ctx->out.file, "\t.type %s,@function\n", name);
+
+      fprintf (ctx->out.file, "%s = %llu\n",
+	       name, (unsigned long long int) value);
+
+      if (size != 0)
+	fprintf (ctx->out.file, "\t.size %s, %llu\n",
+		 name, (unsigned long long int) size);
+    }
+  else
+    {
+      /* Put the symbol in the hash table so that we can later find it.  */
+      if (asm_symbol_tab_insert (&ctx->symbol_tab, elf_hash (name), result)
+	  != 0)
+	{
+	  /* The symbol already exists.  */
+	  __libasm_seterrno (ASM_E_DUPLSYM);
+	  free (result);
+	  result = NULL;
+	}
+      else if (name != NULL && asm_emit_symbol_p (name))
+	/* Only count non-private symbols.  */
+	++ctx->nsymbol_tab;
+    }
+
+  rwlock_unlock (ctx->lock);
+
+  return result;
+}
