[Info-vax] Bliss

Lawrence D'Oliveiro ldo at nz.invalid
Sat Jul 20 04:28:06 EDT 2024


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?



More information about the Info-vax mailing list