Skip to content

Commit b262e69

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

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
@@ -1327,10 +1327,11 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13271327
return 1;
13281328
}
13291329

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

13361337
// Do not optimize signed TLSDESC (as described in pauthabielf64 to LE/IE).
@@ -1339,10 +1340,12 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13391340
if (oneof<RE_AARCH64_AUTH_TLSDESC_PAGE, RE_AARCH64_AUTH_TLSDESC>(
13401341
expr)) {
13411342
assert(ctx.arg.emachine == EM_AARCH64);
1342-
if (!sym.hasFlag(NEEDS_TLSDESC))
1343+
if (!sym.hasFlag(NEEDS_TLSDESC)) {
13431344
sym.setFlags(NEEDS_TLSDESC | NEEDS_TLSDESC_AUTH);
1344-
else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH))
1345-
fatalBothAuthAndNonAuth();
1345+
} else if (!sym.hasFlag(NEEDS_TLSDESC_AUTH)) {
1346+
errBothAuthAndNonAuth();
1347+
return 1;
1348+
}
13461349
sec->addReloc({expr, type, offset, addend, &sym});
13471350
return 1;
13481351
}
@@ -1353,7 +1356,7 @@ unsigned RelocationScanner::handleTlsRelocation(RelExpr expr, RelType type,
13531356
// with signed TLSDESC enabled since it does not give any value, but leave a
13541357
// check against that just in case someone uses it.
13551358
if (expr != R_TLSDESC_CALL)
1356-
fatalBothAuthAndNonAuth();
1359+
errBothAuthAndNonAuth();
13571360
return 1;
13581361
}
13591362

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)