Deutsch   English   Français   Italiano  
<v7fsel$3f59s$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Lawrence D'Oliveiro <ldo@nz.invalid>
Newsgroups: comp.os.vms
Subject: Re: Bliss
Date: Sat, 20 Jul 2024 08:28:06 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 53
Message-ID: <v7fsel$3f59s$1@dont-email.me>
References: <v6r3od$30fgj$2@dont-email.me> <v6r7ev$312bs$1@dont-email.me>
	<v6raga$31ano$2@dont-email.me> <v6rfb3$31ano$6@dont-email.me>
	<v6sj58$38thk$1@dont-email.me> <v6srvb$3dvs2$1@dont-email.me>
	<v6stoc$3e8kc$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 20 Jul 2024 10:28:06 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="49c512e02f3e0737b4cb6e11ff77c5b6";
	logging-data="3642684"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19rWAGYnWBwyTBwQTUvY0qB"
User-Agent: Pan/0.158 (Avdiivka; )
Cancel-Lock: sha1:4kMqiYQX+qU6vn/UPB8qZ1kjVRU=
Bytes: 2998

On Sat, 13 Jul 2024 03:53:48 -0000 (UTC), I wrote:

> That “MAIN =” elicited no complaints, but neither did it seem to do
> anything useful.

The routine referenced by the “MAIN =” directive is checked for
validity in lib/frontend/declarations.c:

    text = modsym_main(np);
    if (text != 0) {
        scopectx_t blkscope = expr_blk_scope(blkexp);
        name_t *mainrtn = 0;
        if (blkscope != 0) {
            mainrtn = rtnsym_search(blkscope, text);
            if (mainrtn != 0) {
                if (rtnsym_expr(mainrtn) == 0) {
                    expr_signal(ctx, STC__MNTYPERR, text);
                }
            }
        }
        if (mainrtn == 0) {
            expr_signal(ctx, STC__NOMAIN, text);
        }
        string_free(expr_strctx(ctx), text);
    }

but in lib/llvmgen/llvm_gencode.c, where it would be used to set the
start address in the generated code, that part is disabled:

    #if 0 // XXX later
        headerlen = 0;
        str = modsym_ident(modnp);
        if (str != 0) {
            int reslen, len = str->len;
            reslen = snprintf(module_header+headerlen, sizeof(module_header)-headerlen,
                              "\t.ident %-*.*s", len, len, str->ptr);
            if (reslen > 0) headerlen += reslen;
        }
        str = modsym_main(modnp);
        if (str != 0) {
            int reslen, len = str->len;
            if (headerlen > 0) module_header[headerlen++] = '\n';
            reslen = snprintf(module_header+headerlen, sizeof(module_header)-headerlen,
                              "\t.set start,_%-*.*s", len, len, str->ptr);
            if (reslen > 0) headerlen += reslen;
        }
        if (headerlen > 0) {
            module_header[headerlen] = '\0';
            LLVMSetModuleInlineAsm(gctx->module, module_header);
        }
    #endif // XXX later

I wonder if that code actually works?