forked from Leffmann/vlink
-
Notifications
You must be signed in to change notification settings - Fork 0
/
history
894 lines (813 loc) · 44.1 KB
/
history
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
vlink history
=============
(ados/ehf): changes are relevant for Amiga-Hunk/EHF only
(elf): general ELF changes
(elf32ppc): changes are relevant for ELF32-PowerPC only
(elf32m68k): changes are relevant for ELF32-M68k only
(elf32arm): changes are relevant for ELF32-ARM only
(elf32i386): changes are relevant for ELF32-386 only
(elf64x86): changes are relevant for ELF64-x86_64 only
(a.out): general a.out changes
(aoutmint): changes are relevant for MiNT only
(vobj): changes for VOBJ format
(tos): changes for the Atari TOS format
- 0.16b (29.12.17)
o New option -mtype: merge all sections of the same type (code, data,
bss), ignoring name and attributes.
- 0.16a (14.08.17)
o New linker script commands: BYTE, SHORT, LONG, QUAD, SQUAD.
o New option -k: keep original section order from the objects.
o Fixed crash with -gc-all and unreferenced symbols.
o Fixed crash with unresolved weak symbols.
o (ados/ehf) _INIT/_EXIT functions with register arguments (prefixed by
'@' instead of '_' for SAS/C-compatibility) are also detected, and their
pointers inserted into the proper con-/destructor tables.
o (elf) Provide __CTOR_LIST_END, __DTOR_LIST_END.
- 0.16 (16.05.17)
o Fixed a potential crash when linking with empty object files, while
using a linker script.
o (ados/ehf): Support blink/slink linker symbols _RESLEN, _RESBASE,
_NEWDATAL for generating resident (pure) programs.
o (ados/ehf): Fixed SAS/C-compatibility linker symbol __BSSLEN. Now it
represents the number of long words instead of the number of bytes.
WARNING! Make sure to check your code, if you used __BSSLEN before!
o (ados/ehf): AmigaOS LoadSeg() (up to V40) has a problem with allocating
data-bss sections, which have an initialized size of 0. Implemented a
workaround for this case.
o (elf) Fixed crash in dynamic linking due to section-trimming.
o (elf,aout) Malformatted library archive files are no longer fatal, but
will be ignored.
o (rawseg) Do not write output sections marked with NOLOAD.
- 0.15d (06.02.17)
o Section-trimming, introduced with V0.15b, did not work well with ELF
executables. Fixed that.
o New options -gc-all and -gc-empty for section garbage-collection.
o New option -Z to prevent the linker from automatically removing a
section's trailing zero-bytes.
o New output format: jagsrv. Absolute raw binary output, similar to rawbin1,
but with a header to make it load and execute via the Atari Jaguar
SkunkBoard or the VirtualJaguar emulator.
o (ados/ehf): Fixed a memory leak in relocation output and optimized it.
o (elf) Allow N_FUN stabs without a relocatable label in n_value.
- 0.15c (01.11.16)
o Fixed problems with relocation addend sign-extension, introduced in
the last version.
- 0.15b (17.09.16)
o Reworked reading and writing of relocations. Support more complex
relocations.
o Fixed inserting little-endian relocations, which only worked before when
the reloc-fields started and ended on byte-boundaries.
o Do not include zero-bytes at the end of a section into the ininitalized
file size, for those file format which support that.
o (elf) Fixed illegal memory access when linking an ELF program without a
linker script.
o (elf32jag) Fixed MOVEI-relocation.
o (vobj) For little-endian the bit position in a byte of a reloc-field is
now counted from right to left. VOBJ files by vasm-versions older than
V1.7f may be incompatible for complex little-endian relocations (e.g. ARM).
- 0.15a (12.03.16)
o New option -mrel instructs the linker to merge all sections with
PC-relative references between them. This was done automatically
in previous versions, but makes no sense for most targets.
o New option -hunkattr, which assigns memory attributes to an input section
name. The memory attributes of all those input sections will be
overwritten.
o (elf) Introduced the new target "elf32jag", an unofficial ELF target
for the Atari Jaguar RISC CPU.
o (ados/ehf) Read/write extended memory attributes (0xc0000000 in hunk
type or size). Extended attributes in object files seem inofficial,
but supported by vasm now.
o (ados/ehf) Allow memory flags with HUNK_PPC_CODE in object files.
o (ados/ehf) Support HUNK_RELRELOC32 in executables (since OS3.0).
o (a.out) Fixed pc-relative relocations in relocatable object file output.
- 0.15 (28.12.14)
o (ados/ehf) Support for SAS/C style indexed libraries (HUNK_LIB).
o (ados/ehf) -Csasc is accepted to build a table with SAS/C constructors
and destructors. It looks for functions named __STI_... and __STD_...
o (tos) New option -tos-textbased to write symbol offsets which are based
on the text section (MonST-comaptible).
o (tos) text and data section size in the header must not be odd.
o (aoutmint) text and data section size in the header must not be odd.
- 0.14d (07.06.14)
o (vobj) Fixed reading common symbols from VOBJ files.
o (a.out) Fixed detection of Atari Jaguar MOVEI relocations.
o (tos) Label values from the symbol table must be an offset to the section
they are defined in.
- 0.14c (27.12.13)
o (ados/ehf) Ignore FILE and SECTION symbols, when converting from a
different format. They have no meaning here.
- 0.14b (31.08.13)
o Fixed potential illegal memory accesses when reading unallocated
amigahunk/ehf or a.out BSS sections.
o Also delete empty sections with symbols, provided they are unreferenced
and stripped.
o Fixed symbol assignments in the linker script's section definitions.
Defining symbols before the first input section pattern didn't work.
o Make sure that pc-relative relocations are resolved when the target symbol
is in the same output section, even when -q (keep relocs) is given.
o New option -osec, which makes some target formats output each section
as an individual file. Currently valid for: rawbin1, rawbin2,
amsdos, cbmprg.
-osec=basename can be used to put "basename." in front of each output
file name (section name).
o Allow '.' symbol in a linker script's MEMORY block, to refer to the
start address given by -Ttext.
o (elf) Display an error when a section doesn't cleanly attach to a
program segment.
o (a.out) Fixed reading of empty objects, without any symbols.
o (aoutmint) Make sure that TOS symbol table length is zero, when there
are no symbols.
o (vobj) Fixed sign-extension of relocation addends and masks. This had for
example the effect that 16-bit PC-relative overflows were not recognized.
o (rawbin) Extended the default script (.rodata, COMMON, .comment).
o (rawbin) Special default linker script for amsdos, supporting banks.
- 0.14a (08.08.12)
o New output format: amsdos, for Amstrad/Schneider CPC computers.
o New output format: cbmprg, for Commodore 8-bit computers (PET, VIC-20,
64, etc.).
o The output formats rawbin2, amsdos and cbmprg will use the section name
instead of the section's base address as file name appendix for
additional files.
o When using a linker script the input sections will be grouped by type
(code, data, bss) when being merged into a pattern-matched output
section. This keeps uninitialized parts together and is required to
form data-bss sections.
o The binary output formats will display a fatal error when sections are
overlapping. This could cause crashes or huge output files before.
o Fixed syntax and type errors in dir.c when compiling for Windows
(introduced in 0.14).
o New linker-script command: ASSERT(), to generate a fatal error when the
tested expression is zero.
o New linker-script functions: MAX(a,b) and MIN(a,b) to return the
higher or lower of two values.
o (ados/ehf) A section named "BSS" is no longer automatically merged with
other bss-type sections.
o (vobj) Regard all information from an object as unsigned, except symbol
values and reloc addends and masks.
- 0.14 (05.08.11)
o (elf) Introduced a module with common functions for ELF32 and ELF64,
then added experimental ELF64 support. First ELF64 test target is:
elf64x86.
o (ados/ehf) The new option -da forces the linker to allocate all PowerOpen
address symbols (@_sybmol) which point to an already known symbol, which
was only done before when generating an amigaehf executable.
o Improved Unix path conversion into native AmigaOS or DOS format.
o Runs on plain Atari TOS.
o Add -dc and -dp as synonyms for -d (BSD ld compatibility).
- 0.13 (01.12.10)
o Fixed some NULL-pointer accesses when parsing bad linker scripts.
o New option -export-dynamic puts all global symbols of the output file into
the dynamic symbol table, making them visible for shared objects loaded on
demand (e.g. by dlopen()).
o When creating a shared object, do not export unused symbols from static
link libraries as dynamic symbols. This could even lead to a crash.
o Make sure a symbol value is always correctly sign-extended to 64 bit,
which was a problem with ELF and a.out backends.
o (elf32ppc) Fixed writing of MorphOS ddrelocs on a little-endian host.
- 0.12g (09.06.10)
o Option -y only reports symbol references which will be part of the
resulting output file.
o (a.out) Also handle indirect symbols with N_EXT bit set.
o (elf) Automatically add a default PT_PHDR, when a PHDRS block in a
linker script doesn't define it although it was requested to be part
of a PT_LOAD PHDR.
o (elf) Ignore R_NONE relocations. No longer fail on it.
o (elf) Introduced the new target "elf32amigaos" for AmigaOS4. The only
difference to the standard "elf32ppcbe" is that even references from a
shared object (to other shared objects) have to be resolved at link time.
- 0.12f (14.07.09)
o Do not set the executable flag of the target file before it is closed.
This prevents exclusive locking problems with some file systems (e.g.
with JXFS from AmigaOS4).
- 0.12e (02.07.09)
o Multiple definitions of absolute symbols are ignored, when all have the
same value.
o Replaced #ifdef WIN32 by _WIN32.
o (elf) Fixed an error when creating executables with the default 2-segment
layout, while one segment remains empty (e.g. only .text and .rodata).
- 0.12d (05.05.09)
o (a.out) New format aoutnull, which is the default format with undefined
endianess and standard relocations, when an object with MID 0 is read.
o (a.out) New format aoutjaguar, which recognizes swapped 16-bit words
and generates a special relocation for the Jaguar GPU MOVEI RISC
instruction (indicated by a set COPY flag in the reloc-info field).
o (a.out) Detects Jaguar GPU MOVEI relocations in objects with MID 0
and treats them accordingly to write a correct desintation file.
o When none of the input files sets a valid endianess use the endianess
of the output file format. When the endianess is still unknown, guess
it by using the endianess of the host system.
o New options -EB and -EL to define the endianess for reading input files
and writing the output. Useful when neither the input files nor the
output file defines a valid endianess.
o New option -minalign sets a minimum alignment (number of bits which have
to be zero) for all imported sections. The specified alignment value will
only take effect when higher than the section's current alignment.
It defaults to 0.
- 0.12c (20.03.09)
o Common symbols which are defined in several object modules must be present
in the output file only once! Even worse, since V0.12 different object
modules referenced their own copy of a Common symbol.
- 0.12b (02.03.09)
o (ados/ehf) LoadSeg<=V40 doesn't allow more than 31 longwords per symbol
in HUNK_SYMBOL and will respond with "bad loadfile hunk" otherwise.
So we just cut everything after 124 characters.
- 0.12a (31.01.09)
o V0.12 tried to prefer symbols resolved by the same object unit as it was
referenced from. Unfortunately its implementation was wrong: it actually
prefered symbols which are not from the same object! Fixed.
o Error message 36 was displayed as "UNUSED" although still needed.
- 0.12 (07.12.08)
o Optimized and reworked large parts of the whole source.
o Many bug fixes with dynamic linking. Experimental support for linking
with shared objects and creating shared objects.
o New option -interp sets the name of the dynamic linker for ELF
executables. Defaults to "/usr/lib/ld.so.1".
o New option -soname to specify the real name of a shared object/library.
o New option -shared (same as -Bshareable) to make the linker generate a
shared object/library (experimental!).
o New option -rpath to define a library search path for the dynamic linker.
o Reworked relocation types. Support for LOCALPC, GOT, PLT, and SECTOFF
relocations.
o Fixed linker-symbol addresses (e.g. _SDA_BASE_), when generating an
absolute executable.
o Linker symbols _PROCEDURE_LINKAGE_TABLE_ and _GLOBAL_OFFSET_TABLE_.
o Fixed linker script function KEEP(), which preserved more sections from
being deleted as wanted.
o Shared library with version 0.0 (e.g. libname.so.0.0) was not found.
o Removed obsolete FASTALLOC option.
o vlink.doc converted to texinfo format, which yields a vlink.pdf.
o (elf) Fixed option -n (no page alignment) for ELF.
o (elf) Linking with shared objects is supported! Currently only
experimental for elf32ppcbe.
o (elf) Whether the file header and PHDR are included in the first segment
of an executable is decided by the presence of the SIZEOF_HEADERS
variable in the active linker script. Lots of fixes for generating
executables with and without PHDR.
o (aout) New format aoutmint. This is a TOS executable with an embedded
a.out header at the beginning of the text section. Used in the
Atari-MiNT environment to allow using binutils.
o (vobj) Synchronize mit vasm (weak symbols, relocations) and recognize
weak symbols.
o (vobj) Archive objects are assigned their real file name instead of the
archive name now.
o (tos) Define a.out linker symbols __etext, __edata, __bss_start and __end.
o (tos) New options to manipulate the 32bit flags word in the header:
-tos-flags, -tos-fastload, -tos-fastram, -tos-fastalloc, -tos-private,
-tos-global, -tos-super and -tos-readable.
o (tos) Support for long symbol names, up to 22 characters.
- 0.11 (17.09.08)
o When merging two sections without a linker script always the section found
earlier in the linking process (earlier on the command line) has to be
kept. In some cases this didn't work.
o (ados/ehf) When library symbols have the same name vlink will prefer the
one which matches the caller's cpu-architecture (PowerPC or M68k).
This makes linking of mixed PPC/M68k binaries for WarpOS much easier.
o (ados/ehf) Silently discard weak symbols, when writing an executable.
o (a.out) Support for GNU-style weak symbols.
o Added new output file format shex1 (oilhex).
- 0.10a (23.03.07)
o New file format: elf32armle. 32-bit ELF for the little-endian ARM
architecture. Only a few relocations are supported at the moment.
o (ados/ehf) In the past hunk-libraries would only be recognized when
using a ".lib" suffix. Now the name is irrelevant, as long as the
library was specified with -l option.
- 0.10 (08.08.06)
o Empty segments are marked as unused. This fixes a bug causing
corrupt ELF output when only one segment is used.
o PC-relative references between different sections are allowed when
the distance between sections in the final executable is constant.
- 0.9k (05.06.06)
o Base-relative references were only recognized when the symbol referenced
was from a different section. This caused problems when accessing
small-data symbols in a code section.
o Print a warning when referencing a code section in base-relative mode.
The warning may be suppressed by the new -textbaserel option.
o Read addends for base-relative relocations always have to be unsigned,
otherwise the linker fails with addends >32767 from 16-bit displacements.
o Guarantees to set the OS-specific 'executable' flag for the output file.
o The constructor/destructor list labels, __CTOR_LIST__ and __DTOR_LIST__,
will get an additional leading underscore in -Cvbcc mode to allow to
refer to the same symbol in C when using ELF or a.out/hunk objects.
Warning: This makes the vclib of vbcc/68k before 0.8j incompatible!
o vlink may be built with MSVC 2005 Express Edition and MSVC Compiler
Toolkit 2003. Modifications done my Mikael Kalms.
o Option -R for short-relocs was replaced by a more powerful -R<format>
option, where <format> defines the format of the relocation tables
which may be 'std' (standard), 'add' (including addends) or
'short' (short 16-bit offsets).
o Option -f<flavour> adds "flavours" to the library search paths, as
known from GNU-ld.
o (vobj) vasm's VOBJ output was synchronized with vlink, so we support
all the 15 basic reloc types now (abs, pc, plt, got, sd, secoff, etc.).
o (elf32ppc) Target elf32amiga was split into elf32powerup and elf32morphos.
The latter will make sure that small data sections get their correct
names (.sdata/.sbss) and always writes them in two separate sections,
as MorphOS' ELF-loader guarantees that those sections are loaded
concatenated into memory.
o (elf32ppc) New linker symbol __text_size for MorphOS/gcc.
o (elf32ppc) .ctors and .dtors will only renamed to .ctor_/.dtor_ when
target is elf32powerup and the constructor-style "vbccelf" was selected.
o (elf32ppc) Automatically creates __r13_init linker symbol when
_LinkerDB is referenced (elf32morphos).
o (elf) .note sections are recognized and correctly written.
o (ados/ehf) EHF address references starting with "@_", are also allowed
on linker generated symbols (like ___CTOR_LIST__).
o (ados/ehf) Besides _LinkerDB, also a reference to PhxAss' _DATA_BAS_ and
Dice-C's __DATA_BAS creates _SDA_BASE_.
o (tos) Take possible alignment gaps between text and data as well as
data and bss into account while writing the output file.
- 0.9j (04.08.05)
o Major bug fix: section list was corrupted while assigning the object
sections to the linker-script patterns. The consequence was that in
rare cases a section was not recognized!
o When a relocatable object file is generated, sections are only
linked by name. No other rules are applied!
o New option -Ttext can be used to set the start address of the first
section, which defaults to 0 and is usually set by the linker script.
o PROVIDE() works again. It was broken since 0.9g.
o A destination section defined by a linker script had to include its
own name in the list of source section patterns. This restriction
was fixed!
o When common symbols are allocated in a section, its name is defined
by the destination object file format now (.bss for ELF and a.out).
When the process is controlled by a linker script the section is
still called "COMMON".
o When a new object unit is pulled in from a library due to a symbol
reference other global symbols in it, which would cause conflicts,
are renamed and will effectively be replaced by the non-library symbols.
o The -u option or the linker-script command EXTERN() will create
references to undefined symbols in a new dummy object now (called
"INTERNAL"). Before, a section of the first object found was used.
o Empty .a archives are no longer rejected.
o (vobj) Relocation with different symbols at the same offset are allowed
and will no longer be seen as a single relocation.
o (elf32ppc) Supports R_PPC_SECTOFF, R_PPC_SECTOFF_LO, R_PPC_SECTOFF_HI
and R_PPC_SECTOFF_HA relocations.
o (elf32ppc) Supports MorphOS-specific 32-bit base relative
R_PPC_MORPHOS_DREL_LO/HI/HA relocations (symbol __r13_init relative).
The linker automatically generates the symbols __r13_init (located at
.sdata+0x8000), __sdata_size (sizeof .sdata section) and __sbss_size
(size of .sbss section) on demand. When the linker-symbol
__datadata_relocs is referenced it will point to a newly created
section called "ddrelocs" containing relocation offsets for .sdata to
.sdata references and a number of records entry in the first word.
This makes it possible to clone the .sdata/.sbss section by library
code.
o (elf32ppc) Supports AmigaOS/PPC-specific 32-bit base relative
R_PPC_AMIGAOS_BREL_LO/HI/HA relocations (.data section relative).
Unlike MorphOS copying and relocating the data segment is done by
AmigaOS (elf.library).
o (elf32ppc) Small data base offset changed from 0x7ff0 to 0x8000, to
guarantee the same offset for SDAREL (16-bit small data) and DREL
(32-bit base relative) and make __saveds work for both cases.
- 0.9i (13.03.05)
o Experimental stabs debugging support for a.out and ELF.
o Supports linker script commands: SEARCH_DIR, INPUT and GROUP (implemented
as INPUT, for compatibility only).
o Encountering a PHDRS, SECTIONS or MEMORY directive in a linker script
will enable script-linking mode, otherwise default linking rules are used.
o (elf) Fixed bug in when calculating sections gap, when every section has
base-address 0.
o (elf) Prints an internal error when sections are overlapping (and base
address not 0).
o Made error 19 (global symbol redefinition) a hard error. It was a
warning before, which I think is not enough.
- 0.9h (02.01.05)
o Respect ALLOC and NOLOAD flags in binary file generation.
o Linker scripts: NOLOAD was not reset for the following sections.
o New option -fixunnamed assigns a default name according to the
section's type (.text, .data or .bss).
o Option -u is supported. It allows to mark symbols as undefined, which
might trigger linking of addtional modules from standard libraries.
o Linker script command EXTERN, equivalent to the -u option. But you may
specify several symbols with one EXTERN command.
- 0.9g (05.12.04)
o (elf) Start address of a non-default PHDR was wrong, so it would never
receive any sections (only occured when using PHDR directive).
o (elf32ppc) Changed default page alignment from 0x1000 to 0x10000.
o (ados/ehf) Sign-extend hunk symbol-values. Otherwise negative absolute
symbols will not pass the linker's range-check.
o Fixed crash when there was not a single section defined in a linker
script, but absolute symbols present.
- 0.9f (20.11.04)
o As soon as a small-data relocation is found, the symbol _SDA_BASE_
has to be marked as 'referenced'. Otherwise a 'provided' _SDA_BASE_
will disappear although needed.
o Fixed R_SD21 relocations, which didn't really work.
o (tos) Improved sorting of relocations using quick-sort algorithm.
o (elf) The order of sections in a segment is based on LMA instead of VMA.
o Fixed WIN32 pattern matching.
o (vobj) Prevent crashes caused by illegal symbol-indexes, when
generating error(115).
o Default library search path for AmigaOS/68k is now "vlibos3:", as
used in the latest vbcc 0.8g release.
o When linking an executable without linker script it could happen in
rare cases that small-data sections were not merged. This was solved
by checking for dependencies between the new created output sections,
after all input sections from the global list have been assigned to one.
o The map-file includes a nice section-mapping output now.
o -sd option didn't work! Was treated as -sc!
o Fixed small code (-sc) mode.
o (ados/ehf) Some inofficial, currently pasm-only, reference types
were implemented, to be able to support base-relative references to
common symbols in hunk format.
- 0.9e (11.06.04)
o Base relative relocations will now be calculated by using the base
symbol's value (e.g. _SDA_BASE_ for R_SD-type relocations) instead
of just calculating a section offset. This requires that those symbols
are defined, of course!
o (elf32ppc) Supports R_PPC_EMB_SDA2REL and R_PPC_EMB_SDA21 relocations.
o (elf32ppc) Automatically creates _SDA_BASE_ linker symbol when
_LinkerDB is referenced.
o (ados/ehf) Automatically creates _SDA_BASE_ linker symbol when
_LinkerDB is referenced.
o New options to add or delete preceding underscores from symbol names
for a group of input files (-set/clr-adduscore, -set/clr-deluscore).
o Win32-compatible directory and pattern-matching routines.
o (elf) Ignores (removes) debugging sections (.stab*, .line*, .debug*)
when option -S or -s is given.
- 0.9d (23.05.04)
o New file format: IHEX (Intel-Hex).
- 0.9c (08.05.04)
o New file format: elf32i386.
o (vobj) Relocations at the same location have to be concatenated to
support more complex relocation types like R_PPC_ADDR16_HA.
o (elf32m68k) Included missing GOT and PLT relocations (although not
really supported by vlink at the moment).
- 0.9b (24.04.04)
o Rewrote relocation code, which allows to represent any relocation type
of any architecture internally. This made lots of code easier or
obsolete.
o New file format: VOBJ. First introduced in V0.8i, but really working
now for the first time. VOBJ is a read-only format and intended to
support any architecture. Currently generated by the vasm-assembler only.
o Redefinition of symbols in object units included from a library are
detected now.
o New flag defines that a target must not reset the base address to 0
for any new section when producing a relocatable object. This is
useful for the Atari TOS and all a.out formats.
o More precise error messages in case of relocation overflows ("distance
too large" errors, etc.).
o (elf32ppc) Page size is 4096 bytes, not 8192!
o (ados/ehf) R_PPC_REL14 relocations can be correctly translated into
a 16-bit relative EHF reloation.
- 0.9a (26.03.04)
o (elf) Relocatable objects with no-alloc sections no longer worked.
Those sections must always appear at last in the output file now.
- 0.9 (29.02.04)
o (elf) ELF executables (ET_EXEC) can be written, using linker scripts.
Only a small note, but THIS WAS THE BIG ONE!
o (ados/ehf) Don't write EHF-specific hunks and relocs in "amigahunk" mode.
o (a.out) Make sure that symbol-values are relative to their section base,
as a.out needs to assign its own strange values in relocatable object
file mode.
o New file format: ataritos (Atari-ST/TT TOS format). Executables only.
o Lots of modifications and simplifications in all targets.
o Linker script support was rewritten from scratch and is quite
compatible to the GNU linker script format now, although there are
only a few functions and commands implemented at the moment. This
can easily be extended in future.
o Real expression evaluation for linker scripts.
o Gaps through sections alignment are filled with a linker-script
changeable 16-bit value.
o Enhanced method to search for dynamic libraries (shared objects):
1. look for perfect match (e.g. libc.so)
2. look for highest version, including subversion when required
o Empty sections without symbols and relocations will be deleted.
o Small-code, small-data and relative references are also a factor for
merging sections when creating a relocatable object file as output,
and not for executables only.
o Extended most data structures for 64-bit support.
o Fixed all functions to work with a section-VA different from 0, which
is required for absolute executables and linker scripts.
o New option -e sets the entry point for an executable.
o New option -n disables page alignment in final executable.
o New option -q keeps relocations in the final executable.
o Options -dn,-dy,-dp,-dc are obsolete. There is only -d for allocation
of common symbols (-dc will be recognized too).
o New constructor/destructor handling, controled by linker-script commands
(CONSTRUCTORS, VBCC_CONSTRUCTORS, etc.) or command line option -C.
The linker will label constructor lists with __CTOR_LIST__ and destructor
lists with __DTOR_LIST__ (available for all targets).
o Common symbols will always be defined relative to an artificial section
called "COMMON". Common symbols which are referenced base-relative are
placed into ".scommon". These sections may be used in linker scripts.
o No longer deallocate symbols when writing output, as they might be
needed later.
o Map file: Declare values printed after "Allocating common" as hex.
o Map file: Printing value of absolute symbols fixed.
o When printing files, sections and their new addresses into a map file:
use original section names instead of the new ones. This makes the output
a bit harder to read for relocatable executables, so I might think
about it again...
- 0.8m (30.09.03)
o New file format: elf32m68k.
- 0.8l (22.08.03)
o Target amigaos was renamed to amigahunk.
o Target elf32powerup was renamed to elf32amiga.
o Warnings about modified section-attributes and alignment were improved
by printing the involved object names.
- 0.8k (23.02.03)
o (ados/ehf) -P option should be supported now.
o (ados/ehf) Stripping of local symbols from the final executable supported:
-x strips alls local symbols, -X only those starting with 'l', 'L' or '.'.
o (ados/ehf) The line debug hunks can also be stripped seperately from an
executable by specifying -S, retaining the symbol names in HUNK_SYMBOL
(which would not be stripped before -s).
o (a.out) Fixed -X option. Stripping of all local symbols which start with
the letter 'l' or 'L' should work now.
- 0.8j (28.09.02)
o New option -P can define one or multiple symbols which are protected
against stripping (by -s or -x options). Currently not supported by
target "amigaos".
- 0.8i (06.06.02)
o New file format VOBJ was included.
o Some little endian fixes and improved support for MSDOS-based
operating systems ... :-/
- 0.8h (12.01.02)
o Fixed a bug when writing 26-bit values into a section! It was intro-
duced by code cleanup in V0.8f and affected the elf32ppc targets.
- 0.8g (01.01.02)
o (a.out): Support for the first little endian targets:
"aoutbsdi386" (NetBSD) and "aoutpc386".
- 0.8f (31.12.01)
o Cleanup of source text for ELF and a.out targets. Architecture specific
code is separated in different files. t_aout.c and t_elf32.c only
include common code now.
o Fixed reading/writing of 16/32 bit words in little- and big-endian
format. This should finally work on any(!) CPU now.
o When using linker scripts: Memory blocks can depend on current
address of previous blocks and align them to get their initial
org-address (". = ALIGN(x);" in scripts).
o Linker script symbols support alignment ("_sym = ALIGN(4)").
o (a.out): Can genetate relocatable object files (OMAGIC) and static paged
executables (ZMAGIC). Still no dynamically linked executables.
o (elf): -s will strip all symbols now, even the local ones (which didn't
work before).
o (ados/ehf): When writing relocs and external references the correct
addend will be written into the section to prevent differences from
other object files formats (like a.out).
- 0.8e (05.12.01)
o (ados/ehf): Line debug information is no longer ignored.
- 0.8d (01.12.01)
o Non-allocated (discardable) sections (like .comment in ELF for example)
will no longer be recognized as small data sections.
- 0.8c (26.06.01)
o Sign extension problems with 16-bit addends fixed.
- 0.8b (21.06.01)
o Relative references between different sections of two objects were
only detected from the first to the second object, but not the other
way around.
- 0.8a (11.04.01)
o -Bforcearchive is supported. This option forces all object units of
a library archive to be loaded into the output file.
- 0.8 (16.02.01)
o a.out support. New object file formats: aoutbsd68k, aoutbsd68k4k,
aoutsun010, aoutsun020 (the last two are used by gcc under AmigaOS).
Currently we can only read a.out objects and libraries, not write!
Some a.out symbol types are still missing, like SETA/T/D/V.
o Motorola S-Record support. New object file formats: srec19, srec28
and srec37 (16-, 24-, 32-bit addresses). Like "rawbinX", "srecXX"
can only be written. This is no read-format. Use linker scripts to
define the section layout of rawbin and srec.
o Support for indirect symbols, as required by the a.out format.
o Fixed BSD's long-names format in archives (missing 16-bit alignment).
o The special name "ARFILENAMES/" in GNU archives is recognized.
o Common symbols are really supported now.
o -dc option (force allocation of common symbols) works.
o vlink will find libraries in current directory now. Before, this only
worked for shared objects. The search sequence is: current directory,
user-defined (-L) directories, default directory (compiled in, -V).
o (ados/ehf): EXT_RELCOMMON is supported (common symbols).
Common symbol definitions have to be ignored. There are only common
symbol references in hunk format, which must be detected by checking
whether the referenced symbol is a common one.
o (ados/ehf): Fixed REL16 support in created objects.
o (ados/ehf): Added support for REL8,REL32,ADDR8,ADDR16,BASEREL8,BASEREL32.
o (ados/ehf): Prints a warning on unreferenced common symbols in an object,
because they will disappear in hunk format.
o (ados/ehf): Included linker symbols from GNU-gcc for AmigaOS/68k
(ixemul.library): ___machtype, ___text_size, ___data_size, ___bss_size.
This makes it theoretically possible to replace GNU-ld for linking a.out
objects into an Amiga hunk-format executable.
o (ados/ehf): Indirect symbols are ignored, when an executable is generated.
o (ados/ehf): Never writes relocation hunks with more than 65536 entries!
Due to a bug in AmigaOS' dos.library we have to use a workaround.
- 0.7c (02.12.00)
o (ados/ehf) Short relocations (option -R) must not be written as HUNK_DREL32
into an object file - it is allowed for executables only! For objects
(e.g. -r) we are using the correct HUNK_RELOC32SHORT now. Otherwise you
got the message "file format corrupted" when trying to link such an
object.
- 0.7b (13.11.00)
o (elf32ppc) ELF32-PowerUp objects (-r option) didn't contain any symbols!
So it was a bit difficult to link them with other objects after-
wards. ;)
- 0.7a (07.03.00)
o (ados/ehf) Linker option -R (short relocations) is now supported by target
amigaos. With this option given, it will try to create HUNK_DREL32 hunks
(which is the OS2.0-compatible equivalent to HUNK_RELOC32SHORT) whenever
possible - which means no more than 65535 relocations and no relocation
offset > 0xffff.
o Unlimited line length in object list files (-F option).
- 0.7 (13.02.00)
o (elf) Common symbol references are recognized. There are still problems
with those references, when using -r option.
- 0.6e (09.10.99)
o First mini support for linker scripts. They can be specified by using
the new option -T. Linker scripts will allow to create executables
for ELF (and other Unix targets) in future.
o New targets "rawbin1" and "rawbin2", which genereate an absolute
raw binary file. The base address is generally specified by using
a linker script (-T option). The difference between the two is, that
rawbin2 creates a separate file for every section.
- 0.6d (13.02.99)
o (elf) The PowerUp ELF loader has its own constructor/destructor
functionality for .ctors and .dtors sections, so we have to
rename them to .ctor_/.dtor_ (elf32powerup executable only). The
contents can still be referenced by .ctors/.dtors, though.
- 0.6c (05.02.99)
o (elf) Elf32 supports vbcc's _INIT/_EXIT function, where constructor/
destructor function pointers will be placed into the .ctors and .dtors
sections. .ctors/.dtors are using the standard format, but compiler-
generated entries will not work - the linker has to create these sections.
If .ctors or .dtors is referenced, but no such section exists, the
linker will create an artificial absolute symbol with the value 0
instead.
o All targets use the standard format for constructor/destructor
sections, which means: first longword describes the number of pointers
or is -1 (vlink uses the latter one), when the init code has to deter-
mine the number itself. The last longword will always be a NULL pointer.
- 0.6b (16.01.99)
o Changed copyright.
o Compiles now under Irix 5.3.
- 0.6a (19.12.98)
o vlink should be prepared to support little-endian objects now. The
endianess of the whole linking procedure is determined when loading
the first object file. Consequently the following ones must use the same.
o Fixed some problems with constructor/destructor-type linker symbols in
small data mode. Although they were addressed base-relative, their
sections could not be coalesced with the small data section and their
offsets were never updated.
- 0.6 (24.10.98)
o The section offset for base-relative relocations was made target-
dependant. Consequently, -baseoff modifies the default setting for
the current output file format.
The following default offsets were defined:
amigaos/amigaehf: 0x7ffe, elf32ppcbe/elf32powerup: 0x7ff0.
o New target elf32powerup, which supports the PPC coprocessor boards
from Phase5. The format of elf32powerup executables is the same as
the format of elf32ppcbe relocatable objects, but no unknown symbols
are allowed and base relative relocations will be resolved.
o (elf): Linking with shared objects is supported, but they still cannot
be created by vlink.
o (elf): .sdata/.sbss and .sdata2/.sbss2 (EABI) will always be combined,
also in -multibase mode.
o (elf32ppc): _LinkerDB is no longer known to elf32ppcbe. It's an
elf32powerup-only symbol now.
o (elf32ppc): Linker symbols _SDA_BASE_ and _SDA2_BASE (EABI).
- 0.5f (08.10.98)
o (ados/ehf): The automatic constructor/destructor functions have to
begin with __INIT or __EXIT to avoid conflicts with ANSI-C identifiers.
- 0.5e (05.10.98)
o A target may create prioritized pointers or constants in a new
section. This feature is useful for buidling constructor/destructor
function pointer tables. Currently used by ados/ehf only.
o (ados/ehf): Global symbols beginning with _INIT or _EXIT will create an
entry into the constructor/destructor function pointer table.
These tables can be addressed by using the symbols __ctors and __dtors
(e.g. in the startup/cleanup code of a program).
The priority of these functions may be defined by specifying a number
behind the INIT/EXIT string. Example: _INIT_9_OpenLibs.
Otherwise their priority defaults to 0 and they will be positioned
in order of occurence.
- 0.5d (22.08.98)
o Faster memory allocation algorithm, using 256k chunks. Can be
activated by defining FASTALLOC.
o Directories are only scanned for shared objects, because of a possible
version extension. This is a great improvement under AmigaOS, because
the file system is not fast enough.
o When using the -dn option together with the previous two enhancements,
vlink is nearly 10(!) times faster than before, under AmigaOS.
- 0.5c (08.07.98)
o (ados/ehf): If the target is EHF and an undefined reference to a
symbol beginning with "@_" was detected, it will be automagically
generated by the linker, as long as a symbol without "@_" already
exists. The linker will create an artificial object unit with the
name of the referenced symbol (without "@_"), including a data section
called ".tocd", which reserves four bytes for the symbol pointer.
This nice feature allows the generation of @__name pointer symbols
in the TOC section on demand, which saves a lot of space.
- 0.5b (05.07.98)
o (elf32ppc): Implemented linker symbol _LinkerDB.
- 0.5a (28.06.98)
o Error 19 (symbol xxx (yyy) is already defined in...) was turned
into a warning.
o Option -w (suppress warnings) was missing in help text.
- 0.5 (27.06.98)
o Target specific linker symbol support. This feature is currently
only used by the AmigaDOS file format.
o (ados/ehf): Implemented linker symbols:
_DATA_BAS_, _DATA_LEN_, _BSS_LEN_, _LinkerDB, __BSSBAS, __BSSLEN,
__ctors, __dtors, __DATA_BAS, __DATA_LEN, __BSS_LEN, __RESIDENT.
o -v shows the default target.
- 0.4 (05.06.98)
o New linking rules. A lot more factors are now involved in the decision
whether two sections have to be coalesced or not:
- target-specific linking rules are checked first
- small-code option forces merging of all code sections
- small-data option forces merging of all data and bss sections
- relative references between two sections
- all sections which have base-relative references from other sections
must be merged (if not denied by -multibase)
- default linking rules: sections must have the same name and type
o (ados/ehf): target specific linking rules:
- unnamed sections are never merged, unless the small-code or small-data
option is given
- sections named _NOMERGE are absolutely never merged
- data and bss sections named __MERGED will be merged, warn about
code sections with this name (but merge them anyway)
o All targets which support it can now take advantage of code-bss and
data-bss sections. In this case only the initalized section contents
is stored in the file, although the section header contains the total
size. The operating system is responsible for clearing the unini-
tialized part after loading.
o Option -sc forces merging of all code sections in an executable.
o Option -sd forces merging of all data and bss sections in an executable.
o Option -multibase prevents auto-merging of sections, which are accessed
base-relative. This means the program uses more than one base register
for accessing small data.
- 0.3b (02.05.98)
o Some experimental code for target elf64alpha, but nothing usable now.
o There were still infinite loops, if an object comes without any section.
o (ados/ehf) A dummy code section will be created, if an output file
has no section at all.
- 0.3a (18.04.98)
o Updated and changed some help texts.
- 0.3 (17.04.98)
o First version, which reliably links ELF32-PowerPC-BigEndian relocatable
object files and library archives. The only ELF output format is
currently a relocatable object, which means only linking with -r works.
o Support for SystemV-style and BSD-style ".a"-archives.
o (elf32ppc) Resolving ADDR16_HA/HI/LO references to a relocatable
symbol didn't work (2 bytes of the next instructions were overwritten).
o Fixed the print routine for function names, in which an error occured.
It didn't work, if symbols had a known size. Additionally, it can
differentiate between 'no type', 'function' and 'object' now.
o Option -R directs vlink to generate short relocs, if the target format
allows this. It is for example supported by ELF and AmigaDos.
Restriction: -R is currently ignored for ados/ehf and I'm not sure if
the implementation is correct for elf32ppc, because "objdump --reloc"
crashes on encountering ".rel" sections. Don't use this option for now!
o Commented out some options in the help text, which are still not supported.
o Implemented full support for little endian file formats, although
vlink currently doesn't know about one (maybe ELF64-Alpha-LittleEndian
will be the first? :).
o (ados/ehf) Absolute local symbols for object files and absolute local
and global symbols for executable files are ignored.
o (elf) Unlike ados/ehf, ELF allows multiple definitions of local symbols.
- 0.2a (20.03.98)
o Option -F reads a list of input files from the specified file name.
File names are separated by blanks, tabs, newlines, etc., so a file
name which contains blanks has to be in quotes.
- 0.2 (07.03.98)
o First version, which successfully linked EHF objects for WarpOS
into working executables!
o Library units are no longer forced being the last object units
in an output file. They will be immediately inserted, if a
unit's symbol is referenced. This makes it possible to ensure
that the last object in the linker command line will also be the
last object unit in the resulting output file.
o Option -v displays the standard library path.
o Severe problems with base relative references, if the output file
is a relocatable object again:
Normal references were resolved, but they must remain relocatable.
External references were even completely corrupted, and overwrote
the following instruction.
o (ados/ehf) Number of hunks determined in HUNK_HEADER was wrong,
if resident library name is missing (which is always the case).
o (ados/ehf) HUNK_DREL32 will be treated as HUNK_RELOC32SHORT, if the
input file is executable.
o (ados/ehf) Unnamed sections of an executable will always get
different names, to avoid that they are linked together. This would
cause some strange effects, like wrong base relative offsets, mixed
PowerPC and M68k code, etc..
- 0.1c (02.03.98)
o Internal error (thousands of sections detected), because of an
uninititalized variable.
- 0.1b (28.02.98)
o Base relative relocations, with -baseoff=0x8000 (default)
didn't work.
- 0.1a (28.02.98)
o Usage of AllocMem() in dir.c is not recommendable, when considering
a PowerPC-port. Changed to malloc().
o Some minor fixes - missing proto types, etc.
o Modified help text in version.c
- 0.1 (27.02.98)
o First version that seems to link AmigaOS ADOS and EHF
objects and libraries. Many common features, like linking
sections together which have relative references, are
still missing. Also, PowerPC-ELF32 support is about to come.
- 0.0 (04.08.97)
o Project started on a beautiful summer-day at the North Sea
beach of Cuxhaven. :)