Skip to content

Commit e8dc289

Browse files
committed
Merge remote-tracking branch 'origin/main' into vpbundlerecipe
2 parents 1b7bf4b + 0816bb3 commit e8dc289

File tree

1,310 files changed

+65328
-20759
lines changed

Some content is hidden

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

1,310 files changed

+65328
-20759
lines changed

.github/new-prs-labeler.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,10 @@ backend:NVPTX:
777777
- 'llvm/**/*nvptx*/**'
778778
- 'llvm/**/*NVPTX*/**'
779779

780+
backend:MIPS:
781+
- '**/*mips*'
782+
- '**/*Mips*'
783+
780784
backend:RISC-V:
781785
- clang/**/*riscv*
782786
- clang/**/*RISCV*

.github/workflows/libcxx-restart-preempted-jobs.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
with:
3434
script: |
3535
const failure_regex = /Process completed with exit code 1./
36-
const preemption_regex = /The runner has received a shutdown signal/
36+
const preemption_regex = /(The runner has received a shutdown signal)|(The operation was canceled)/
3737
3838
const wf_run = context.payload.workflow_run
3939
core.notice(`Running on "${wf_run.display_title}" by @${wf_run.actor.login} (event: ${wf_run.event})\nWorkflow run URL: ${wf_run.html_url}`)

bolt/include/bolt/Passes/PAuthGadgetScanner.h

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,7 @@ namespace PAuthGadgetScanner {
199199
// to distinguish intermediate and final results at the type level.
200200
//
201201
// Here is an overview of issue life-cycle:
202-
// * an analysis (SrcSafetyAnalysis at now, DstSafetyAnalysis will be added
203-
// later to support the detection of authentication oracles) computes register
202+
// * an analysis (SrcSafetyAnalysis or DstSafetyAnalysis) computes register
204203
// state for each instruction in the function.
205204
// * for each instruction, it is checked whether it is a gadget of some kind,
206205
// taking the computed state into account. If a gadget is found, its kind
@@ -273,6 +272,11 @@ class ExtraInfo {
273272
virtual ~ExtraInfo() {}
274273
};
275274

275+
/// The set of instructions writing to the affected register in an unsafe
276+
/// manner.
277+
///
278+
/// This is a hint to be printed alongside the report. It should be further
279+
/// analyzed by the user.
276280
class ClobberingInfo : public ExtraInfo {
277281
SmallVector<MCInstReference> ClobberingInstrs;
278282

@@ -282,6 +286,20 @@ class ClobberingInfo : public ExtraInfo {
282286
void print(raw_ostream &OS, const MCInstReference Location) const override;
283287
};
284288

289+
/// The set of instructions leaking the authenticated pointer before the
290+
/// result of authentication was checked.
291+
///
292+
/// This is a hint to be printed alongside the report. It should be further
293+
/// analyzed by the user.
294+
class LeakageInfo : public ExtraInfo {
295+
SmallVector<MCInstReference> LeakingInstrs;
296+
297+
public:
298+
LeakageInfo(ArrayRef<MCInstReference> Instrs) : LeakingInstrs(Instrs) {}
299+
300+
void print(raw_ostream &OS, const MCInstReference Location) const override;
301+
};
302+
285303
/// A brief version of a report that can be further augmented with the details.
286304
///
287305
/// A half-baked report produced on the first run of the analysis. An extra,
@@ -322,6 +340,9 @@ class FunctionAnalysisContext {
322340
void findUnsafeUses(SmallVector<PartialReport<MCPhysReg>> &Reports);
323341
void augmentUnsafeUseReports(ArrayRef<PartialReport<MCPhysReg>> Reports);
324342

343+
void findUnsafeDefs(SmallVector<PartialReport<MCPhysReg>> &Reports);
344+
void augmentUnsafeDefReports(ArrayRef<PartialReport<MCPhysReg>> Reports);
345+
325346
/// Process the reports which do not have to be augmented, and remove them
326347
/// from Reports.
327348
void handleSimpleReports(SmallVector<PartialReport<MCPhysReg>> &Reports);

bolt/include/bolt/Profile/DataAggregator.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ class DataAggregator : public DataReader {
132132
/// and use them later for processing and assigning profile.
133133
std::unordered_map<Trace, TakenBranchInfo, TraceHash> TraceMap;
134134
std::vector<std::pair<Trace, TakenBranchInfo>> Traces;
135+
/// Pre-populated addresses of returns, coming from pre-aggregated data or
136+
/// disassembly. Used to disambiguate call-continuation fall-throughs.
137+
std::unordered_set<uint64_t> Returns;
135138
std::unordered_map<uint64_t, uint64_t> BasicSamples;
136139
std::vector<PerfMemSample> MemSamples;
137140

@@ -204,8 +207,8 @@ class DataAggregator : public DataReader {
204207
/// Return a vector of offsets corresponding to a trace in a function
205208
/// if the trace is valid, std::nullopt otherwise.
206209
std::optional<SmallVector<std::pair<uint64_t, uint64_t>, 16>>
207-
getFallthroughsInTrace(BinaryFunction &BF, const Trace &Trace,
208-
uint64_t Count) const;
210+
getFallthroughsInTrace(BinaryFunction &BF, const Trace &Trace, uint64_t Count,
211+
bool IsReturn) const;
209212

210213
/// Record external entry into the function \p BF.
211214
///
@@ -265,11 +268,14 @@ class DataAggregator : public DataReader {
265268
uint64_t From, uint64_t To, uint64_t Count,
266269
uint64_t Mispreds);
267270

271+
/// Checks if \p Addr corresponds to a return instruction.
272+
bool checkReturn(uint64_t Addr);
273+
268274
/// Register a \p Branch.
269275
bool doBranch(uint64_t From, uint64_t To, uint64_t Count, uint64_t Mispreds);
270276

271277
/// Register a trace between two LBR entries supplied in execution order.
272-
bool doTrace(const Trace &Trace, uint64_t Count);
278+
bool doTrace(const Trace &Trace, uint64_t Count, bool IsReturn);
273279

274280
/// Parser helpers
275281
/// Return false if we exhausted our parser buffer and finished parsing

0 commit comments

Comments
 (0)