emscripten-core / emscripten-core/emscripten

[feature request] Rename symbols ("--redefine-sym") or alter the binding of a symbol in wasm-ld (c.f end of issue)

Abierto
#12,167 33 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C++
Estrellas
27.6k
Forks
3.6k
Merge medio
1 d 16 h
PR fusionados (30 d)
117

Descripción

**ORIGINAL ISSUE TITLE**: Duplicate symbols when building a busybox-like tool
I'm building a xetex+dvipdfmx busybox-like two-in-one executable with Emscripten. I redefined names of main functions using compiler `-Dmain=...` argument.

I have:
```
libxetex.a
someobjectfile.o jpegimage.o oldxetexmain.o (contains busymain_xetex)

libdvidpfmx.a
someotherobjectfile.o jpegimage.o main.o olddvipdfmxmain.o (contains busymain_dvipdfmx)
```

Both `jpegimage.o` functions are used in `someobjectfile.o`/`someotherobjectfile.o` and export same-named symbols which causes duplicate symbols. Unfortunately the two copies of jpegimage.o are not guaranteed to be exactly same.

At the end of the day I'm interested to only link to `busymain_*` functions and hide all other symbols. Is there a way with Emscripten/llvm-wasm to postproc the static library `*.a` files and hide all unnecessary symbols prior to linking to the final `main.c`?

```cpp
/* main.c */

#include

extern int busymain_xetex(int argc, char* argv[]);
extern int busymain_dvipdfmx(int argc, char* argv[]);

int main(int argc, char* argv[])
{
if(strcmp("xetex", argv[1]) == 0)
return busymain_xetex(argc - 1, argv + 1);
else
return busymain_dvipdfmx(argc - 1, argv + 1);
}
```

Thank you!

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza revisando wasm-ld y la ruta de enlazado de LLVM-to-WebAssembly de Emscripten para la resolución y visibilidad de símbolos. Reproduce el caso con los dos archivos estáticos y la main.c mostrada; se considera terminado cuando los símbolos duplicados de jpegimage.o puedan renombrarse u ocultarse, mientras busymain_xetex y busymain_dvipdfmx sigan pudiendo enlazarse.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
cpp, wasm
Área
build-system, compilers, tooling
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.