This is a multiple initialization problem. Here is an example code:

#include <u.h>
#include <libc.h>

int num = 20;
int num = 30;

void
main(void)
{
print("%d\n", num);
exits(nil);
}

relevant parts:

/sys/src/cmd/8l/asm.c:424:
/sys/src/cmd/8l/pass.c:16:



2012/11/28 keystroke <zhangrui0000@gmail.com>
Thank you for your reply, erik.

But I don't quite follow you. Are you suggesting that the error has nothing to do with "opnames" and "etnames", but is about the following word "memccpy"?

I had grep opnames and etnames before, and finds only one initial place.
And I grep memccpy, no result was found.
There is a strange situation, when I "8l subr.c" then it's "memccpy", when I
"8l *.8", it shows "create":

(2050) DATA ...(same as before)
create: multiple initialization.
...(same as before)
create: multiple initialization.

I suspect it is opnames and etnames that cause the problem, and I find something
strange in the subr.c and it's included file go.h, is it relevant?

=============================================================
> subr.c
=============================================================
static char*
opnames[] =
{
        [OADDR]         = "ADDR",
        [OADD]          = "ADD",
        [OANDAND]       = "ANDAND",
        [OAND]          = "AND",
        [OARRAY]        = "ARRAY",
        [OASOP]         = "ASOP",
        [OAS]           = "AS",
        [OBAD]          = "BAD",
        [OBREAK]        = "BREAK",
        [OCALL]         = "CALL",
        [OCALLPTR]      = "CALLPTR",
        [OCALLMETH]     = "CALLMETH",
        [OCALLINTER]    = "CALLINTER",
        [OCAT]          = "CAT",
        [OCASE]         = "CASE",
        [OXCASE]        = "XCASE",
        [OFALL]         = "FALL",
        [OCONV]         = "CONV",
        [OCOLAS]        = "COLAS",
        [OCOM]          = "COM",
        [OCONST]        = "CONST",
        [OCONTINUE]     = "CONTINUE",
        [ODCLARG]       = "DCLARG",
        [ODCLCONST]     = "DCLCONST",
        [ODCLFIELD]     = "DCLFIELD",
        [ODCLFUNC]      = "DCLFUNC",
        [ODCLTYPE]      = "DCLTYPE",
        [ODCLVAR]       = "DCLVAR",
        [ODIV]          = "DIV",
        [ODOT]          = "DOT",
        [ODOTPTR]       = "DOTPTR",
        [ODOTMETH]      = "DOTMETH",
        [ODOTINTER]     = "DOTINTER",
        [OEMPTY]        = "EMPTY",
        [OEND]          = "END",
        [OEQ]           = "EQ",
        [OFOR]          = "FOR",
        [OFUNC]         = "FUNC",
        [OGE]           = "GE",
        [OPROC]         = "PROC",
        [OGOTO]         = "GOTO",
        [OGT]           = "GT",
        [OIF]           = "IF",
        [OINDEX]        = "INDEX",
        [OINDEXPTR]     = "INDEXPTR",
        [OINDEXSTR]     = "INDEXSTR",
        [OINDEXMAP]     = "INDEXMAP",
        [OINDEXPTRMAP]  = "INDEXPTRMAP",
        [OIND]          = "IND",
        [OLABEL]        = "LABEL",
        [OLE]           = "LE",
        [OLEN]          = "LEN",
        [OLIST]         = "LIST",
        [OLITERAL]      = "LITERAL",
        [OLSH]          = "LSH",
        [OLT]           = "LT",
        [OMINUS]        = "MINUS",
        [OMOD]          = "MOD",
        [OMUL]          = "MUL",
        [ONAME]         = "NAME",
        [ONE]           = "NE",
        [ONOT]          = "NOT",
        [OOROR]         = "OROR",
        [OOR]           = "OR",
        [OPLUS]         = "PLUS",
        [ODEC]          = "DEC",
        [OINC]          = "INC",
        [OSEND]         = "SEND",
        [ORECV]         = "RECV",
        [OPTR]          = "PTR",
        [ORETURN]       = "RETURN",
        [ORSH]          = "RSH",
        [OSLICE]        = "SLICE",
        [OSUB]          = "SUB",
        [OSWITCH]       = "SWITCH",
        [OTYPE]         = "TYPE",
        [OVAR]          = "VAR",
        [OEXPORT]       = "EXPORT",
        [OIMPORT]       = "IMPORT",
        [OXOR]          = "XOR",
        [ONEW]          = "NEW",
        [OFALL]         = "FALL",
        [OXFALL]        = "XFALL",
        [OPANIC]        = "PANIC",
        [OPRINT]        = "PRINT",
        [OXXX]          = "XXX",
};

=============================================================
> go.h
=============================================================
enum
{
        OXXX,

        OTYPE, OCONST, OVAR, OEXPORT, OIMPORT,

        ONAME,
        ODOT, ODOTPTR, ODOTMETH, ODOTINTER,
        ODCLFUNC, ODCLCONST, ODCLVAR,
        ODCLTYPE, ODCLFIELD, ODCLARG,
        OLIST,
        OPTR, OARRAY,
        ORETURN, OFOR, OIF, OSWITCH,
        OAS, OASOP, OCOLAS, OCASE, OXCASE, OFALL, OXFALL,
        OGOTO, OPROC, ONEW, OPANIC, OPRINT, OEMPTY,

        OOROR,
        OANDAND,
        OEQ, ONE, OLT, OLE, OGE, OGT,
        OADD, OSUB, OOR, OXOR, OCAT,
        OMUL, ODIV, OMOD, OLSH, ORSH, OAND,
        ODEC, OINC,
        OLEN,
        OFUNC,
        OLABEL,
        OBREAK,
        OCONTINUE,
        OADDR,
        OIND,
        OCALL, OCALLPTR, OCALLMETH, OCALLINTER,
        OINDEX, OINDEXPTR, OINDEXSTR, OINDEXMAP, OINDEXPTRMAP,
        OSLICE,
        ONOT, OCOM, OPLUS, OMINUS, OSEND, ORECV,
        OLITERAL,
        OCONV,
        OBAD,

        OEND,
};