Binary mode carries the previous function's source line into functions with no line info
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
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 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
- 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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di compiler-explorer/asm-parser
-
Add aarch64 buildAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
Make enum out of the parser states (objdump/parser)Forse di nuovo libera @phyBrackets l’ha presa 1723 giorni fa e non c’è nessuna pull request aperta. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 55/100
compiler-explorer/asm-parser#21 · 2 commenti ·
Tutte le issue di compiler-explorer/asm-parser
Issue simili
-
Bug: negative DECIMAL with fewer digits than its scale prints as "0.-5"Forse già presa @adsharma l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
LadybugDB/ladybug#1311 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
FujiNetWIFI/fujinet-firmware#2045 ·
I maintainer di solito rispondono entro 1 giorno
-
(S1 - Need confirmation)
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
CleverRaven/Cataclysm-DDA#89159 ·
I maintainer di solito rispondono entro 1 giorno
-
area:libnvmpi bug P3
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
gjrtimmer/jetson-nvmpi#33 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno