@@ -694,8 +694,10 @@ fn appendCcExe(args: *std.ArrayList([]const u8), skip_cc_env_var: bool) !void {
694
694
/// `CsuPaths`.
695
695
pub const CrtBasenames = struct {
696
696
crt0 : ? []const u8 = null ,
697
+ crti : ? []const u8 = null ,
697
698
crtbegin : ? []const u8 = null ,
698
699
crtend : ? []const u8 = null ,
700
+ crtn : ? []const u8 = null ,
699
701
700
702
pub const GetArgs = struct {
701
703
target : std.Target ,
@@ -749,96 +751,137 @@ pub const CrtBasenames = struct {
749
751
750
752
return switch (target .os .tag ) {
751
753
.linux = > switch (mode ) {
752
- .dynamic_lib = > .{},
754
+ .dynamic_lib = > .{
755
+ .crti = "crti.o" ,
756
+ .crtn = "crtn.o" ,
757
+ },
753
758
.dynamic_exe = > .{
754
759
.crt0 = "crt1.o" ,
760
+ .crti = "crti.o" ,
761
+ .crtn = "crtn.o" ,
755
762
},
756
763
.dynamic_pie = > .{
757
764
.crt0 = "Scrt1.o" ,
765
+ .crti = "crti.o" ,
766
+ .crtn = "crtn.o" ,
758
767
},
759
768
.static_exe = > .{
760
769
.crt0 = "crt1.o" ,
770
+ .crti = "crti.o" ,
771
+ .crtn = "crtn.o" ,
761
772
},
762
773
.static_pie = > .{
763
774
.crt0 = "rcrt1.o" ,
775
+ .crti = "crti.o" ,
776
+ .crtn = "crtn.o" ,
764
777
},
765
778
},
766
779
.dragonfly = > switch (mode ) {
767
780
.dynamic_lib = > .{
781
+ .crti = "crti.o" ,
768
782
.crtbegin = "crtbeginS.o" ,
769
783
.crtend = "crtendS.o" ,
784
+ .crtn = "crtn.o" ,
770
785
},
771
786
.dynamic_exe = > .{
772
787
.crt0 = "crt1.o" ,
788
+ .crti = "crti.o" ,
773
789
.crtbegin = "crtbegin.o" ,
774
790
.crtend = "crtend.o" ,
791
+ .crtn = "crtn.o" ,
775
792
},
776
793
.dynamic_pie = > .{
777
794
.crt0 = "Scrt1.o" ,
795
+ .crti = "crti.o" ,
778
796
.crtbegin = "crtbeginS.o" ,
779
797
.crtend = "crtendS.o" ,
798
+ .crtn = "crtn.o" ,
780
799
},
781
800
.static_exe = > .{
782
801
.crt0 = "crt1.o" ,
802
+ .crti = "crti.o" ,
783
803
.crtbegin = "crtbegin.o" ,
784
804
.crtend = "crtend.o" ,
805
+ .crtn = "crtn.o" ,
785
806
},
786
807
.static_pie = > .{
787
808
.crt0 = "Scrt1.o" ,
809
+ .crti = "crti.o" ,
788
810
.crtbegin = "crtbeginS.o" ,
789
811
.crtend = "crtendS.o" ,
812
+ .crtn = "crtn.o" ,
790
813
},
791
814
},
792
815
.freebsd = > switch (mode ) {
793
816
.dynamic_lib = > .{
817
+ .crti = "crti.o" ,
794
818
.crtbegin = "crtbeginS.o" ,
795
819
.crtend = "crtendS.o" ,
820
+ .crtn = "crtn.o" ,
796
821
},
797
822
.dynamic_exe = > .{
798
823
.crt0 = "crt1.o" ,
824
+ .crti = "crti.o" ,
799
825
.crtbegin = "crtbegin.o" ,
800
826
.crtend = "crtend.o" ,
827
+ .crtn = "crtn.o" ,
801
828
},
802
829
.dynamic_pie = > .{
803
830
.crt0 = "Scrt1.o" ,
831
+ .crti = "crti.o" ,
804
832
.crtbegin = "crtbeginS.o" ,
805
833
.crtend = "crtendS.o" ,
834
+ .crtn = "crtn.o" ,
806
835
},
807
836
.static_exe = > .{
808
837
.crt0 = "crt1.o" ,
838
+ .crti = "crti.o" ,
809
839
.crtbegin = "crtbeginT.o" ,
810
840
.crtend = "crtend.o" ,
841
+ .crtn = "crtn.o" ,
811
842
},
812
843
.static_pie = > .{
813
844
.crt0 = "Scrt1.o" ,
845
+ .crti = "crti.o" ,
814
846
.crtbegin = "crtbeginS.o" ,
815
847
.crtend = "crtendS.o" ,
848
+ .crtn = "crtn.o" ,
816
849
},
817
850
},
818
851
.netbsd = > switch (mode ) {
819
852
.dynamic_lib = > .{
853
+ .crti = "crti.o" ,
820
854
.crtbegin = "crtbeginS.o" ,
821
855
.crtend = "crtendS.o" ,
856
+ .crtn = "crtn.o" ,
822
857
},
823
858
.dynamic_exe = > .{
824
859
.crt0 = "crt0.o" ,
860
+ .crti = "crti.o" ,
825
861
.crtbegin = "crtbegin.o" ,
826
862
.crtend = "crtend.o" ,
863
+ .crtn = "crtn.o" ,
827
864
},
828
865
.dynamic_pie = > .{
829
866
.crt0 = "crt0.o" ,
867
+ .crti = "crti.o" ,
830
868
.crtbegin = "crtbeginS.o" ,
831
869
.crtend = "crtendS.o" ,
870
+ .crtn = "crtn.o" ,
832
871
},
833
872
.static_exe = > .{
834
873
.crt0 = "crt0.o" ,
874
+ .crti = "crti.o" ,
835
875
.crtbegin = "crtbeginT.o" ,
836
876
.crtend = "crtend.o" ,
877
+ .crtn = "crtn.o" ,
837
878
},
838
879
.static_pie = > .{
839
880
.crt0 = "crt0.o" ,
881
+ .crti = "crti.o" ,
840
882
.crtbegin = "crtbeginT.o" ,
841
883
.crtend = "crtendS.o" ,
884
+ .crtn = "crtn.o" ,
842
885
},
843
886
},
844
887
.openbsd = > switch (mode ) {
@@ -859,34 +902,49 @@ pub const CrtBasenames = struct {
859
902
},
860
903
.haiku = > switch (mode ) {
861
904
.dynamic_lib = > .{
905
+ .crti = "crti.o" ,
862
906
.crtbegin = "crtbeginS.o" ,
863
907
.crtend = "crtendS.o" ,
908
+ .crtn = "crtn.o" ,
864
909
},
865
910
.dynamic_exe = > .{
866
911
.crt0 = "start_dyn.o" ,
912
+ .crti = "crti.o" ,
867
913
.crtbegin = "crtbegin.o" ,
868
914
.crtend = "crtend.o" ,
915
+ .crtn = "crtn.o" ,
869
916
},
870
917
.dynamic_pie = > .{
871
918
.crt0 = "start_dyn.o" ,
919
+ .crti = "crti.o" ,
872
920
.crtbegin = "crtbeginS.o" ,
873
921
.crtend = "crtendS.o" ,
922
+ .crtn = "crtn.o" ,
874
923
},
875
924
.static_exe = > .{
876
925
.crt0 = "start_dyn.o" ,
926
+ .crti = "crti.o" ,
877
927
.crtbegin = "crtbegin.o" ,
878
928
.crtend = "crtend.o" ,
929
+ .crtn = "crtn.o" ,
879
930
},
880
931
.static_pie = > .{
881
932
.crt0 = "start_dyn.o" ,
933
+ .crti = "crti.o" ,
882
934
.crtbegin = "crtbeginS.o" ,
883
935
.crtend = "crtendS.o" ,
936
+ .crtn = "crtn.o" ,
884
937
},
885
938
},
886
939
.solaris , .illumos = > switch (mode ) {
887
- .dynamic_lib = > .{},
940
+ .dynamic_lib = > .{
941
+ .crti = "crti.o" ,
942
+ .crtn = "crtn.o" ,
943
+ },
888
944
.dynamic_exe , .dynamic_pie = > .{
889
945
.crt0 = "crt1.o" ,
946
+ .crti = "crti.o" ,
947
+ .crtn = "crtn.o" ,
890
948
},
891
949
.static_exe , .static_pie = > .{},
892
950
},
@@ -897,8 +955,10 @@ pub const CrtBasenames = struct {
897
955
898
956
pub const CrtPaths = struct {
899
957
crt0 : ? Path = null ,
958
+ crti : ? Path = null ,
900
959
crtbegin : ? Path = null ,
901
960
crtend : ? Path = null ,
961
+ crtn : ? Path = null ,
902
962
};
903
963
904
964
pub fn resolveCrtPaths (
@@ -920,6 +980,7 @@ pub fn resolveCrtPaths(
920
980
}) orelse true ) "gcc80" else "gcc54" ;
921
981
return .{
922
982
.crt0 = if (crt_basenames .crt0 ) | basename | try crt_dir_path .join (arena , basename ) else null ,
983
+ .crti = if (crt_basenames .crti ) | basename | try crt_dir_path .join (arena , basename ) else null ,
923
984
.crtbegin = if (crt_basenames .crtbegin ) | basename | .{
924
985
.root_dir = crt_dir_path .root_dir ,
925
986
.sub_path = try fs .path .join (arena , &.{ crt_dir_path .sub_path , gccv , basename }),
@@ -928,6 +989,7 @@ pub fn resolveCrtPaths(
928
989
.root_dir = crt_dir_path .root_dir ,
929
990
.sub_path = try fs .path .join (arena , &.{ crt_dir_path .sub_path , gccv , basename }),
930
991
} else null ,
992
+ .crtn = if (crt_basenames .crtn ) | basename | try crt_dir_path .join (arena , basename ) else null ,
931
993
};
932
994
},
933
995
.haiku = > {
@@ -937,15 +999,19 @@ pub fn resolveCrtPaths(
937
999
};
938
1000
return .{
939
1001
.crt0 = if (crt_basenames .crt0 ) | basename | try crt_dir_path .join (arena , basename ) else null ,
1002
+ .crti = if (crt_basenames .crti ) | basename | try crt_dir_path .join (arena , basename ) else null ,
940
1003
.crtbegin = if (crt_basenames .crtbegin ) | basename | try gcc_dir_path .join (arena , basename ) else null ,
941
1004
.crtend = if (crt_basenames .crtend ) | basename | try gcc_dir_path .join (arena , basename ) else null ,
1005
+ .crtn = if (crt_basenames .crtn ) | basename | try crt_dir_path .join (arena , basename ) else null ,
942
1006
};
943
1007
},
944
1008
else = > {
945
1009
return .{
946
1010
.crt0 = if (crt_basenames .crt0 ) | basename | try crt_dir_path .join (arena , basename ) else null ,
1011
+ .crti = if (crt_basenames .crti ) | basename | try crt_dir_path .join (arena , basename ) else null ,
947
1012
.crtbegin = if (crt_basenames .crtbegin ) | basename | try crt_dir_path .join (arena , basename ) else null ,
948
1013
.crtend = if (crt_basenames .crtend ) | basename | try crt_dir_path .join (arena , basename ) else null ,
1014
+ .crtn = if (crt_basenames .crtn ) | basename | try crt_dir_path .join (arena , basename ) else null ,
949
1015
};
950
1016
},
951
1017
}
0 commit comments