@@ -898,58 +898,7 @@ pub const Object = struct {
898
898
.{ .optimized = comp.root_mod.optimize_mode != .Debug },
899
899
);
900
900
901
- const i32_2 = try builder.intConst(.i32, 2);
902
- const i32_3 = try builder.intConst(.i32, 3);
903
- const debug_info_version = try builder.debugModuleFlag(
904
- try builder.metadataConstant(i32_2),
905
- try builder.metadataString("Debug Info Version"),
906
- try builder.metadataConstant(i32_3),
907
- );
908
-
909
- switch (comp.config.debug_format) {
910
- .strip => unreachable,
911
- .dwarf => |f| {
912
- const i32_4 = try builder.intConst(.i32, 4);
913
- const dwarf_version = try builder.debugModuleFlag(
914
- try builder.metadataConstant(i32_2),
915
- try builder.metadataString("Dwarf Version"),
916
- try builder.metadataConstant(i32_4),
917
- );
918
- switch (f) {
919
- .@"32" => {
920
- try builder.debugNamed(try builder.metadataString("llvm.module.flags"), &.{
921
- debug_info_version,
922
- dwarf_version,
923
- });
924
- },
925
- .@"64" => {
926
- const dwarf64 = try builder.debugModuleFlag(
927
- try builder.metadataConstant(i32_2),
928
- try builder.metadataString("DWARF64"),
929
- try builder.metadataConstant(.@"1"),
930
- );
931
- try builder.debugNamed(try builder.metadataString("llvm.module.flags"), &.{
932
- debug_info_version,
933
- dwarf_version,
934
- dwarf64,
935
- });
936
- },
937
- }
938
- },
939
- .code_view => {
940
- const code_view = try builder.debugModuleFlag(
941
- try builder.metadataConstant(i32_2),
942
- try builder.metadataString("CodeView"),
943
- try builder.metadataConstant(.@"1"),
944
- );
945
- try builder.debugNamed(try builder.metadataString("llvm.module.flags"), &.{
946
- debug_info_version,
947
- code_view,
948
- });
949
- },
950
- }
951
-
952
- try builder.debugNamed(try builder.metadataString("llvm.dbg.cu"), &.{debug_compile_unit});
901
+ try builder.metadataNamed(try builder.metadataString("llvm.dbg.cu"), &.{debug_compile_unit});
953
902
break :debug_info .{ debug_compile_unit, debug_enums_fwd_ref, debug_globals_fwd_ref };
954
903
} else .{.none} ** 3;
955
904
@@ -1149,6 +1098,84 @@ pub const Object = struct {
1149
1098
}
1150
1099
}
1151
1100
1101
+ {
1102
+ var module_flags = try std.ArrayList(Builder.Metadata).initCapacity(o.gpa, 6);
1103
+ defer module_flags.deinit();
1104
+
1105
+ const behavior_error = try o.builder.metadataConstant(try o.builder.intConst(.i32, 1));
1106
+ const behavior_warning = try o.builder.metadataConstant(try o.builder.intConst(.i32, 2));
1107
+ const behavior_max = try o.builder.metadataConstant(try o.builder.intConst(.i32, 7));
1108
+ const behavior_min = try o.builder.metadataConstant(try o.builder.intConst(.i32, 8));
1109
+
1110
+ const pic_level = target_util.picLevel(comp.root_mod.resolved_target.result);
1111
+ if (comp.root_mod.pic) {
1112
+ module_flags.appendAssumeCapacity(try o.builder.metadataModuleFlag(
1113
+ behavior_min,
1114
+ try o.builder.metadataString("PIC Level"),
1115
+ try o.builder.metadataConstant(try o.builder.intConst(.i32, pic_level)),
1116
+ ));
1117
+ }
1118
+
1119
+ if (comp.config.pie) {
1120
+ module_flags.appendAssumeCapacity(try o.builder.metadataModuleFlag(
1121
+ behavior_max,
1122
+ try o.builder.metadataString("PIE Level"),
1123
+ try o.builder.metadataConstant(try o.builder.intConst(.i32, pic_level)),
1124
+ ));
1125
+ }
1126
+
1127
+ if (comp.root_mod.code_model != .default) {
1128
+ module_flags.appendAssumeCapacity(try o.builder.metadataModuleFlag(
1129
+ behavior_error,
1130
+ try o.builder.metadataString("Code Model"),
1131
+ try o.builder.metadataConstant(try o.builder.intConst(.i32, @as(i32, switch (comp.root_mod.code_model) {
1132
+ .tiny => 0,
1133
+ .small => 1,
1134
+ .kernel => 2,
1135
+ .medium => 3,
1136
+ .large => 4,
1137
+ else => unreachable,
1138
+ }))),
1139
+ ));
1140
+ }
1141
+
1142
+ if (!o.builder.strip) {
1143
+ module_flags.appendAssumeCapacity(try o.builder.metadataModuleFlag(
1144
+ behavior_warning,
1145
+ try o.builder.metadataString("Debug Info Version"),
1146
+ try o.builder.metadataConstant(try o.builder.intConst(.i32, 3)),
1147
+ ));
1148
+
1149
+ switch (comp.config.debug_format) {
1150
+ .strip => unreachable,
1151
+ .dwarf => |f| {
1152
+ module_flags.appendAssumeCapacity(try o.builder.metadataModuleFlag(
1153
+ behavior_max,
1154
+ try o.builder.metadataString("Dwarf Version"),
1155
+ try o.builder.metadataConstant(try o.builder.intConst(.i32, 4)),
1156
+ ));
1157
+
1158
+ if (f == .@"64") {
1159
+ module_flags.appendAssumeCapacity(try o.builder.metadataModuleFlag(
1160
+ behavior_max,
1161
+ try o.builder.metadataString("DWARF64"),
1162
+ try o.builder.metadataConstant(.@"1"),
1163
+ ));
1164
+ }
1165
+ },
1166
+ .code_view => {
1167
+ module_flags.appendAssumeCapacity(try o.builder.metadataModuleFlag(
1168
+ behavior_warning,
1169
+ try o.builder.metadataString("CodeView"),
1170
+ try o.builder.metadataConstant(.@"1"),
1171
+ ));
1172
+ },
1173
+ }
1174
+ }
1175
+
1176
+ try o.builder.metadataNamed(try o.builder.metadataString("llvm.module.flags"), module_flags.items);
1177
+ }
1178
+
1152
1179
const target_triple_sentinel =
1153
1180
try o.gpa.dupeZ(u8, o.builder.target_triple.slice(&o.builder).?);
1154
1181
defer o.gpa.free(target_triple_sentinel);
@@ -1235,14 +1262,13 @@ pub const Object = struct {
1235
1262
}
1236
1263
1237
1264
const optimize_mode = comp.root_mod.optimize_mode;
1238
- const pic = comp.root_mod.pic;
1239
1265
1240
1266
const opt_level: llvm.CodeGenOptLevel = if (optimize_mode == .Debug)
1241
1267
.None
1242
1268
else
1243
1269
.Aggressive;
1244
1270
1245
- const reloc_mode: llvm.RelocMode = if (pic)
1271
+ const reloc_mode: llvm.RelocMode = if (comp.root_mod. pic)
1246
1272
.PIC
1247
1273
else if (comp.config.link_mode == .dynamic)
1248
1274
llvm.RelocMode.DynamicNoPIC
@@ -1276,13 +1302,6 @@ pub const Object = struct {
1276
1302
);
1277
1303
errdefer target_machine.dispose();
1278
1304
1279
- const large_pic = target_util.usesLargePIC(comp.root_mod.resolved_target.result);
1280
-
1281
- if (pic) module.setModulePICLevel(large_pic);
1282
- if (comp.config.pie) module.setModulePIELevel(large_pic);
1283
-
1284
- if (code_model != .Default) module.setModuleCodeModel(code_model);
1285
-
1286
1305
if (comp.llvm_opt_bisect_limit >= 0) {
1287
1306
context.setOptBisectLimit(comp.llvm_opt_bisect_limit);
1288
1307
}
0 commit comments