Binary mode carries the previous function's source line into functions with no line info
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 79/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- cpp, typescript
Línea de trabajo
Empieza leyendo el tratamiento de las etiquetas de función en el analizador de objdump en modo binario y compáralo con el cambio de TypeScript en compiler-explorer/compiler-explorer#9306. Comprueba cómo aparecen las etiquetas .L y las etiquetas de función en los ejemplos reales de volcados proporcionados o en las pruebas del analizador. El trabajo estará terminado cuando se borre el source actual al encontrar etiquetas de función que no sean .L, se conserve el source a través de las etiquetas .L y se confirme que las asignaciones ya no se filtran a funciones sin registros de líneas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
In binary mode ("Link to binary"), a function with no line records of its own, such as statically linked glibc code built without debug info, inherits the last file:line of the function before it. objdump only prints a line record when the line changes, and the parser doesn't clear the current source at a new function label.
Reproduce on godbolt.org with x86-64 gcc 14.2 (cg142), C, with binary output on and the default filters:
int square(int num) {
return num * num;
}
int main() { return square(3); }
- With
-O1 -g, everything is correct: 5 lines map toexample.c, all insquareandmain. - With
-O1 -g -static, 4688 of the 5001 lines map toexample.c, across 76 glibc functions:init_cpu_features.constprop.0810,update_active.constprop.0326,get_common_cache_info.constprop.0321, and so on. Onlysquareandmainshould.
With a normal dynamic link it's hidden, because binaryHideFuncRe hides the CRT functions.
Fix: clear the current source at each function label, except assembler-local .L labels, which are inside a function (RISC-V keeps .Lpcrel_hi* in the symbol table). objdump -l prints a function's first line record after its label, so nothing correct is lost. CE's TypeScript parser got exactly this in compiler-explorer/compiler-explorer#9306:
func = match[2];
if (!func.startsWith('.L')) source = null;
That PR has the details and tests. The reviewer checked it against 24 real dumps (gcc and clang, -O0/-O2, with and without -g, -static, C and C++), and the mappings matched addr2line. Linux prod C/C++ uses this external parser (externalparser=CEAsmParser), so the TypeScript fix doesn't reach it.
🤖 Generated with Claude Code
- Lenguaje dominante
- C++
- Estrellas
- 36
- Forks
- 10
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de compiler-explorer/asm-parser
-
Add aarch64 buildAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
-
Make enum out of the parser states (objdump/parser)Quizá libre de nuevo @phyBrackets la tomó hace 1724 días y no hay ningún pull request abierto. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 55/100
compiler-explorer/asm-parser#21 · 2 comentarios ·
Todos los issues de compiler-explorer/asm-parser
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
eclipse-score/inc_someip_gateway#356 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
HarperFast/rocksdb-js#945 ·
Los mantenedores suelen responder en 1 día
-
A failed COMMIT leaves the DuckLake transaction registered, leaking the whole DuckDB instanceAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
needs-format
Dificultad 2/5 1-3 horas Aptitud para principiantes 69/100
Niko1221/Strata#3368 · 1 comentario ·
Los mantenedores suelen responder en 3 días