Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Binary mode carries the previous function's source line into functions with no line info

Abierto Apto para principiantes
#55 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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
Área
backend, tooling

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 to example.c, all in square and main.
  • With -O1 -g -static, 4688 of the 5001 lines map to example.c, across 76 glibc functions: init_cpu_features.constprop.0 810, update_active.constprop.0 326, get_common_cache_info.constprop.0 321, and so on. Only square and main should.

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de compiler-explorer/asm-parser

Todos los issues de compiler-explorer/asm-parser

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.