Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta Adatta ai principianti
#55 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
79/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cpp, typescript
Ambito
backend, tooling

Direzione di ricerca

Inizia leggendo la gestione delle etichette di funzione nel parser objdump in modalità binaria e confrontala con la modifica TypeScript in compiler-explorer/compiler-explorer#9306. Controlla come compaiono le etichette .L e le etichette di funzione negli esempi reali di dump forniti o nei test del parser. Il lavoro è terminato quando il source corrente viene azzerato alle etichette di funzione diverse da .L, il source viene mantenuto attraverso le etichette .L e viene confermato che le mappature non si propagano più alle funzioni senza record di riga.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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

Lingua principale
C++
Stelle
36
Fork
10
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di compiler-explorer/asm-parser

Tutte le issue di compiler-explorer/asm-parser

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.