Skip to content

Commit 741ba42

Browse files
committed
Merge remote-tracking branch 'origin/main' into vpbundlerecipe
2 parents 9688a79 + 090f409 commit 741ba42

File tree

208 files changed

+2435
-1259
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

208 files changed

+2435
-1259
lines changed

bolt/lib/Rewrite/LinuxKernelRewriter.cpp

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -432,25 +432,33 @@ class LinuxKernelRewriter final : public MetadataRewriter {
432432
};
433433

434434
Error LinuxKernelRewriter::detectLinuxKernelVersion() {
435-
if (BinaryData *BD = BC.getBinaryDataByName("linux_banner")) {
436-
const BinarySection &Section = BD->getSection();
437-
const std::string S =
438-
Section.getContents().substr(BD->getOffset(), BD->getSize()).str();
439-
440-
const std::regex Re(R"---(Linux version ((\d+)\.(\d+)(\.(\d+))?))---");
441-
std::smatch Match;
442-
if (std::regex_search(S, Match, Re)) {
443-
const unsigned Major = std::stoi(Match[2].str());
444-
const unsigned Minor = std::stoi(Match[3].str());
445-
const unsigned Rev = Match[5].matched ? std::stoi(Match[5].str()) : 0;
446-
LinuxKernelVersion = LKVersion(Major, Minor, Rev);
447-
BC.outs() << "BOLT-INFO: Linux kernel version is " << Match[1].str()
448-
<< "\n";
449-
return Error::success();
450-
}
435+
// Check for global and local linux_banner symbol.
436+
BinaryData *BD = BC.getBinaryDataByName("linux_banner");
437+
if (!BD)
438+
BD = BC.getBinaryDataByName("linux_banner/1");
439+
440+
if (!BD)
441+
return createStringError(errc::executable_format_error,
442+
"unable to locate linux_banner");
443+
444+
const BinarySection &Section = BD->getSection();
445+
const std::string S =
446+
Section.getContents().substr(BD->getOffset(), BD->getSize()).str();
447+
448+
const std::regex Re(R"---(Linux version ((\d+)\.(\d+)(\.(\d+))?))---");
449+
std::smatch Match;
450+
if (std::regex_search(S, Match, Re)) {
451+
const unsigned Major = std::stoi(Match[2].str());
452+
const unsigned Minor = std::stoi(Match[3].str());
453+
const unsigned Rev = Match[5].matched ? std::stoi(Match[5].str()) : 0;
454+
LinuxKernelVersion = LKVersion(Major, Minor, Rev);
455+
BC.outs() << "BOLT-INFO: Linux kernel version is " << Match[1].str()
456+
<< "\n";
457+
return Error::success();
451458
}
459+
452460
return createStringError(errc::executable_format_error,
453-
"Linux kernel version is unknown");
461+
"Linux kernel version is unknown: " + S);
454462
}
455463

456464
void LinuxKernelRewriter::processLKSections() {

bolt/test/X86/linux-version.S

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
# RUN: -Wl,--image-base=0xffffffff80000000,--no-dynamic-linker,--no-eh-frame-hdr
1818
# RUN: llvm-bolt %t.exe -o %t.out 2>&1 | FileCheck --check-prefix=CHECK-C %s
1919

20+
# RUN: %clang -DD -target x86_64-unknown-unknown \
21+
# RUN: %cflags -nostdlib %s -o %t.exe \
22+
# RUN: -Wl,--image-base=0xffffffff80000000,--no-dynamic-linker,--no-eh-frame-hdr
23+
# RUN: llvm-bolt %t.exe -o %t.out 2>&1 | FileCheck --check-prefix=CHECK-D %s
24+
2025
.text
2126
.globl foo
2227
.type foo, %function
@@ -46,6 +51,12 @@ linux_banner:
4651
#endif
4752
# CHECK-C: BOLT-INFO: Linux kernel version is 6.6
4853

54+
#ifdef D
55+
.hidden linux_banner
56+
.string "Linux version 6.6.15.2-2-xxx\n"
57+
#endif
58+
# CHECK-D: BOLT-INFO: Linux kernel version is 6.6
59+
4960
.size linux_banner, . - linux_banner
5061

5162
## Fake Linux Kernel sections.

clang/include/clang/AST/TypeProperties.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ let Class = TemplateSpecializationType in {
753753
}
754754

755755
def : Creator<[{
756-
return ctx.getTemplateSpecializationType(templateName, args, std::nullopt, UnderlyingType);
756+
return ctx.getTemplateSpecializationType(templateName, args, {}, UnderlyingType);
757757
}]>;
758758
}
759759

clang/include/clang/Basic/OffloadArch.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ enum class OffloadArch {
9898
GFX12_GENERIC,
9999
GFX1200,
100100
GFX1201,
101+
GFX1250,
101102
AMDGCNSPIRV,
102103
Generic, // A processor model named 'generic' if the target backend defines a
103104
// public one.

clang/include/clang/Serialization/ASTReader.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,7 @@ struct VisibleLookupBlockOffsets {
379379
uint64_t TULocalOffset = 0;
380380

381381
operator bool() const {
382-
return VisibleOffset || ModuleLocalOffset || // ModuleUnitLocalOffset ||
383-
TULocalOffset;
382+
return VisibleOffset || ModuleLocalOffset || TULocalOffset;
384383
}
385384
};
386385

clang/lib/AST/ASTContext.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14283,7 +14283,7 @@ static QualType getCommonNonSugarTypeNode(ASTContext &Ctx, const Type *X,
1428314283
::getCommonTemplateNameChecked(Ctx, TX->getTemplateName(),
1428414284
TY->getTemplateName(),
1428514285
/*IgnoreDeduced=*/true),
14286-
As, /*CanonicalArgs=*/std::nullopt, X->getCanonicalTypeInternal());
14286+
As, /*CanonicalArgs=*/{}, X->getCanonicalTypeInternal());
1428714287
}
1428814288
case Type::Decltype: {
1428914289
const auto *DX = cast<DecltypeType>(X);
@@ -14529,7 +14529,7 @@ static QualType getCommonSugarTypeNode(ASTContext &Ctx, const Type *X,
1452914529
TY->template_arguments()))
1453014530
return QualType();
1453114531
return Ctx.getTemplateSpecializationType(CTN, As,
14532-
/*CanonicalArgs=*/std::nullopt,
14532+
/*CanonicalArgs=*/{},
1453314533
Ctx.getQualifiedType(Underlying));
1453414534
}
1453514535
case Type::Typedef: {

clang/lib/AST/ASTDiagnostic.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ QualType clang::desugarForDiagnostic(ASTContext &Context, QualType QT,
130130
if (DesugarArgument) {
131131
ShouldAKA = true;
132132
QT = Context.getTemplateSpecializationType(
133-
TST->getTemplateName(), Args, /*CanonicalArgs=*/std::nullopt, QT);
133+
TST->getTemplateName(), Args, /*CanonicalArgs=*/{}, QT);
134134
}
135135
break;
136136
}
@@ -1143,7 +1143,7 @@ class TemplateDiff {
11431143

11441144
Ty = Context.getTemplateSpecializationType(
11451145
TemplateName(CTSD->getSpecializedTemplate()),
1146-
CTSD->getTemplateArgs().asArray(), /*CanonicalArgs=*/std::nullopt,
1146+
CTSD->getTemplateArgs().asArray(), /*CanonicalArgs=*/{},
11471147
Ty.getLocalUnqualifiedType().getCanonicalType());
11481148

11491149
return Ty->getAs<TemplateSpecializationType>();

clang/lib/AST/ASTImporter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1664,7 +1664,7 @@ ExpectedType ASTNodeImporter::VisitTemplateSpecializationType(
16641664
if (!ToUnderlyingOrErr)
16651665
return ToUnderlyingOrErr.takeError();
16661666
return Importer.getToContext().getTemplateSpecializationType(
1667-
*ToTemplateOrErr, ToTemplateArgs, std::nullopt, *ToUnderlyingOrErr);
1667+
*ToTemplateOrErr, ToTemplateArgs, {}, *ToUnderlyingOrErr);
16681668
}
16691669

16701670
ExpectedType ASTNodeImporter::VisitElaboratedType(const ElaboratedType *T) {

clang/lib/AST/DeclTemplate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ ClassTemplateDecl::getInjectedClassNameSpecialization() {
669669
CommonPtr->InjectedClassNameType =
670670
Context.getTemplateSpecializationType(Name,
671671
/*SpecifiedArgs=*/TemplateArgs,
672-
/*CanonicalArgs=*/std::nullopt);
672+
/*CanonicalArgs=*/{});
673673
return CommonPtr->InjectedClassNameType;
674674
}
675675

clang/lib/AST/QualTypeNames.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ static const Type *getFullyQualifiedTemplateType(const ASTContext &Ctx,
140140
if (MightHaveChanged) {
141141
QualType QT = Ctx.getTemplateSpecializationType(
142142
TST->getTemplateName(), FQArgs,
143-
/*CanonicalArgs=*/std::nullopt, TST->desugar());
143+
/*CanonicalArgs=*/{}, TST->desugar());
144144
// getTemplateSpecializationType returns a fully qualified
145145
// version of the specialization itself, so no need to qualify
146146
// it.
@@ -172,8 +172,7 @@ static const Type *getFullyQualifiedTemplateType(const ASTContext &Ctx,
172172
TemplateName TN(TSTDecl->getSpecializedTemplate());
173173
QualType QT = Ctx.getTemplateSpecializationType(
174174
TN, FQArgs,
175-
/*CanonicalArgs=*/std::nullopt,
176-
TSTRecord->getCanonicalTypeInternal());
175+
/*CanonicalArgs=*/{}, TSTRecord->getCanonicalTypeInternal());
177176
// getTemplateSpecializationType returns a fully qualified
178177
// version of the specialization itself, so no need to qualify
179178
// it.

0 commit comments

Comments
 (0)