Skip to content

Commit 7a3eabc

Browse files
committed
Use Err(ctx) instead of fatal and use getLocation in error message
1 parent a00c13d commit 7a3eabc

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
@@ -1331,10 +1331,11 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13311331
return 1;
13321332
}
13331333

1334-
auto fatalBothAuthAndNonAuth = [&sym]() {
1335-
fatal("both AUTH and non-AUTH TLSDESC entries for '" + sym.getName() +
1336-
"' requested, but only one type of TLSDESC entry per symbol is "
1337-
"supported");
1334+
auto errBothAuthAndNonAuth = [this, &sym, offset]() {
1335+
Err(ctx) << "both AUTH and non-AUTH TLSDESC entries for '" << sym.getName()
1336+
<< "' requested, but only one type of TLSDESC entry per symbol is "
1337+
"supported"
1338+
<< getLocation(ctx, *sec, sym, offset);
13381339
};
13391340

13401341
// Do not optimize signed TLSDESC (as described in pauthabielf64 to LE/IE).
@@ -1343,10 +1344,12 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13431344
if (oneof<R_AARCH64_AUTH_TLSDESC_PAGE, RelExpr::R_AARCH64_AUTH_TLSDESC>(
13441345
expr)) {
13451346
assert(ctx.arg.emachine == EM_AARCH64);
1346-
if (!sym.hasFlag(NEEDS_TLSDESC))
1347+
if (!sym.hasFlag(NEEDS_TLSDESC)) {
13471348
sym.setFlags(NEEDS_TLSDESC | NEEDS_TLSDESC_AUTH);
1348-
else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH))
1349-
fatalBothAuthAndNonAuth();
1349+
} else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH)) {
1350+
errBothAuthAndNonAuth();
1351+
return 1;
1352+
}
13501353
sec->addReloc({expr, type, offset, addend, &sym});
13511354
return 1;
13521355
}
@@ -1357,7 +1360,7 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13571360
// with signed TLSDESC enabled since it does not give any value, but leave a
13581361
// check against that just in case someone uses it.
13591362
if (expr != R_TLSDESC_CALL)
1360-
fatalBothAuthAndNonAuth();
1363+
errBothAuthAndNonAuth();
13611364
return 1;
13621365
}
13631366

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)