Nikita Smith and Ryan Fleury
cd82268a07
polish ICF section color-space picker
2026-07-27 14:47:30 -07:00
Nikita Smith and Ryan Fleury
4235fa85b4
search small libraries on the main thread to reduce wait times in barriers
2026-07-27 14:47:29 -07:00
Nikita Smith and Ryan Fleury
db0151c3e2
parallel radix sort and coalesce adjacent section contribs
2026-07-27 14:47:29 -07:00
Nikita Smith and Ryan Fleury
bbb136c9ea
radix sort pass over section contribs
2026-07-27 14:47:28 -07:00
Nikita Smith and Ryan Fleury
2d827ac15d
make const data eligible for ICF
2026-07-27 14:47:28 -07:00
Nikita Smith and Ryan Fleury
c629c5b10e
refactor PDB background file output
...
Add a shared multi-file background writer with lazy worker startup.
Represent PDB output as a file artifact, keep PDB output state internal
to the builder, and overlap deferred PDB writers with the file maps release.
2026-07-27 14:47:27 -07:00
Nikita Smith and Ryan Fleury
c96c9620d0
WIP PDB Writer Thread
2026-07-27 14:47:26 -07:00
Nikita Smith and Ryan Fleury
a73e3e0790
use cycle tracking only on weak and undefined symbols
...
* profile of /OPT:REF shows that early push to seen_hm dominates the pass;
cost: 74.23ms -> 6.81ms (-90.8%)
2026-07-27 14:47:26 -07:00
Nikita Smith and Ryan Fleury
fcee35f3e9
rename RAD_TypeHashAlg; extend /RAD_DEBUG_TYPE_HASH with XXHASH option
2026-07-27 14:47:25 -07:00
Nikita Smith and Ryan Fleury
97a1fe6006
radix sort PSI address map
2026-07-27 14:47:24 -07:00
Nikita Smith and Ryan Fleury
134cfce799
merge debug info and llvm_addrsig finders into lnk_obj_initer to reduce
...
time spent in barrier_wait
2026-07-27 14:47:24 -07:00
Nikita Smith and Ryan Fleury
4cc0f4813b
WIP cache COFF symbol interp
2026-07-27 14:47:23 -07:00
Nikita Smith and Ryan Fleury
a779d3f1a5
WIP assigned symbols
2026-07-27 14:47:22 -07:00
Nikita Smith and Ryan Fleury
493241c1da
WIP light COFF symbol table parse
2026-07-27 14:47:22 -07:00
Nikita Smith and Ryan Fleury
bd2cbfc127
gate for page pre-faulting on windows
2026-07-27 14:47:21 -07:00
Nikita Smith and Ryan Fleury
cb6443ce4e
release file maps before exit in parallel before exit
2026-07-27 14:47:20 -07:00
Nikita Smith and Ryan Fleury
58b5b3d92d
search chunks only grow while resolving libraries, so revisit only symbols appended since this library's last search
2026-07-27 14:47:20 -07:00
Nikita Smith and Ryan Fleury
b84d32d9fb
optimize ICF refinement and COMDAT handling
...
Cache immutable section and relocation metadata before color refinement,
then reuse generated-tagged concurrent tables.
Parallelize grouping and fold marking.
Include associative COMDAT descendants in contribution hashes and
canonicalize relocation targets to selected COMDAT leaders.
2026-07-27 14:47:19 -07:00
Nikita Smith and Ryan Fleury
abfea7c33a
update CHANGELOG.md
2026-07-27 14:47:18 -07:00
Nikita Smith and Ryan Fleury
d1b0bc0af7
refine COMDAT symlink handling
...
Stop treating COMDAT section-definition symbols as symlink anchors.
Keep zero-sized COMDAT sections only when they have an owned symlink,
so referenced empty COMDAT symbols still resolve while marker sections
like .gsspr/.gssep are skipped.
Update COMDAT/ICF tests to cover zero-sized COMDAT relocation behavior
and the adjusted removed-COMDAT handling.
2026-07-27 14:47:18 -07:00
Nikita Smith and Ryan Fleury
8ec931d724
fix import data directory bounds
...
Include the null import descriptor in the import directory size and derive
the IAT directory RVA from the first import descriptor of the start of
the .idata contribution.
2026-07-27 14:47:17 -07:00
Nikita Smith and Ryan Fleury
048b93b166
remove empty sections if it does not have any section contributions too
2026-07-27 14:47:17 -07:00
Nikita Smith and Ryan Fleury
f3d2792fb8
simplify COMDAT leader symbol patching
...
Collapse COMDAT leader symbol patching to a single raw-symbol write path
and make the same-object versus cross-object symlink handling explicit.
Preserve public symbol offsets for ICF folds while avoiding cross-object
section number rewrites.
2026-07-27 14:47:16 -07:00
Nikita Smith and Ryan Fleury
7197398f31
split external-symbol handling from section-definition fallbacks
2026-07-27 14:47:15 -07:00
Nikita Smith and Ryan Fleury
d790412219
refactor radlink section gathering
...
Fold section definition and contributions collection into a worker-count
task with barriers around the serial merge. Share section filtering
between both phases and keep zero-size COMDATs so offset-zero symbols
still map to a section.
2026-07-27 14:47:15 -07:00
Nikita Smith and Ryan Fleury
b77c958b5f
add DEF, GUARD, and SECTION config support
...
Parse /DEF, /GUARD, and /SECTION switches, including DEF
handling for NAME/LIBRARY, BASE, VERSION, HEAPSIZE, STACKSIZE, EXPORTS,
and SECTIONS.
Store section directives in linker config and apply them consistently
when gathering object sections when pushing/searching image sections.
Pull load-config symbols for /GUARD without setting GUARD_CF until guard
tables are emitted.
Add coverage for DEF file parity, section directives, and guard
load-config handling.
2026-07-27 14:47:14 -07:00
Nikita Smith and Ryan Fleury
35722f2a01
handle BOMs in linker response files
...
Decode UTF-16LE response files with a BOM and strip UTF-8 BOMs before
parsing arguments. Add coverage for UTF-16 response-file input.
2026-07-27 14:47:13 -07:00
Nikita Smith and Ryan Fleury
25430ea522
assign COMDAT symlinks after weak symbol replacement
...
Previously, COMDAT symlinks were assigned as each object batch was loaded.
Weak symbol replacement could later change the selected leader, leaving
objects from earlier passes with stale COMDAT leader refs. Library search
does not need symlinks to be valid, so solve this by doing a single sweep
assignment of COMDAT leaders after a fixed point is found.
2026-07-27 14:47:13 -07:00
Nikita Smith and Ryan Fleury
65541eaf91
LLVM BC magic sniffer
2026-07-27 14:47:12 -07:00
Nikita Smith and Ryan Fleury
afd454b41f
fix DBI SC image-section range mapping
...
Log and skip section contributions that fail to map into the linked image.
Keep a file-range-to-section-number map so compact file ranges produce the
correct DBI section numbers.
2026-07-27 14:47:12 -07:00
Nikita Smith and Ryan Fleury
541727b819
debug log unresolved symbols specified in .llvm_addrsig
2026-07-27 14:47:11 -07:00
Nikita Smith and Ryan Fleury
3eeae8d365
enable binary for stdout and stderr to bypass CRLF mangling issues in
...
captured output under build systems
2026-07-27 14:47:10 -07:00
Nikita Smith and Ryan Fleury
83c55aebdc
check that __imp_* archive symbols are import members before applying
...
import queue flags to the member
2026-07-27 14:47:09 -07:00
Nikita Smith and Ryan Fleury
941b8a011e
duplicate identical search aliases are not an error case
2026-07-27 14:47:09 -07:00
Nikita Smith and Ryan Fleury
d34e1a7802
implement /OPT:ICF
...
Add identical COMDAT folding using a color-refinement over foldable
read-only sections. Hash section contents, relocation targets, and target
colors until partitions stabilize, then redirect folded COMDAT symlinks
and discard duplicate sections.
Honor .llvm_addrsig via /LLVM_ADDRSIG so address-significant sections
are not folded, keep separate color space for code, unwind info, and
MSVC vftables, and update COMDAT symbol/section mapping after folding.
Add linker tests covering function folding, relocation-sensitive folds,
alignment, color-space separation, symlink chains, .llvm_addrsig,
pdata/xdata, and C++ ICF cases.
2026-07-27 14:47:08 -07:00
Nikita Smith and Ryan Fleury
1ea9fae835
debug report live stats after /OPT:REF pass
2026-07-27 14:47:08 -07:00
Nikita Smith and Ryan Fleury
4daefad31e
map GNU lib extension
2026-06-23 12:32:52 -07:00
Nikita Smith and Ryan Fleury
765b61152d
sort import library member refs by input index
2026-06-23 12:32:52 -07:00
Nikita Smith and Ryan Fleury
ad20900fc0
import hash table -> hash map
2026-06-23 12:32:51 -07:00
Nikita Smith and Ryan Fleury
8dbced6995
set flag on import member from the originally linked library, otherwise
...
on subsequent passes linker may queue same import
2026-06-23 12:32:50 -07:00
Nikita Smith and Ryan Fleury
84d025e940
force inline string compars
2026-06-23 12:32:50 -07:00
Nikita Smith and Ryan Fleury
4f899ac678
update memfun
2026-06-19 20:12:27 -07:00
Nikita Smith and Ryan Fleury
05a024ddb3
remove /RAD_ALT_PCH_DIR
...
* Instead of matching on file path in LF_PRECOMP, loop over the objects
with .debug$P and probe leaves at the index specified in LF_PRECOMP.
If signatures match, use the PCH.
* Demote LNK_Error_PrecompObjNotFound to a recoverable error.
2026-06-19 20:12:27 -07:00
Nikita Smith and Ryan Fleury
9b63131f37
ditch semaphores in thread pool in favor of barriers
2026-06-19 20:12:26 -07:00
Nikita Smith and Ryan Fleury
6ea9bfc5a3
fix tail comparisons
2026-06-19 20:12:25 -07:00
Nikita Smith and Ryan Fleury
c81c072018
includes for rdi_from_codeview
2026-06-19 20:12:25 -07:00
Nikita Smith and Ryan Fleury
3534100e8d
lazy touch obj string tables
2026-06-19 20:12:24 -07:00
Nikita Smith and Ryan Fleury
9616307503
add extra node to the symbol ref for better insertion per
2026-06-19 20:12:24 -07:00
Nikita Smith and Ryan Fleury
871f94a202
use vectorized memory functions in the base strings
2026-06-19 20:12:23 -07:00
Nikita Smith and Ryan Fleury
ba32d7fdec
use CL driver when compiling with clang on windows to simplify compile and link lines
2026-06-19 20:12:22 -07:00
Nikita Smith and Ryan Fleury
8ef58def99
update torture
...
* factor test registration logic out of the macro to improve debuggability
* expand the test registration logic
* rename group -> layer for consistency
* fix indentation in the slow tests summary
2026-06-19 20:12:22 -07:00
Nikita Smith
b8bad9a82e
range helper that computes max part from min+size
2026-06-16 17:22:53 -07:00
Nikita Smith
267b8fc519
missing count in the range list concat
2026-06-16 17:22:52 -07:00
Nikita Smith
956df5527a
switch type server from PDB to a custom file format (RRT)
2026-06-16 17:22:50 -07:00
Nikita Smith and Ryan Fleury
c030488814
fallback on PCH signature when file path match fails
2026-06-13 06:20:40 -07:00
Nikita Smith and Ryan Fleury
c6a4e4c02b
skip broken tests
2026-06-12 15:34:30 -07:00
Nikita Smith and Ryan Fleury
41e6470d28
fix radbin launch in p2r determinism test
2026-06-12 15:34:29 -07:00
Nikita Smith
7d8aa18e4d
make debug hash section tests error number agnostic
2026-06-12 13:54:29 -07:00
Nikita Smith
ac0c7d9441
on checkout do git LFS in github actions
2026-06-12 13:35:10 -07:00
Nikita Smith
7ad422f8ad
make run_tests.sh executable
2026-06-12 13:21:31 -07:00
Nikita Smith
2a5070bb87
update change log
2026-06-12 13:17:21 -07:00
Nikita Smith
ac8c3e7a2d
do not emit relocation for empty resource entry
2026-06-12 12:05:45 -07:00
Nikita Smith
3f6d5df899
apply merge fixes
2026-06-12 11:53:15 -07:00
Nikita Smith
9ce6b9504b
centralize section header reads and writes
2026-06-12 11:40:03 -07:00
Nikita Smith
42cf820972
cache for section flags
...
modifying the section flags is expensive with COW file mappings, Windows
maps are set to 64k granularity
2026-06-12 11:40:02 -07:00
Nikita Smith
3452f23839
add a new boot mode to RADLINK for launching as a type server
...
checkpoint
2026-06-12 11:40:01 -07:00
Nikita Smith and Ryan Fleury
541d3afefa
WIP /RAD_TYPE_SERVER
...
env vars
replace HashTable with HashMap in config
2026-06-02 12:11:12 -07:00
Nikita Smith and Ryan Fleury
4c8d66b431
fix accidental removal of debug info sections resulting in non-eligible
...
sections not getting marked with 'is_live'
2026-06-02 12:11:11 -07:00
Nikita Smith and Ryan Fleury
98a281c8a0
hint for installing external libraries
2026-06-02 12:11:11 -07:00
Nikita Smith and Ryan Fleury
a151df283f
skip tests without directive, and escape * in ubuntu run
2026-06-02 12:11:00 -07:00
Nikita Smith and Ryan Fleury
3a109a7343
sketch test for SYSV and GNU style hash tables
2026-06-02 12:11:00 -07:00
Nikita Smith and Ryan Fleury
637a0f88b2
add run_to_line command; clean up pass over script parser; changed
...
harness to always compile and link tests to prevent code rotting
2026-06-02 12:10:59 -07:00
Nikita Smith and Ryan Fleury
e3fa8e4830
improve error reports in tests
2026-06-02 12:10:58 -07:00
Nikita Smith and Ryan Fleury
fe2778133f
rework file directive handling; remove T_Group; add SKIP to disable
...
tests that are not passing; change command line syntax for easier
test run/skip/force; updated help; shortened --dbg_graphical -> --gui;
add 'skip' directive to the dbg scripts
2026-06-02 12:10:58 -07:00
Nikita Smith and Ryan Fleury
a21a256333
.gitattributes
2026-06-02 12:10:57 -07:00
Nikita Smith and Ryan Fleury
3a7586e84b
export line and column numbers from MD
2026-06-02 12:10:56 -07:00
Nikita Smith and Ryan Fleury
b1d58fb4f9
skip DWARF line table and checksum tests
2026-06-02 12:10:54 -07:00
Nikita Smith and Ryan Fleury
e06e7f1c9f
split voff_range into two fields
2026-06-02 12:10:54 -07:00
Nikita Smith and Ryan Fleury
c875c912d2
update IPC parser
2026-06-02 12:10:53 -07:00
Nikita Smith and Ryan Fleury
ec6f569181
set CLOCK_MONOTONIC on conditional variables
2026-06-02 12:10:51 -07:00
Nikita Smith and Ryan Fleury
e3587dcb9f
use GetForegroundWindow for foucs detection with parented debuggers
2026-06-02 12:10:50 -07:00
Nikita Smith and Ryan Fleury
568a77b73c
fix up scratch conflicts
2026-06-02 12:10:50 -07:00
Nikita Smith and Ryan Fleury
4ff6d2cc6c
use the make library to generate RDI
2026-06-02 12:10:49 -07:00
Nikita Smith and Ryan Fleury
eb90ddc739
remove eval_compiler_basics
2026-06-02 12:10:46 -07:00
Nikita Smith and Ryan Fleury
b2318803a1
report radbin errors
2026-06-02 12:10:46 -07:00
Nikita Smith and Ryan Fleury
e637149ae3
broadcasting a stack pointer and then leaving scope in optimized
...
mode may cause use-after-free
2026-06-02 12:10:45 -07:00
Nikita Smith and Ryan Fleury
79cb6c3c5e
step into tests
2026-06-02 12:10:45 -07:00
Nikita Smith and Ryan Fleury
09afff7957
improve error handling in the debugger harness (source file + line
...
number for error reports and allow scripts without header)
2026-06-02 12:10:44 -07:00
Nikita Smith and Ryan Fleury
eb8cee76c0
update .gitattributes to set LF endings on meta files so metagen
...
files have consistent line endings regardless of the host preference
2026-06-02 12:10:42 -07:00
Nikita Smith and Ryan Fleury
4a57087d81
dump RDI local vars
2026-06-02 12:10:40 -07:00
Nikita Smith and Ryan Fleury
8127763fa4
fix linux build
2026-06-02 12:10:40 -07:00
Nikita Smith and Ryan Fleury
2e4069b89a
debug stats for /OPT:REF
2026-06-02 12:10:39 -07:00
Nikita Smith and Ryan Fleury
c5677cf5f4
wire DWARF expression eval to the unwinder
2026-06-02 12:10:39 -07:00
Nikita Smith and Ryan Fleury
8126f1f18e
first popped value off the stack is right-hand-side
2026-06-02 12:10:38 -07:00
Nikita Smith and Ryan Fleury
03180247c9
rebase fixes
2026-06-02 12:10:38 -07:00
Nikita Smith and Ryan Fleury
1883649e18
debug util for PDB section map
2026-06-02 12:10:37 -07:00
Nikita Smith and Ryan Fleury
2f799e0e0e
more /OPT:REF tests
2026-06-02 12:10:37 -07:00
Nikita Smith and Ryan Fleury
49af8248ef
update tests summary
2026-06-02 12:10:36 -07:00
Nikita Smith and Ryan Fleury
31662822db
rebase
2026-06-02 12:10:36 -07:00
Nikita Smith and Ryan Fleury
19cee2d646
todo
2026-06-02 12:10:35 -07:00