Given the following set of LISP primitives, is it possible to extend the eval function to evaluate defmacro? In this paper McCarthy sets out the following primitives: QUOTE, CAR, CDR, CONS, EQUAL, ATOM, COND, LAMBDA and LABEL. 

He then sets up the following abbreviations: T, NIL, DEFUN, NULL, CADR, LIST, AND, ALT, and SUBST.

He rounds it up with an incredible definition of the EVAL function used in the reader. 

Given the above set of LISP primitives, is it possible to extend the EVAL function to evaluate defmacro?
Yes, in fact it's quite similar to evaluating DEFUN. Of course, in the paper EVAL has no rule for evaluating DEFUN, since it's treated as an abbreviation. From the definition of DEFMACRO in emacs LISP (link):

Special Form: defmacro name argument-list body-forms...
defmacro defines the symbol name as a macro that looks like this:
(macro lambda argument-list . body-forms)

It's easier if we ignore the name of the macro and treat that as an abbreviation. Then we have simply to create the list (macro lambda argument-list . body-forms) and set name to be shorthand for that list, the same way a (defun name (arguments) (body)) sets name as a shorthand for (lambda (arguments) (body)). As for evaluating a macro, that is also easy --- just pass the function inside the macro your arguments, but WITHOUT evaluating them first.