@@ -63,11 +63,7 @@ void MCObjectFileInfo::initMachOMCObjectFileInfo(const Triple &T) {
63
63
if (T.isWatchABI ())
64
64
OmitDwarfIfHaveCompactUnwind = true ;
65
65
66
- PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel
67
- | dwarf::DW_EH_PE_sdata4;
68
- LSDAEncoding = FDECFIEncoding = dwarf::DW_EH_PE_pcrel;
69
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
70
- dwarf::DW_EH_PE_sdata4;
66
+ FDECFIEncoding = dwarf::DW_EH_PE_pcrel;
71
67
72
68
// .comm doesn't support alignment before Leopard.
73
69
if (T.isMacOSX () && T.isMacOSXVersionLT (10 , 5 ))
@@ -311,158 +307,11 @@ void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
311
307
case Triple::bpfeb:
312
308
FDECFIEncoding = dwarf::DW_EH_PE_sdata8;
313
309
break ;
314
- default :
315
- FDECFIEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
316
- break ;
317
- }
318
-
319
- switch (T.getArch ()) {
320
- case Triple::arm:
321
- case Triple::armeb:
322
- case Triple::thumb:
323
- case Triple::thumbeb:
324
- if (Ctx->getAsmInfo ()->getExceptionHandlingType () == ExceptionHandling::ARM)
325
- break ;
326
- // Fallthrough if not using EHABI
327
- LLVM_FALLTHROUGH;
328
- case Triple::ppc:
329
- case Triple::x86:
330
- PersonalityEncoding = PositionIndependent
331
- ? dwarf::DW_EH_PE_indirect |
332
- dwarf::DW_EH_PE_pcrel |
333
- dwarf::DW_EH_PE_sdata4
334
- : dwarf::DW_EH_PE_absptr;
335
- LSDAEncoding = PositionIndependent
336
- ? dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4
337
- : dwarf::DW_EH_PE_absptr;
338
- TTypeEncoding = PositionIndependent
339
- ? dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
340
- dwarf::DW_EH_PE_sdata4
341
- : dwarf::DW_EH_PE_absptr;
342
- break ;
343
- case Triple::x86_64:
344
- if (PositionIndependent) {
345
- PersonalityEncoding =
346
- dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
347
- (Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4);
348
- LSDAEncoding = dwarf::DW_EH_PE_pcrel |
349
- (Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4);
350
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
351
- (Large ? dwarf::DW_EH_PE_sdata8 : dwarf::DW_EH_PE_sdata4);
352
- } else {
353
- PersonalityEncoding =
354
- Large ? dwarf::DW_EH_PE_absptr : dwarf::DW_EH_PE_udata4;
355
- LSDAEncoding = Large ? dwarf::DW_EH_PE_absptr : dwarf::DW_EH_PE_udata4;
356
- TTypeEncoding = Large ? dwarf::DW_EH_PE_absptr : dwarf::DW_EH_PE_udata4;
357
- }
358
- break ;
359
310
case Triple::hexagon:
360
- PersonalityEncoding = dwarf::DW_EH_PE_absptr;
361
- LSDAEncoding = dwarf::DW_EH_PE_absptr;
362
- FDECFIEncoding = dwarf::DW_EH_PE_absptr;
363
- TTypeEncoding = dwarf::DW_EH_PE_absptr;
364
- if (PositionIndependent) {
365
- PersonalityEncoding |= dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel;
366
- LSDAEncoding |= dwarf::DW_EH_PE_pcrel;
367
- FDECFIEncoding |= dwarf::DW_EH_PE_pcrel;
368
- TTypeEncoding |= dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel;
369
- }
370
- break ;
371
- case Triple::aarch64:
372
- case Triple::aarch64_be:
373
- // The small model guarantees static code/data size < 4GB, but not where it
374
- // will be in memory. Most of these could end up >2GB away so even a signed
375
- // pc-relative 32-bit address is insufficient, theoretically.
376
- if (PositionIndependent) {
377
- PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
378
- dwarf::DW_EH_PE_sdata8;
379
- LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata8;
380
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
381
- dwarf::DW_EH_PE_sdata8;
382
- } else {
383
- PersonalityEncoding = dwarf::DW_EH_PE_absptr;
384
- LSDAEncoding = dwarf::DW_EH_PE_absptr;
385
- TTypeEncoding = dwarf::DW_EH_PE_absptr;
386
- }
387
- break ;
388
- case Triple::lanai:
389
- LSDAEncoding = dwarf::DW_EH_PE_absptr;
390
- PersonalityEncoding = dwarf::DW_EH_PE_absptr;
391
- TTypeEncoding = dwarf::DW_EH_PE_absptr;
392
- break ;
393
- case Triple::mips:
394
- case Triple::mipsel:
395
- case Triple::mips64:
396
- case Triple::mips64el:
397
- // MIPS uses indirect pointer to refer personality functions and types, so
398
- // that the eh_frame section can be read-only. DW.ref.personality will be
399
- // generated for relocation.
400
- PersonalityEncoding = dwarf::DW_EH_PE_indirect;
401
- // FIXME: The N64 ABI probably ought to use DW_EH_PE_sdata8 but we can't
402
- // identify N64 from just a triple.
403
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
404
- dwarf::DW_EH_PE_sdata4;
405
- // We don't support PC-relative LSDA references in GAS so we use the default
406
- // DW_EH_PE_absptr for those.
407
-
408
- // FreeBSD must be explicit about the data size and using pcrel since it's
409
- // assembler/linker won't do the automatic conversion that the Linux tools
410
- // do.
411
- if (T.isOSFreeBSD ()) {
412
- PersonalityEncoding |= dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
413
- LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
414
- }
415
- break ;
416
- case Triple::ppc64:
417
- case Triple::ppc64le:
418
- PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
419
- dwarf::DW_EH_PE_udata8;
420
- LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_udata8;
421
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
422
- dwarf::DW_EH_PE_udata8;
423
- break ;
424
- case Triple::sparcel:
425
- case Triple::sparc:
426
- if (PositionIndependent) {
427
- LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
428
- PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
429
- dwarf::DW_EH_PE_sdata4;
430
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
431
- dwarf::DW_EH_PE_sdata4;
432
- } else {
433
- LSDAEncoding = dwarf::DW_EH_PE_absptr;
434
- PersonalityEncoding = dwarf::DW_EH_PE_absptr;
435
- TTypeEncoding = dwarf::DW_EH_PE_absptr;
436
- }
437
- break ;
438
- case Triple::sparcv9:
439
- LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
440
- if (PositionIndependent) {
441
- PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
442
- dwarf::DW_EH_PE_sdata4;
443
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
444
- dwarf::DW_EH_PE_sdata4;
445
- } else {
446
- PersonalityEncoding = dwarf::DW_EH_PE_absptr;
447
- TTypeEncoding = dwarf::DW_EH_PE_absptr;
448
- }
449
- break ;
450
- case Triple::systemz:
451
- // All currently-defined code models guarantee that 4-byte PC-relative
452
- // values will be in range.
453
- if (PositionIndependent) {
454
- PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
455
- dwarf::DW_EH_PE_sdata4;
456
- LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
457
- TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
458
- dwarf::DW_EH_PE_sdata4;
459
- } else {
460
- PersonalityEncoding = dwarf::DW_EH_PE_absptr;
461
- LSDAEncoding = dwarf::DW_EH_PE_absptr;
462
- TTypeEncoding = dwarf::DW_EH_PE_absptr;
463
- }
464
- break ;
311
+ FDECFIEncoding =
312
+ PositionIndependent ? dwarf::DW_EH_PE_pcrel : dwarf::DW_EH_PE_absptr;
465
313
default :
314
+ FDECFIEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
466
315
break ;
467
316
}
468
317
@@ -908,8 +757,7 @@ void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, bool PIC,
908
757
SupportsCompactUnwindWithoutEHFrame = false ;
909
758
OmitDwarfIfHaveCompactUnwind = false ;
910
759
911
- PersonalityEncoding = LSDAEncoding = FDECFIEncoding = TTypeEncoding =
912
- dwarf::DW_EH_PE_absptr;
760
+ FDECFIEncoding = dwarf::DW_EH_PE_absptr;
913
761
914
762
CompactUnwindDwarfEHFrameOnly = 0 ;
915
763
0 commit comments