Sujet : Re: Bliss
De : ldo (at) *nospam* nz.invalid (Lawrence D'Oliveiro)
Groupes : comp.os.vmsDate : 20. Jul 2024, 09:28:06
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v7fsel$3f59s$1@dont-email.me>
References : 1 2 3 4 5 6 7
User-Agent : Pan/0.158 (Avdiivka; )
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?