Skip to content

Commit 089c078

Browse files
committed
Use Err(ctx) instead of fatal and use getLocation in error message
1 parent 3c304ad commit 089c078

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

lld/ELF/Relocations.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1348,10 +1348,11 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13481348
return 1;
13491349
}
13501350

1351-
auto fatalBothAuthAndNonAuth = [&sym]() {
1352-
fatal("both AUTH and non-AUTH TLSDESC entries for '" + sym.getName() +
1353-
"' requested, but only one type of TLSDESC entry per symbol is "
1354-
"supported");
1351+
auto errBothAuthAndNonAuth = [this, &sym, offset]() {
1352+
Err(ctx) << "both AUTH and non-AUTH TLSDESC entries for '" << sym.getName()
1353+
<< "' requested, but only one type of TLSDESC entry per symbol is "
1354+
"supported"
1355+
<< getLocation(ctx, *sec, sym, offset);
13551356
};
13561357

13571358
// Do not optimize signed TLSDESC (as described in pauthabielf64 to LE/IE).
@@ -1360,10 +1361,12 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13601361
if (oneof<RE_AARCH64_AUTH_TLSDESC_PAGE, RE_AARCH64_AUTH_TLSDESC>(
13611362
expr)) {
13621363
assert(ctx.arg.emachine == EM_AARCH64);
1363-
if (!sym.hasFlag(NEEDS_TLSDESC))
1364+
if (!sym.hasFlag(NEEDS_TLSDESC)) {
13641365
sym.setFlags(NEEDS_TLSDESC | NEEDS_TLSDESC_AUTH);
1365-
else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH))
1366-
fatalBothAuthAndNonAuth();
1366+
} else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH)) {
1367+
errBothAuthAndNonAuth();
1368+
return 1;
1369+
}
13671370
sec->addReloc({expr, type, offset, addend, &sym});
13681371
return 1;
13691372
}
@@ -1374,7 +1377,7 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13741377
// with signed TLSDESC enabled since it does not give any value, but leave a
13751378
// check against that just in case someone uses it.
13761379
if (expr != R_TLSDESC_CALL)
1377-
fatalBothAuthAndNonAuth();
1380+
errBothAuthAndNonAuth();
13781381
return 1;
13791382
}
13801383

lld/test/ELF/aarch64-tlsdesc-pauth.s

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,9 @@ local2:
101101

102102
// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-linux -mattr=+pauth err1.s -o err1.o
103103
// RUN: not ld.lld -shared err1.o -o err1.so 2>&1 | FileCheck --check-prefix=ERR1 %s
104-
// ERR1: error: both AUTH and non-AUTH TLSDESC entries for 'a' requested, but only one type of TLSDESC entry per symbol is supported
104+
// ERR1: error: both AUTH and non-AUTH TLSDESC entries for 'a' requested, but only one type of TLSDESC entry per symbol is supported
105+
// ERR1-NEXT: >>> defined in err1.o
106+
// ERR1-NEXT: >>> referenced by err1.o:(.text+0x10)
105107
.text
106108
adrp x0, :tlsdesc_auth:a
107109
ldr x16, [x0, :tlsdesc_auth_lo12:a]
@@ -119,7 +121,9 @@ local2:
119121

120122
// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-linux -mattr=+pauth err2.s -o err2.o
121123
// RUN: not ld.lld -shared err2.o -o err2.so 2>&1 | FileCheck --check-prefix=ERR2 %s
122-
// ERR2: error: both AUTH and non-AUTH TLSDESC entries for 'a' requested, but only one type of TLSDESC entry per symbol is supported
124+
// ERR2: error: both AUTH and non-AUTH TLSDESC entries for 'a' requested, but only one type of TLSDESC entry per symbol is supported
125+
// ERR2-NEXT: >>> defined in err2.o
126+
// ERR2-NEXT: >>> referenced by err2.o:(.text+0x10)
123127
.text
124128
adrp x0, :tlsdesc:a
125129
ldr x1, [x0, :tlsdesc_lo12:a]

0 commit comments

Comments
 (0)