Byla vydána (Mastodon, 𝕏) vývojová verze 3.1.4 příští stabilní verze 3.2 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání.
Zakladatel ChimeraOS představil další linuxovou distribuci zaměřenou na hráče počítačových her. Kazeta je linuxová distribuce inspirována herními konzolemi z 90. let. Pro hraní hry je potřeba vložit paměťové médium s danou hrou. Doporučeny jsou SD karty.
Komunita kolem Linuxu From Scratch (LFS) vydala Linux From Scratch 12.4 a Linux From Scratch 12.4 se systemd. Nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů přichází s Glibc 2.42, Binutils 2.45 a Linuxem 6.15.1. Současně bylo oznámeno vydání verze 12.4 knih Beyond Linux From Scratch (BLFS) a Beyond Linux From Scratch se systemd.
Organizátoři konference LinuxDays ukončili veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata, která na letošní konferenci zaznějí. Hlasovat můžete do neděle 7. září. Poté podle výsledků hlasování organizátoři sestaví program pro letošní ročník. Konference proběhne 4. a 5. října v Praze.
Byla vydána verze 11.0.0 vizuálního programovacího jazyka Snap! (Wikipedie) inspirovaného jazykem Scratch (Wikipedie). Přehled novinek na GitHubu.
Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma. Vypíchnout lze, že v Plasmě byl implementován 22letý požadavek. Historie schránky nově umožňuje ohvězdičkovat vybrané položky a mít k ním trvalý a snadný přístup.
Wayfire, kompozitní správce oken běžící nad Waylandem a využívající wlroots, byl vydán ve verzi 0.10.0. Zdrojové kódy jsou k dispozici na GitHubu. Videoukázky na YouTube.
Před necelými čtyřmi měsíci byl Steven Deobald jmenován novým výkonným ředitelem GNOME Foundation. Včera skončil, protože "nebyl pro tuto roli v tento čas ten pravý".
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 156 (pdf).
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 25.8.1. Přehled novinek v Changelogu.
-fdata-sections
a -ffunction-sections
naopak zvětšení binárky, když má každá funkce svou sekci, která je uvedena ve výsledkem souboru, nebo ty sekce linker nakonec spojí do jedné?
objdump -d "$1" | perl -lne 'if(/<([^+]*).*?>(:?)/){if($2){$w=$1}elsif($w ne$1){print"$w $1"}}' | sort -u
main
u, posbírám jen 1/3 velikosti programu. Ověřil jsem si, že to je problém v objdump
, kde minimálně jedna funkce nemá jiný odkaz než sama na sebe. Nějaké nápady, co s tím?
#!/bin/sh objdump -d "$1" | perl -lne 'next unless/<([^+]*).*?>(:?)/; if($2){$w=$1}elsif($w ne$1){print"$w $1"}' | sort -u > deps nm --synthetic --print-size --size-sort --radix=d "$1" | awk ' function collect(name, set, i) { used[name]++ if (set[name]++) return for (i = 0; i < deps[name]; i++) collect(deps[name, i], set) } function run(name, set, sum, i) { set[name] = sum = 0 collect(name, set) for (i in set) sum += sizes[i] print name, sizes[name], sum } { sizes[$4] = $2 + 0 } END { while ((getline < "deps") > 0) { deps[$1, deps[$1]++] = $2 } for (name in sizes) run(name) for (name in used) if (used[name] < 2) print name > "unreferenced" }' | sort -nk3
000000000041865f <my_funny_callback>: 41865f: 55 push %rbp[...]
418739: be 5f 86 41 00 mov $0x41865f,%esiVypadá to, že to bude chtít mnohem víc Perlu.
objdump
neresolvuje callbacky předávané argumentem – lze vyřešitobjdump
neresolvuje callbacky z dat – nelze vyřešitobjdump -d "$1" | perl -lne ' if (/^0*([\da-f]+) <(.+?)>:/) { $a{$1} = $w = $2 } elsif (/<([^+]*).*?>/) { print "$w $1" if $w ne $1 } elsif (/0x([\da-f]+),/) { push @{$deps{$w}}, $1 } END { while (my ($w, $refs) = each %deps) { for (@$refs) { print "$w $a{$_}" if exists $a{$_} } }}' | sort -u > depsSkóre:
main
vzrostl z 26.1% na 35.6% velikosti sstripnuté binárky. _start
začal být větší než main
. Konkrétní program obsahuje callbacky v datech s nemalým podstromem.
objdump -d "$1" | perl -lne ' if (/^0*([\da-f]+) <(.+?)>:/) { $a{$1} = $w = $2; next } print "$w $1" if /<([^+]*).*?>/ && $w ne $1; push @{$deps{$w}}, $1 if /0x([\da-f]+),/; END { while (my ($w, $refs) = each %deps) { for (@$refs) { print "$w $a{$_}" if exists $a{$_} } }}' | sort -u > deps
nm "$1" | perl -lne 'print for /^0*(\S+) . (\S+)/' > addresses objdump -d "$1" | perl -lne ' if (/<([^+]*).*?>(:?)/) { $w = $1 if $2; print "$w $1" if $w ne $1 } BEGIN { %a = (split " ", `cat addresses`) } print "$w $a{$1}" if /0x([\da-f]+),/ && exists $a{$1}' | sort -u > depsDalší krok je omílaný linker nebo potenciálně DWARF.
objdump -x
. Člověk si ze "symbol table" posbírá offsety a velikosti a pak projíždí "relocation records" a zpětně resolvuje. Object soubory jenom už může být trochu problém posbírat, možná přes nějaký falešný kompilátor/linker jak to dělá scan-build
analyzátor, ccache
a podobné, a pořád to nemusí být triviální (více object files na jedny zdrojáky s různými defines), tak možná počkat na finální link příkaz do binárky a poprat se i s .a soubory. Teoreticky by se to dalo sledovat i přes strace/ptrace místo wrapperů.
LOAD
s názvy souborů se dají docela snadno vyparsovat. Problém je, když se linkuje víc věcí, pak se ty output.map přepisují.
Tiskni
Sdílej: