diff --git a/libtcc.c b/libtcc.c index 12ee171..6759daa 100644 --- a/libtcc.c +++ b/libtcc.c @@ -1880,7 +1880,19 @@ static int tcc_set_linker(TCCState *s, const char *option) } else if (link_option(option, "O", &p)) { ignoring = 1; } else if (link_option(option, "rpath=", &p)) { - s->rpath = copy_linker_arg(p); + char *pbuf = copy_linker_arg(p); + + if (s->rpath != NULL) { + size_t plen = strlen(pbuf) +1, ol = strlen(s->rpath); + char *nbuf = tcc_malloc(ol + 1 + plen); + + memcpy(nbuf, s->rpath, ol); + nbuf[ol++] = ':'; + tcc_free(s->rpath); + memcpy(&nbuf[ol], pbuf, plen); + s->rpath = nbuf; + } else + s->rpath = pbuf; } else if (link_option(option, "section-alignment=", &p)) { s->section_align = strtoul(p, &end, 16); } else if (link_option(option, "soname=", &p)) {