Skip to content

Commit 105213d

Browse files
committed
Use Err(ctx) instead of fatal and use getLocation in error message
1 parent 4b78eae commit 105213d

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
@@ -1351,10 +1351,11 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13511351
return 1;
13521352
}
13531353

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

13601361
// Do not optimize signed TLSDESC (as described in pauthabielf64 to LE/IE).
@@ -1363,10 +1364,12 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13631364
if (oneof<R_AARCH64_AUTH_TLSDESC_PAGE, RelExpr::R_AARCH64_AUTH_TLSDESC>(
13641365
expr)) {
13651366
assert(ctx.arg.emachine == EM_AARCH64);
1366-
if (!sym.hasFlag(NEEDS_TLSDESC))
1367+
if (!sym.hasFlag(NEEDS_TLSDESC)) {
13671368
sym.setFlags(NEEDS_TLSDESC | NEEDS_TLSDESC_AUTH);
1368-
else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH))
1369-
fatalBothAuthAndNonAuth();
1369+
} else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH)) {
1370+
errBothAuthAndNonAuth();
1371+
return 1;
1372+
}
13701373
sec->addReloc({expr, type, offset, addend, &sym});
13711374
return 1;
13721375
}
@@ -1377,7 +1380,7 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13771380
// with signed TLSDESC enabled since it does not give any value, but leave a
13781381
// check against that just in case someone uses it.
13791382
if (expr != R_TLSDESC_CALL)
1380-
fatalBothAuthAndNonAuth();
1383+
errBothAuthAndNonAuth();
13811384
return 1;
13821385
}
13831386

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)