2018-11-02 09:31:52 +08:00
|
|
|
# RUN: llc -O0 -start-before=livedebugvalues -filetype=obj -o - %s | llvm-dwarfdump -v - | FileCheck %s
|
|
|
|
#
|
|
|
|
# Derived from (clang -O0 -g -fsanitize=address -fobjc-arc)
|
|
|
|
# @protocol NSObject
|
|
|
|
# @end
|
|
|
|
# @interface NSObject<NSObject>{}
|
|
|
|
# + (instancetype)alloc;
|
|
|
|
# @end
|
|
|
|
# struct CGSize {
|
|
|
|
# double width;
|
|
|
|
# double height;
|
|
|
|
# };
|
|
|
|
# typedef struct CGSize CGSize;
|
|
|
|
# @interface Object : NSObject
|
|
|
|
# - (instancetype)initWithSize:(CGSize)size;
|
|
|
|
# - (id)aMessage;
|
|
|
|
# @end
|
|
|
|
# @implementation MyObject
|
|
|
|
# + (id)doWithSize:(CGSize)imageSize andObject:(id)object {
|
|
|
|
# return [object aMessage];
|
|
|
|
# }
|
|
|
|
# @end
|
|
|
|
#
|
|
|
|
# CHECK: .debug_info contents:
|
|
|
|
# CHECK: DW_TAG_subprogram
|
|
|
|
# CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
|
|
|
|
# CHECK-NEXT: DW_AT_high_pc [DW_FORM_addr] ([[FN_END:.*]])
|
|
|
|
# CHECK: "_cmd"
|
|
|
|
# CHECK: DW_TAG_formal_parameter
|
|
|
|
# CHECK-NEXT: DW_AT_location
|
[DebugInfo] Stop changing labels for register-described parameter DBG_VALUEs
Summary:
This is a follow-up to D57510. This patch stops DebugHandlerBase from
changing the starting label for the first non-overlapping,
register-described parameter DBG_VALUEs to the beginning of the
function. That code did not consider what defined the registers, which
could result in the ranges for the debug values starting before their
defining instructions. We currently do not emit debug values for
constant values directly at the start of the function, so this code is
still useful for such values, but my intention is to remove the code
from DebugHandlerBase completely when we get there. One reason for
removing it is that the code violates the history map's ranges, which I
think can make it quite confusing when troubleshooting.
In D57510, PrologEpilogInserter was amended so that parameter DBG_VALUEs
now are kept at the start of the entry block, even after emission of
prologue code. That was done to reduce the degradation of debug
completeness from this patch. PR40638 is another example, where the
lexical-scope trimming that LDV does, in combination with scheduling,
results in instructions after the prologue being left without locations.
There might be other cases where the DBG_VALUEs are pushed further down,
for which the DebugHandlerBase code may be helpful, but as it now quite
often result in incorrect locations, even after the prologue, it seems
better to remove that code, and try to work our way up with accurate
locations.
In the long run we should maybe not aim to provide accurate locations
inside the prologue. Some single location descriptions, at least those
referring to stack values, generate inaccurate values inside the
epilogue, so we maybe should not aim to achieve accuracy for location
lists. However, it seems that we now emit line number programs that can
result in GDB and LLDB stopping inside the prologue when doing line
number stepping into functions. See PR40188 for more information.
A summary of some of the changed test cases is available in PR40188#c2.
Reviewers: aprantl, dblaikie, rnk, jmorse
Reviewed By: aprantl
Subscribers: jdoerfert, jholewinski, jvesely, javed.absar, llvm-commits
Tags: #debug-info, #llvm
Differential Revision: https://reviews.llvm.org/D57511
llvm-svn: 353928
2019-02-13 17:34:07 +08:00
|
|
|
# CHECK-NEXT: [0x{{.*}}, 0x{{.*}}):
|
2018-11-02 09:31:52 +08:00
|
|
|
# CHECK-NOT: DW_AT_
|
|
|
|
# CHECK: [0x{{.*}}, [[FN_END]]):
|
|
|
|
# CHECK-NEXT: DW_AT_name {{.*}}"imageSize"
|
|
|
|
--- |
|
|
|
|
; ModuleID = 'test/DebugInfo/AArch64/asan-stack-vars.ll'
|
|
|
|
source_filename = "m.m"
|
|
|
|
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
|
|
|
|
target triple = "arm64-apple-ios"
|
|
|
|
|
|
|
|
%0 = type opaque
|
|
|
|
%struct._class_t = type { %struct._class_t*, %struct._class_t*, %struct._objc_cache*, i8* (i8*, i8*)**, %struct._class_ro_t* }
|
|
|
|
%struct._objc_cache = type opaque
|
|
|
|
%struct._class_ro_t = type { i32, i32, i32, i8*, i8*, %struct.__method_list_t*, %struct._objc_protocol_list*, %struct._ivar_list_t*, i8*, %struct._prop_list_t* }
|
|
|
|
%struct.__method_list_t = type { i32, i32, [0 x %struct._objc_method] }
|
|
|
|
%struct._objc_method = type { i8*, i8*, i8* }
|
|
|
|
%struct._objc_protocol_list = type { i64, [0 x %struct._protocol_t*] }
|
|
|
|
%struct._protocol_t = type { i8*, i8*, %struct._objc_protocol_list*, %struct.__method_list_t*, %struct.__method_list_t*, %struct.__method_list_t*, %struct.__method_list_t*, %struct._prop_list_t*, i32, i32, i8**, i8*, %struct._prop_list_t* }
|
|
|
|
%struct._ivar_list_t = type { i32, i32, [0 x %struct._ivar_t] }
|
|
|
|
%struct._ivar_t = type { i32*, i8*, i8*, i32, i32 }
|
|
|
|
%struct._prop_list_t = type { i32, i32, [0 x %struct._prop_t] }
|
|
|
|
%struct._prop_t = type { i8*, i8* }
|
|
|
|
%struct.CGSize = type { double, double }
|
|
|
|
|
|
|
|
@"OBJC_CLASS_$_Object" = external global %struct._class_t
|
|
|
|
@"OBJC_CLASSLIST_REFERENCES_$_" = private global %struct._class_t* @"OBJC_CLASS_$_Object", section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8
|
|
|
|
@OBJC_METH_VAR_NAME_ = private unnamed_addr constant [6 x i8] c"alloc\00", section "__TEXT,__objc_methname,cstring_literals", align 1
|
|
|
|
@OBJC_SELECTOR_REFERENCES_ = private externally_initialized global i8* getelementptr inbounds ([6 x i8], [6 x i8]* @OBJC_METH_VAR_NAME_, i32 0, i32 0), section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip", align 8
|
|
|
|
@OBJC_METH_VAR_NAME_.1 = private unnamed_addr constant [14 x i8] c"initWithSize:\00", section "__TEXT,__objc_methname,cstring_literals", align 1
|
|
|
|
@OBJC_SELECTOR_REFERENCES_.2 = private externally_initialized global i8* getelementptr inbounds ([14 x i8], [14 x i8]* @OBJC_METH_VAR_NAME_.1, i32 0, i32 0), section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip", align 8
|
|
|
|
@OBJC_METH_VAR_NAME_.3 = private unnamed_addr constant [9 x i8] c"aMessage\00", section "__TEXT,__objc_methname,cstring_literals", align 1
|
|
|
|
@OBJC_SELECTOR_REFERENCES_.4 = private externally_initialized global i8* getelementptr inbounds ([9 x i8], [9 x i8]* @OBJC_METH_VAR_NAME_.3, i32 0, i32 0), section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip", align 8
|
|
|
|
@_objc_empty_cache = external global %struct._objc_cache
|
|
|
|
@"OBJC_CLASS_$_MyObject" = global %struct._class_t { %struct._class_t* @"OBJC_METACLASS_$_MyObject", %struct._class_t* null, %struct._objc_cache* @_objc_empty_cache, i8* (i8*, i8*)** null, %struct._class_ro_t* @"\01l_OBJC_CLASS_RO_$_MyObject" }, section "__DATA, __objc_data", align 8
|
|
|
|
@"OBJC_METACLASS_$_MyObject" = global %struct._class_t { %struct._class_t* @"OBJC_METACLASS_$_MyObject", %struct._class_t* @"OBJC_CLASS_$_MyObject", %struct._objc_cache* @_objc_empty_cache, i8* (i8*, i8*)** null, %struct._class_ro_t* @"\01l_OBJC_METACLASS_RO_$_MyObject" }, section "__DATA, __objc_data", align 8
|
|
|
|
@OBJC_CLASS_NAME_ = private unnamed_addr constant [9 x i8] c"MyObject\00", section "__TEXT,__objc_classname,cstring_literals", align 1
|
|
|
|
@OBJC_METH_VAR_NAME_.5 = private unnamed_addr constant [12 x i8] c"doWithSize:\00", section "__TEXT,__objc_methname,cstring_literals", align 1
|
|
|
|
@OBJC_METH_VAR_TYPE_ = private unnamed_addr constant [21 x i8] c"@32@0:8{CGSize=dd}16\00", section "__TEXT,__objc_methtype,cstring_literals", align 1
|
|
|
|
@"\01l_OBJC_$_CLASS_METHODS_MyObject" = private global { i32, i32, [1 x %struct._objc_method] } { i32 24, i32 1, [1 x %struct._objc_method] [%struct._objc_method { i8* getelementptr inbounds ([12 x i8], [12 x i8]* @OBJC_METH_VAR_NAME_.5, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @OBJC_METH_VAR_TYPE_, i32 0, i32 0), i8* bitcast (i8* (i8*, i8*, [2 x double])* @"\01+[MyObject doWithSize:]" to i8*) }] }, section "__DATA, __objc_const", align 8
|
|
|
|
@"\01l_OBJC_METACLASS_RO_$_MyObject" = private global %struct._class_ro_t { i32 131, i32 40, i32 40, i8* null, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @OBJC_CLASS_NAME_, i32 0, i32 0), %struct.__method_list_t* bitcast ({ i32, i32, [1 x %struct._objc_method] }* @"\01l_OBJC_$_CLASS_METHODS_MyObject" to %struct.__method_list_t*), %struct._objc_protocol_list* null, %struct._ivar_list_t* null, i8* null, %struct._prop_list_t* null }, section "__DATA, __objc_const", align 8
|
|
|
|
@"\01l_OBJC_CLASS_RO_$_MyObject" = private global %struct._class_ro_t { i32 130, i32 0, i32 0, i8* null, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @OBJC_CLASS_NAME_, i32 0, i32 0), %struct.__method_list_t* null, %struct._objc_protocol_list* null, %struct._ivar_list_t* null, i8* null, %struct._prop_list_t* null }, section "__DATA, __objc_const", align 8
|
|
|
|
@"OBJC_LABEL_CLASS_$" = private global [1 x i8*] [i8* bitcast (%struct._class_t* @"OBJC_CLASS_$_MyObject" to i8*)], section "__DATA, __objc_classlist, regular, no_dead_strip", align 8
|
|
|
|
@llvm.compiler.used = appending global [12 x i8*] [i8* bitcast (%struct._class_t** @"OBJC_CLASSLIST_REFERENCES_$_" to i8*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @OBJC_METH_VAR_NAME_, i32 0, i32 0), i8* bitcast (i8** @OBJC_SELECTOR_REFERENCES_ to i8*), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @OBJC_METH_VAR_NAME_.1, i32 0, i32 0), i8* bitcast (i8** @OBJC_SELECTOR_REFERENCES_.2 to i8*), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @OBJC_METH_VAR_NAME_.3, i32 0, i32 0), i8* bitcast (i8** @OBJC_SELECTOR_REFERENCES_.4 to i8*), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @OBJC_CLASS_NAME_, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @OBJC_METH_VAR_NAME_.5, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @OBJC_METH_VAR_TYPE_, i32 0, i32 0), i8* bitcast ({ i32, i32, [1 x %struct._objc_method] }* @"\01l_OBJC_$_CLASS_METHODS_MyObject" to i8*), i8* bitcast ([1 x i8*]* @"OBJC_LABEL_CLASS_$" to i8*)], section "llvm.metadata"
|
|
|
|
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* @asan.module_ctor, i8* null }]
|
|
|
|
@__asan_shadow_memory_dynamic_address = external global i64
|
|
|
|
@___asan_gen_ = private unnamed_addr constant [34 x i8] c"2 32 16 9 imageSize 64 8 6 object\00", align 1
|
|
|
|
@__stack_chk_guard = external global i8*
|
|
|
|
|
|
|
|
; Function Attrs: noinline sanitize_address ssp uwtable
|
|
|
|
define internal i8* @"\01+[MyObject doWithSize:]"(i8* %self, i8* %_cmd, [2 x double] %imageSize.coerce) #0 !dbg !14 {
|
|
|
|
entry:
|
|
|
|
%StackGuardSlot = alloca i8*
|
|
|
|
%0 = call i8* @llvm.stackguard()
|
|
|
|
call void @llvm.stackprotector(i8* %0, i8** %StackGuardSlot)
|
|
|
|
%1 = load i64, i64* @__asan_shadow_memory_dynamic_address
|
|
|
|
%self.addr = alloca i8*, align 8
|
|
|
|
%_cmd.addr = alloca i8*, align 8
|
|
|
|
%MyAlloca = alloca [96 x i8], align 32, !dbg !35
|
|
|
|
%2 = ptrtoint [96 x i8]* %MyAlloca to i64, !dbg !35
|
|
|
|
%3 = add i64 %2, 32, !dbg !35
|
|
|
|
%4 = inttoptr i64 %3 to %struct.CGSize*, !dbg !35
|
|
|
|
%5 = add i64 %2, 64, !dbg !35
|
|
|
|
%6 = inttoptr i64 %5 to %0**, !dbg !35
|
|
|
|
%7 = inttoptr i64 %2 to i64*, !dbg !35
|
|
|
|
store i64 1102416563, i64* %7, !dbg !35
|
|
|
|
%8 = add i64 %2, 8, !dbg !35
|
|
|
|
%9 = inttoptr i64 %8 to i64*, !dbg !35
|
|
|
|
store i64 ptrtoint ([34 x i8]* @___asan_gen_ to i64), i64* %9, !dbg !35
|
|
|
|
%10 = add i64 %2, 16, !dbg !35
|
|
|
|
%11 = inttoptr i64 %10 to i64*, !dbg !35
|
|
|
|
store i64 ptrtoint (i8* (i8*, i8*, [2 x double])* @"\01+[MyObject doWithSize:]" to i64), i64* %11, !dbg !35
|
|
|
|
%12 = lshr i64 %2, 3, !dbg !35
|
|
|
|
%13 = add i64 %12, %1, !dbg !35
|
|
|
|
%14 = add i64 %13, 0, !dbg !35
|
|
|
|
%15 = inttoptr i64 %14 to i64*, !dbg !35
|
|
|
|
store i64 -940689368107847183, i64* %15, align 1, !dbg !35
|
|
|
|
%16 = add i64 %13, 9, !dbg !35
|
|
|
|
%17 = inttoptr i64 %16 to i16*, !dbg !35
|
|
|
|
store i16 -3085, i16* %17, align 1, !dbg !35
|
|
|
|
%18 = add i64 %13, 11, !dbg !35
|
|
|
|
%19 = inttoptr i64 %18 to i8*, !dbg !35
|
|
|
|
store i8 -13, i8* %19, align 1, !dbg !35
|
|
|
|
call void @llvm.dbg.declare(metadata %struct.CGSize* %4, metadata !36, metadata !DIExpression(DW_OP_deref)), !dbg !37
|
|
|
|
call void @llvm.dbg.declare(metadata %0** %6, metadata !38, metadata !DIExpression(DW_OP_deref)), !dbg !44
|
|
|
|
%20 = bitcast %struct.CGSize* %4 to [2 x double]*
|
|
|
|
%21 = ptrtoint [2 x double]* %20 to i64
|
|
|
|
%22 = lshr i64 %21, 3
|
|
|
|
%23 = add i64 %22, %1
|
|
|
|
%24 = inttoptr i64 %23 to i16*
|
|
|
|
%25 = load i16, i16* %24
|
|
|
|
%26 = icmp ne i16 %25, 0
|
|
|
|
br i1 %26, label %27, label %28
|
|
|
|
|
|
|
|
; <label>:27: ; preds = %entry
|
|
|
|
call void @__asan_report_store16(i64 %21)
|
|
|
|
call void asm sideeffect "", ""()
|
|
|
|
unreachable
|
|
|
|
|
|
|
|
; <label>:28: ; preds = %entry
|
|
|
|
store [2 x double] %imageSize.coerce, [2 x double]* %20, align 8
|
|
|
|
store i8* %self, i8** %self.addr, align 8
|
|
|
|
call void @llvm.dbg.declare(metadata i8** %self.addr, metadata !45, metadata !DIExpression()), !dbg !47
|
|
|
|
store i8* %_cmd, i8** %_cmd.addr, align 8
|
|
|
|
call void @llvm.dbg.declare(metadata i8** %_cmd.addr, metadata !48, metadata !DIExpression()), !dbg !47
|
|
|
|
%29 = load %struct._class_t*, %struct._class_t** @"OBJC_CLASSLIST_REFERENCES_$_", align 8, !dbg !50
|
|
|
|
%30 = add i64 lshr (i64 ptrtoint (i8** @OBJC_SELECTOR_REFERENCES_ to i64), i64 3), %1, !dbg !50
|
|
|
|
%31 = inttoptr i64 %30 to i8*, !dbg !50
|
|
|
|
%32 = load i8, i8* %31, !dbg !50
|
|
|
|
%33 = icmp ne i8 %32, 0, !dbg !50
|
|
|
|
br i1 %33, label %34, label %35, !dbg !50
|
|
|
|
|
|
|
|
; <label>:34: ; preds = %28
|
|
|
|
call void @__asan_report_load8(i64 ptrtoint (i8** @OBJC_SELECTOR_REFERENCES_ to i64)), !dbg !50
|
|
|
|
call void asm sideeffect "", ""(), !dbg !50
|
|
|
|
unreachable, !dbg !50
|
|
|
|
|
|
|
|
; <label>:35: ; preds = %28
|
|
|
|
%36 = load i8*, i8** @OBJC_SELECTOR_REFERENCES_, align 8, !dbg !50, !invariant.load !2
|
|
|
|
%37 = bitcast %struct._class_t* %29 to i8*, !dbg !50
|
|
|
|
%call = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* %37, i8* %36), !dbg !50
|
|
|
|
%38 = bitcast i8* %call to %0*, !dbg !50
|
|
|
|
%39 = add i64 lshr (i64 ptrtoint (i8** @OBJC_SELECTOR_REFERENCES_.2 to i64), i64 3), %1, !dbg !51
|
|
|
|
%40 = inttoptr i64 %39 to i8*, !dbg !51
|
|
|
|
%41 = load i8, i8* %40, !dbg !51
|
|
|
|
%42 = icmp ne i8 %41, 0, !dbg !51
|
|
|
|
br i1 %42, label %43, label %44, !dbg !51
|
|
|
|
|
|
|
|
; <label>:43: ; preds = %35
|
|
|
|
call void @__asan_report_load8(i64 ptrtoint (i8** @OBJC_SELECTOR_REFERENCES_.2 to i64)), !dbg !51
|
|
|
|
call void asm sideeffect "", ""(), !dbg !51
|
|
|
|
unreachable, !dbg !51
|
|
|
|
|
|
|
|
; <label>:44: ; preds = %35
|
|
|
|
%45 = load i8*, i8** @OBJC_SELECTOR_REFERENCES_.2, align 8, !dbg !51, !invariant.load !2
|
|
|
|
%46 = bitcast %0* %38 to i8*, !dbg !51
|
|
|
|
%47 = bitcast %struct.CGSize* %4 to [2 x double]*, !dbg !51
|
|
|
|
%48 = ptrtoint [2 x double]* %47 to i64, !dbg !51
|
|
|
|
%49 = lshr i64 %48, 3, !dbg !51
|
|
|
|
%50 = add i64 %49, %1, !dbg !51
|
|
|
|
%51 = inttoptr i64 %50 to i16*, !dbg !51
|
|
|
|
%52 = load i16, i16* %51, !dbg !51
|
|
|
|
%53 = icmp ne i16 %52, 0, !dbg !51
|
|
|
|
br i1 %53, label %54, label %55, !dbg !51
|
|
|
|
|
|
|
|
; <label>:54: ; preds = %44
|
|
|
|
call void @__asan_report_load16(i64 %48), !dbg !51
|
|
|
|
call void asm sideeffect "", ""(), !dbg !51
|
|
|
|
unreachable, !dbg !51
|
|
|
|
|
|
|
|
; <label>:55: ; preds = %44
|
|
|
|
%56 = load [2 x double], [2 x double]* %47, align 8, !dbg !51
|
|
|
|
%call1 = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*, [2 x double])*)(i8* %46, i8* %45, [2 x double] %56), !dbg !51
|
|
|
|
%57 = bitcast i8* %call1 to %0*, !dbg !51
|
|
|
|
%58 = ptrtoint %0** %6 to i64, !dbg !44
|
|
|
|
%59 = lshr i64 %58, 3, !dbg !44
|
|
|
|
%60 = add i64 %59, %1, !dbg !44
|
|
|
|
%61 = inttoptr i64 %60 to i8*, !dbg !44
|
|
|
|
%62 = load i8, i8* %61, !dbg !44
|
|
|
|
%63 = icmp ne i8 %62, 0, !dbg !44
|
|
|
|
br i1 %63, label %64, label %65, !dbg !44
|
|
|
|
|
|
|
|
; <label>:64: ; preds = %55
|
|
|
|
call void @__asan_report_store8(i64 %58), !dbg !44
|
|
|
|
call void asm sideeffect "", ""(), !dbg !44
|
|
|
|
unreachable, !dbg !44
|
|
|
|
|
|
|
|
; <label>:65: ; preds = %55
|
|
|
|
store %0* %57, %0** %6, align 8, !dbg !44
|
|
|
|
%66 = load %0*, %0** %6, align 8, !dbg !52
|
|
|
|
%67 = add i64 lshr (i64 ptrtoint (i8** @OBJC_SELECTOR_REFERENCES_.4 to i64), i64 3), %1, !dbg !53
|
|
|
|
%68 = inttoptr i64 %67 to i8*, !dbg !53
|
|
|
|
%69 = load i8, i8* %68, !dbg !53
|
|
|
|
%70 = icmp ne i8 %69, 0, !dbg !53
|
|
|
|
br i1 %70, label %71, label %72, !dbg !53
|
|
|
|
|
|
|
|
; <label>:71: ; preds = %65
|
|
|
|
call void @__asan_report_load8(i64 ptrtoint (i8** @OBJC_SELECTOR_REFERENCES_.4 to i64)), !dbg !53
|
|
|
|
call void asm sideeffect "", ""(), !dbg !53
|
|
|
|
unreachable, !dbg !53
|
|
|
|
|
|
|
|
; <label>:72: ; preds = %65
|
|
|
|
%73 = load i8*, i8** @OBJC_SELECTOR_REFERENCES_.4, align 8, !dbg !53, !invariant.load !2
|
|
|
|
%74 = bitcast %0* %66 to i8*, !dbg !53
|
|
|
|
%call2 = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* %74, i8* %73), !dbg !53
|
|
|
|
call void asm sideeffect "mov\09fp, fp\09\09; marker for objc_retainAutoreleaseReturnValue", ""(), !dbg !53
|
|
|
|
%75 = call i8* @objc_retainAutoreleasedReturnValue(i8* %call2) #3, !dbg !53
|
|
|
|
%76 = bitcast %0** %6 to i8**, !dbg !54
|
|
|
|
call void @objc_storeStrong(i8** %76, i8* null) #3, !dbg !54
|
|
|
|
%77 = tail call i8* @objc_autoreleaseReturnValue(i8* %75) #3, !dbg !54
|
|
|
|
store i64 1172321806, i64* %7, !dbg !54
|
|
|
|
%78 = add i64 %13, 0, !dbg !54
|
|
|
|
%79 = inttoptr i64 %78 to i64*, !dbg !54
|
|
|
|
store i64 0, i64* %79, align 1, !dbg !54
|
|
|
|
%80 = add i64 %13, 9, !dbg !54
|
|
|
|
%81 = inttoptr i64 %80 to i16*, !dbg !54
|
|
|
|
store i16 0, i16* %81, align 1, !dbg !54
|
|
|
|
%82 = add i64 %13, 11, !dbg !54
|
|
|
|
%83 = inttoptr i64 %82 to i8*, !dbg !54
|
|
|
|
store i8 0, i8* %83, align 1, !dbg !54
|
|
|
|
%84 = call i8* @llvm.stackguard()
|
|
|
|
%85 = load volatile i8*, i8** %StackGuardSlot
|
|
|
|
%86 = icmp eq i8* %84, %85
|
|
|
|
br i1 %86, label %SP_return, label %CallStackCheckFailBlk, !prof !55
|
|
|
|
|
|
|
|
SP_return: ; preds = %72
|
|
|
|
ret i8* %77, !dbg !54
|
|
|
|
|
|
|
|
CallStackCheckFailBlk: ; preds = %72
|
|
|
|
call void @__stack_chk_fail(), !dbg !47
|
|
|
|
unreachable, !dbg !47
|
|
|
|
}
|
|
|
|
|
|
|
|
; Function Attrs: nounwind readnone speculatable
|
|
|
|
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
|
|
|
|
|
|
|
|
; Function Attrs: nonlazybind
|
|
|
|
declare i8* @objc_msgSend(i8*, i8*, ...) #2
|
|
|
|
|
|
|
|
declare i8* @objc_retainAutoreleasedReturnValue(i8* returned)
|
|
|
|
|
|
|
|
declare void @objc_storeStrong(i8**, i8*)
|
|
|
|
|
|
|
|
declare i8* @objc_autoreleaseReturnValue(i8* returned)
|
|
|
|
|
|
|
|
define internal void @asan.module_ctor() {
|
|
|
|
call void @__asan_init()
|
|
|
|
call void @__asan_version_mismatch_check_v8()
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
declare void @__asan_init()
|
|
|
|
|
|
|
|
declare void @__asan_version_mismatch_check_v8()
|
|
|
|
|
|
|
|
declare void @__asan_report_load8(i64)
|
|
|
|
|
|
|
|
declare void @__asan_report_load16(i64)
|
|
|
|
|
|
|
|
declare void @__asan_report_store8(i64)
|
|
|
|
|
|
|
|
declare void @__asan_report_store16(i64)
|
|
|
|
|
|
|
|
; Function Attrs: nounwind
|
|
|
|
declare void @llvm.stackprotector(i8*, i8**) #3
|
|
|
|
|
|
|
|
; Function Attrs: nounwind
|
|
|
|
declare i8* @llvm.stackguard() #3
|
|
|
|
|
|
|
|
declare void @__stack_chk_fail()
|
|
|
|
|
|
|
|
attributes #0 = { noinline sanitize_address ssp uwtable }
|
|
|
|
attributes #1 = { nounwind readnone speculatable }
|
|
|
|
attributes #2 = { nonlazybind }
|
|
|
|
attributes #3 = { nounwind }
|
|
|
|
|
|
|
|
!llvm.dbg.cu = !{!0}
|
|
|
|
!llvm.module.flags = !{!5, !6, !7, !8, !9, !10, !11, !12}
|
|
|
|
!llvm.ident = !{!13}
|
|
|
|
|
|
|
|
!0 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !1, producer: "clang version 5.0.0 (trunk 295779) (llvm/trunk 295777)", isOptimized: false, runtimeVersion: 2, emissionKind: FullDebug, enums: !2, retainedTypes: !3)
|
|
|
|
!1 = !DIFile(filename: "m.m", directory: "/")
|
|
|
|
!2 = !{}
|
|
|
|
!3 = !{!4}
|
|
|
|
!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "MyObject", scope: !1, file: !1, line: 15, flags: DIFlagObjcClassComplete, elements: !2, runtimeLang: DW_LANG_ObjC)
|
|
|
|
!5 = !{i32 1, !"Objective-C Version", i32 2}
|
|
|
|
!6 = !{i32 1, !"Objective-C Image Info Version", i32 0}
|
|
|
|
!7 = !{i32 1, !"Objective-C Image Info Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"}
|
|
|
|
!8 = !{i32 4, !"Objective-C Garbage Collection", i32 0}
|
|
|
|
!9 = !{i32 1, !"Objective-C Class Properties", i32 64}
|
|
|
|
!10 = !{i32 2, !"Dwarf Version", i32 2}
|
|
|
|
!11 = !{i32 2, !"Debug Info Version", i32 3}
|
|
|
|
!12 = !{i32 7, !"PIC Level", i32 2}
|
|
|
|
!13 = !{!"clang version 5.0.0 (trunk 295779) (llvm/trunk 295777)"}
|
|
|
|
!14 = distinct !DISubprogram(name: "+[MyObject doWithSize:]", scope: !1, file: !1, line: 16, type: !15, isLocal: true, isDefinition: true, scopeLine: 16, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
|
|
|
!15 = !DISubroutineType(types: !16)
|
|
|
|
!16 = !{!17, !24, !26, !29}
|
|
|
|
!17 = !DIDerivedType(tag: DW_TAG_typedef, name: "id", file: !1, baseType: !18)
|
|
|
|
!18 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !19, size: 64)
|
|
|
|
!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "objc_object", file: !1, elements: !20)
|
|
|
|
!20 = !{!21}
|
|
|
|
!21 = !DIDerivedType(tag: DW_TAG_member, name: "isa", scope: !19, file: !1, baseType: !22, size: 64)
|
|
|
|
!22 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !23, size: 64)
|
|
|
|
!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "objc_class", file: !1, flags: DIFlagFwdDecl)
|
|
|
|
!24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !25, flags: DIFlagArtificial | DIFlagObjectPointer)
|
|
|
|
!25 = !DIDerivedType(tag: DW_TAG_typedef, name: "Class", file: !1, baseType: !22)
|
|
|
|
!26 = !DIDerivedType(tag: DW_TAG_typedef, name: "SEL", file: !1, baseType: !27, flags: DIFlagArtificial)
|
|
|
|
!27 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !28, size: 64)
|
|
|
|
!28 = !DICompositeType(tag: DW_TAG_structure_type, name: "objc_selector", file: !1, flags: DIFlagFwdDecl)
|
|
|
|
!29 = !DIDerivedType(tag: DW_TAG_typedef, name: "CGSize", file: !1, line: 10, baseType: !30)
|
|
|
|
!30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "CGSize", file: !1, line: 6, size: 128, elements: !31)
|
|
|
|
!31 = !{!32, !34}
|
|
|
|
!32 = !DIDerivedType(tag: DW_TAG_member, name: "width", scope: !30, file: !1, line: 7, baseType: !33, size: 64)
|
|
|
|
!33 = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float)
|
|
|
|
!34 = !DIDerivedType(tag: DW_TAG_member, name: "height", scope: !30, file: !1, line: 8, baseType: !33, size: 64, offset: 64)
|
|
|
|
!35 = !DILocation(line: 16, scope: !14)
|
|
|
|
!36 = !DILocalVariable(name: "imageSize", arg: 3, scope: !14, file: !1, line: 16, type: !29)
|
|
|
|
!37 = !DILocation(line: 16, column: 26, scope: !14)
|
|
|
|
!38 = !DILocalVariable(name: "object", scope: !14, file: !1, line: 17, type: !39)
|
|
|
|
!39 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !40, size: 64)
|
|
|
|
!40 = !DICompositeType(tag: DW_TAG_structure_type, name: "Object", scope: !1, file: !1, line: 11, elements: !41, runtimeLang: DW_LANG_ObjC)
|
|
|
|
!41 = !{!42}
|
|
|
|
!42 = !DIDerivedType(tag: DW_TAG_inheritance, scope: !40, baseType: !43)
|
|
|
|
!43 = !DICompositeType(tag: DW_TAG_structure_type, name: "NSObject", scope: !1, file: !1, line: 3, elements: !2, runtimeLang: DW_LANG_ObjC)
|
|
|
|
!44 = !DILocation(line: 17, column: 11, scope: !14)
|
|
|
|
!45 = !DILocalVariable(name: "self", arg: 1, scope: !14, type: !46, flags: DIFlagArtificial | DIFlagObjectPointer)
|
|
|
|
!46 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !25)
|
|
|
|
!47 = !DILocation(line: 0, scope: !14)
|
|
|
|
!48 = !DILocalVariable(name: "_cmd", arg: 2, scope: !14, type: !49, flags: DIFlagArtificial)
|
|
|
|
!49 = !DIDerivedType(tag: DW_TAG_typedef, name: "SEL", file: !1, baseType: !27)
|
|
|
|
!50 = !DILocation(line: 17, column: 21, scope: !14)
|
|
|
|
!51 = !DILocation(line: 17, column: 20, scope: !14)
|
|
|
|
!52 = !DILocation(line: 18, column: 11, scope: !14)
|
|
|
|
!53 = !DILocation(line: 18, column: 10, scope: !14)
|
|
|
|
!54 = !DILocation(line: 19, column: 1, scope: !14)
|
|
|
|
!55 = !{!"branch_weights", i32 2147481600, i32 2048}
|
|
|
|
|
|
|
|
...
|
|
|
|
---
|
|
|
|
name: "\x01+[MyObject doWithSize:]"
|
|
|
|
alignment: 2
|
|
|
|
tracksRegLiveness: true
|
|
|
|
liveins:
|
|
|
|
- { reg: '$x0' }
|
|
|
|
- { reg: '$x1' }
|
|
|
|
- { reg: '$d0' }
|
|
|
|
- { reg: '$d1' }
|
|
|
|
frameInfo:
|
|
|
|
stackSize: 352
|
|
|
|
maxAlignment: 32
|
|
|
|
adjustsStack: true
|
|
|
|
hasCalls: true
|
|
|
|
stackProtector: '%stack.0.StackGuardSlot'
|
|
|
|
maxCallFrameSize: 0
|
|
|
|
localFrameSize: 144
|
|
|
|
stack:
|
|
|
|
- { id: 0, name: StackGuardSlot, offset: -40, size: 8, alignment: 8,
|
|
|
|
stack-id: 0, local-offset: -8 }
|
|
|
|
- { id: 1, name: self.addr, offset: -168, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
local-offset: -136, debug-info-variable: '!45', debug-info-expression: '!DIExpression()',
|
|
|
|
debug-info-location: '!47' }
|
|
|
|
- { id: 2, name: _cmd.addr, offset: -176, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
local-offset: -144, debug-info-variable: '!48', debug-info-expression: '!DIExpression()',
|
|
|
|
debug-info-location: '!47' }
|
|
|
|
- { id: 3, name: MyAlloca, offset: -160, size: 96, alignment: 32, stack-id: 0,
|
|
|
|
local-offset: -128 }
|
|
|
|
- { id: 4, type: spill-slot, offset: -184, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 5, type: spill-slot, offset: -192, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 6, type: spill-slot, offset: -200, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 7, type: spill-slot, offset: -208, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 8, type: spill-slot, offset: -216, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 9, type: spill-slot, offset: -224, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 10, type: spill-slot, offset: -232, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 11, type: spill-slot, offset: -240, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 12, type: spill-slot, offset: -248, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 13, type: spill-slot, offset: -256, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 14, type: spill-slot, offset: -264, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 15, type: spill-slot, offset: -272, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 16, type: spill-slot, offset: -280, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 17, type: spill-slot, offset: -288, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 18, type: spill-slot, offset: -296, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 19, type: spill-slot, offset: -304, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 20, type: spill-slot, offset: -312, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 21, type: spill-slot, offset: -320, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 22, type: spill-slot, offset: -328, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 23, type: spill-slot, offset: -336, size: 8, alignment: 8, stack-id: 0 }
|
|
|
|
- { id: 24, type: spill-slot, offset: -8, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
callee-saved-register: '$lr' }
|
|
|
|
- { id: 25, type: spill-slot, offset: -16, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
callee-saved-register: '$fp' }
|
|
|
|
- { id: 26, type: spill-slot, offset: -24, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
callee-saved-register: '$x27' }
|
|
|
|
- { id: 27, type: spill-slot, offset: -32, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
callee-saved-register: '$x28' }
|
|
|
|
body: |
|
|
|
|
bb.0.entry:
|
|
|
|
liveins: $x0, $x1, $d0, $d1, $x27, $x28, $lr
|
|
|
|
|
|
|
|
early-clobber $sp = frame-setup STPXpre killed $x28, killed $x27, $sp, -4 :: (store 8 into %stack.27), (store 8 into %stack.26)
|
|
|
|
frame-setup STPXi killed $fp, killed $lr, $sp, 2 :: (store 8 into %stack.25), (store 8 into %stack.24)
|
|
|
|
$fp = frame-setup ADDXri $sp, 16, 0
|
|
|
|
$x9 = frame-setup SUBXri $sp, 320, 0
|
|
|
|
$sp = ANDXri killed $x9, 7930
|
|
|
|
frame-setup CFI_INSTRUCTION def_cfa $w29, 16
|
|
|
|
frame-setup CFI_INSTRUCTION offset $w30, -8
|
|
|
|
frame-setup CFI_INSTRUCTION offset $w29, -16
|
|
|
|
frame-setup CFI_INSTRUCTION offset $w27, -24
|
|
|
|
frame-setup CFI_INSTRUCTION offset $w28, -32
|
|
|
|
renamable $x8 = ADRP target-flags(aarch64-page) @"\01+[MyObject doWithSize:]"
|
|
|
|
renamable $x8 = ADDXri killed renamable $x8, target-flags(aarch64-pageoff, aarch64-nc) @"\01+[MyObject doWithSize:]", 0
|
|
|
|
renamable $x9 = ADRP target-flags(aarch64-page) @___asan_gen_
|
|
|
|
renamable $x9 = ADDXri killed renamable $x9, target-flags(aarch64-pageoff, aarch64-nc) @___asan_gen_, 0
|
|
|
|
$x10 = ADDXri $sp, 192, 0
|
|
|
|
renamable $x11 = ADRP target-flags(aarch64-page, aarch64-got) @__asan_shadow_memory_dynamic_address
|
|
|
|
renamable $x11 = LDRXui killed renamable $x11, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @__asan_shadow_memory_dynamic_address
|
|
|
|
$x12 = ADRP target-flags(aarch64-page, aarch64-got) @__stack_chk_guard
|
|
|
|
$x12 = LDRXui $x12, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @__stack_chk_guard
|
|
|
|
$x12 = LDRXui killed $x12, 0 :: (dereferenceable invariant load 8 from @__stack_chk_guard)
|
|
|
|
$x13 = ADRP target-flags(aarch64-page, aarch64-got) @__stack_chk_guard
|
|
|
|
$x13 = LDRXui $x13, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @__stack_chk_guard
|
|
|
|
$x13 = LDRXui killed $x13, 0 :: (dereferenceable invariant load 8 from @__stack_chk_guard)
|
|
|
|
STRXui killed renamable $x13, $sp, 39 :: (volatile store 8 into %stack.0.StackGuardSlot)
|
|
|
|
renamable $x11 = LDRXui killed renamable $x11, 0 :: (load 8 from @__asan_shadow_memory_dynamic_address)
|
|
|
|
renamable $x13 = ADDXri renamable $x10, 32, 0, debug-location !35
|
|
|
|
renamable $x14 = ADDXri renamable $x10, 64, 0, debug-location !35
|
|
|
|
$x15 = MOVZXi 35507, 0, debug-location !35
|
|
|
|
$x15 = MOVKXi $x15, 16821, 16, debug-location !35
|
|
|
|
STRXui killed renamable $x15, $sp, 24, debug-location !35 :: (store 96 into %stack.3.MyAlloca, align 32)
|
|
|
|
STRXui killed renamable $x9, $sp, 25, debug-location !35 :: (store 96 into %stack.3.MyAlloca + 1, align 32)
|
|
|
|
STRXui killed renamable $x8, $sp, 26, debug-location !35 :: (store 96 into %stack.3.MyAlloca + 2, align 32)
|
|
|
|
renamable $x8 = UBFMXri renamable $x10, 3, 63, debug-location !35
|
|
|
|
renamable $x9 = ADDXrs renamable $x11, renamable $x10, 67, debug-location !35
|
|
|
|
$x15 = MOVZXi 61937, 0, debug-location !35
|
|
|
|
$x15 = MOVKXi $x15, 61937, 16, debug-location !35
|
|
|
|
$x15 = MOVKXi $x15, 62194, 48, debug-location !35
|
|
|
|
STRXroX killed renamable $x15, renamable $x8, renamable $x11, 0, 0, debug-location !35 :: (store 8 into %ir.15, align 1)
|
|
|
|
renamable $x15 = ADDXrs renamable $x8, renamable $x11, 0, debug-location !35
|
|
|
|
$w16 = MOVZWi 62451, 0, debug-location !35
|
|
|
|
STURHHi killed renamable $w16, killed renamable $x15, 9, debug-location !35 :: (store 2 into %ir.17, align 1)
|
|
|
|
renamable $x8 = ADDXrs killed renamable $x8, renamable $x11, 0, debug-location !35
|
|
|
|
$w16 = MOVZWi 243, 0, debug-location !35
|
|
|
|
STRBBui killed renamable $w16, killed renamable $x8, 11, debug-location !35 :: (store 1 into %ir.19)
|
|
|
|
DBG_VALUE renamable $x13, 0, !36, !DIExpression(DW_OP_deref), debug-location !37
|
|
|
|
DBG_VALUE renamable $x14, 0, !38, !DIExpression(DW_OP_deref), debug-location !44
|
|
|
|
$x8 = ORRXrs $xzr, $x13, 0
|
|
|
|
renamable $x15 = UBFMXri renamable $x8, 3, 63
|
|
|
|
renamable $w16 = LDRHHroX killed renamable $x15, renamable $x11, 0, 0 :: (load 2 from %ir.24)
|
|
|
|
renamable $w16 = UBFMWri killed renamable $w16, 0, 15
|
|
|
|
STRXui killed $x1, $sp, 21 :: (store 8 into %stack.4)
|
|
|
|
STRDui killed $d1, $sp, 20 :: (store 8 into %stack.5)
|
|
|
|
STRDui killed $d0, $sp, 19 :: (store 8 into %stack.6)
|
|
|
|
STRXui killed $x0, $sp, 18 :: (store 8 into %stack.7)
|
|
|
|
STRXui killed $x13, $sp, 17 :: (store 8 into %stack.8)
|
|
|
|
DBG_VALUE $sp, 0, !36, !DIExpression(DW_OP_plus_uconst, 136, DW_OP_deref, DW_OP_deref), debug-location !37
|
|
|
|
STRXui killed $x14, $sp, 16 :: (store 8 into %stack.9)
|
|
|
|
DBG_VALUE $sp, 0, !38, !DIExpression(DW_OP_plus_uconst, 128, DW_OP_deref, DW_OP_deref), debug-location !44
|
|
|
|
STRXui killed $x10, $sp, 15 :: (store 8 into %stack.10)
|
|
|
|
STRXui killed $x12, $sp, 14 :: (store 8 into %stack.11)
|
|
|
|
STRXui killed $x11, $sp, 13 :: (store 8 into %stack.12)
|
|
|
|
STRXui killed $x9, $sp, 12 :: (store 8 into %stack.13)
|
|
|
|
STRXui killed $x8, $sp, 11 :: (store 8 into %stack.14)
|
|
|
|
CBZW killed renamable $w16, %bb.2
|
|
|
|
|
|
|
|
bb.1 (%ir-block.27):
|
|
|
|
successors:
|
|
|
|
|
|
|
|
$x0 = LDRXui $sp, 11 :: (load 8 from %stack.14)
|
|
|
|
BL @__asan_report_store16, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $sp
|
|
|
|
INLINEASM &"", 1
|
|
|
|
BRK 1
|
|
|
|
|
|
|
|
bb.2 (%ir-block.28):
|
|
|
|
renamable $x8 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_
|
|
|
|
renamable $x8 = ADDXri killed renamable $x8, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_, 0
|
|
|
|
renamable $x9 = ORRXri $xzr, 4097
|
|
|
|
renamable $x8 = LSRVXr killed renamable $x8, killed renamable $x9
|
|
|
|
renamable $x9 = ADRP target-flags(aarch64-page) @"OBJC_CLASSLIST_REFERENCES_$_"
|
|
|
|
renamable $x9 = ADDXri killed renamable $x9, target-flags(aarch64-pageoff, aarch64-nc) @"OBJC_CLASSLIST_REFERENCES_$_", 0
|
|
|
|
$d0 = LDRDui $sp, 19 :: (load 8 from %stack.6)
|
|
|
|
$x10 = LDRXui $sp, 11 :: (load 8 from %stack.14)
|
|
|
|
STRDui killed renamable $d0, renamable $x10, 0 :: (store 8 into %ir.20)
|
|
|
|
$d1 = LDRDui $sp, 20 :: (load 8 from %stack.5)
|
|
|
|
STRDui killed renamable $d1, killed renamable $x10, 1 :: (store 8 into %ir.20 + 8)
|
|
|
|
$x11 = LDRXui $sp, 18 :: (load 8 from %stack.7)
|
|
|
|
STRXui killed renamable $x11, $sp, 23 :: (store 8 into %stack.1.self.addr)
|
|
|
|
$x12 = LDRXui $sp, 21 :: (load 8 from %stack.4)
|
|
|
|
STRXui killed renamable $x12, $sp, 22 :: (store 8 into %stack.2._cmd.addr)
|
|
|
|
renamable $x9 = LDRXui killed renamable $x9, 0, debug-location !50 :: (load 8 from @"OBJC_CLASSLIST_REFERENCES_$_")
|
|
|
|
$x13 = LDRXui $sp, 13 :: (load 8 from %stack.12)
|
|
|
|
renamable $w14 = LDRBBroX killed renamable $x8, killed renamable $x13, 0, 0, debug-location !50 :: (load 1 from %ir.31)
|
|
|
|
renamable $w14 = UBFMWri killed renamable $w14, 0, 7, debug-location !50
|
|
|
|
STRXui killed $x9, $sp, 10 :: (store 8 into %stack.15)
|
|
|
|
CBZW killed renamable $w14, %bb.4, debug-location !50
|
|
|
|
|
|
|
|
bb.3 (%ir-block.34):
|
|
|
|
successors:
|
|
|
|
|
|
|
|
$x0 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_, debug-location !50
|
|
|
|
renamable $x0 = ADDXri $x0, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_, 0, debug-location !50
|
|
|
|
BL @__asan_report_load8, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $sp, debug-location !50
|
|
|
|
INLINEASM &"", 1, debug-location !50
|
|
|
|
BRK 1, debug-location !50
|
|
|
|
|
|
|
|
bb.4 (%ir-block.35):
|
|
|
|
renamable $x8 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_
|
|
|
|
renamable $x8 = ADDXri killed renamable $x8, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_, 0
|
|
|
|
renamable $x1 = LDRXui killed renamable $x8, 0, debug-location !50 :: (invariant load 8 from @OBJC_SELECTOR_REFERENCES_)
|
|
|
|
$x8 = LDRXui $sp, 10 :: (load 8 from %stack.15)
|
|
|
|
$x0 = ORRXrs $xzr, killed $x8, 0, debug-location !50
|
|
|
|
BL @objc_msgSend, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit killed $x1, implicit-def $x0, debug-location !50
|
|
|
|
renamable $x8 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_.2
|
|
|
|
renamable $x8 = ADDXri killed renamable $x8, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_.2, 0
|
|
|
|
renamable $x1 = ORRXri $xzr, 4097
|
|
|
|
renamable $x8 = LSRVXr killed renamable $x8, killed renamable $x1
|
|
|
|
$x1 = LDRXui $sp, 13 :: (load 8 from %stack.12)
|
|
|
|
renamable $w9 = LDRBBroX killed renamable $x8, killed renamable $x1, 0, 0, debug-location !51 :: (load 1 from %ir.40)
|
|
|
|
renamable $w9 = UBFMWri killed renamable $w9, 0, 7, debug-location !51
|
|
|
|
STRXui killed $x0, $sp, 9 :: (store 8 into %stack.16)
|
|
|
|
CBZW killed renamable $w9, %bb.6, debug-location !51
|
|
|
|
|
|
|
|
bb.5 (%ir-block.43):
|
|
|
|
successors:
|
|
|
|
|
|
|
|
$x0 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_.2, debug-location !51
|
|
|
|
renamable $x0 = ADDXri $x0, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_.2, 0, debug-location !51
|
|
|
|
BL @__asan_report_load8, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $sp, debug-location !51
|
|
|
|
INLINEASM &"", 1, debug-location !51
|
|
|
|
BRK 1, debug-location !51
|
|
|
|
|
|
|
|
bb.6 (%ir-block.44):
|
|
|
|
renamable $x8 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_.2
|
|
|
|
renamable $x8 = ADDXri killed renamable $x8, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_.2, 0
|
|
|
|
renamable $x1 = LDRXui killed renamable $x8, 0, debug-location !51 :: (invariant load 8 from @OBJC_SELECTOR_REFERENCES_.2)
|
|
|
|
$x8 = LDRXui $sp, 9 :: (load 8 from %stack.16)
|
|
|
|
$x9 = LDRXui $sp, 17 :: (load 8 from %stack.8)
|
|
|
|
renamable $x10 = UBFMXri renamable $x9, 3, 63, debug-location !51
|
|
|
|
$x11 = LDRXui $sp, 13 :: (load 8 from %stack.12)
|
|
|
|
renamable $w12 = LDRHHroX killed renamable $x10, killed renamable $x11, 0, 0, debug-location !51 :: (load 2 from %ir.51)
|
|
|
|
renamable $w12 = UBFMWri killed renamable $w12, 0, 15, debug-location !51
|
|
|
|
STRXui killed $x1, $sp, 8 :: (store 8 into %stack.17)
|
|
|
|
STRXui killed $x8, $sp, 7 :: (store 8 into %stack.18)
|
|
|
|
STRXui killed $x9, $sp, 6 :: (store 8 into %stack.19)
|
|
|
|
CBZW killed renamable $w12, %bb.8, debug-location !51
|
|
|
|
|
|
|
|
bb.7 (%ir-block.54):
|
|
|
|
successors:
|
|
|
|
|
|
|
|
$x0 = LDRXui $sp, 6 :: (load 8 from %stack.19)
|
|
|
|
BL @__asan_report_load16, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $sp, debug-location !51
|
|
|
|
INLINEASM &"", 1, debug-location !51
|
|
|
|
BRK 1, debug-location !51
|
|
|
|
|
|
|
|
bb.8 (%ir-block.55):
|
|
|
|
$x8 = LDRXui $sp, 6 :: (load 8 from %stack.19)
|
|
|
|
renamable $d1 = LDRDui renamable $x8, 1, debug-location !51 :: (load 8 from %ir.47 + 8)
|
|
|
|
renamable $d0 = LDRDui killed renamable $x8, 0, debug-location !51 :: (load 8 from %ir.47)
|
|
|
|
$x0 = LDRXui $sp, 7 :: (load 8 from %stack.18)
|
|
|
|
$x1 = LDRXui $sp, 8 :: (load 8 from %stack.17)
|
|
|
|
BL @objc_msgSend, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit killed $x1, implicit killed $d0, implicit killed $d1, implicit-def $sp, implicit-def $x0, debug-location !51
|
|
|
|
$x8 = LDRXui $sp, 16 :: (load 8 from %stack.9)
|
|
|
|
renamable $x1 = UBFMXri killed renamable $x8, 3, 63, debug-location !44
|
|
|
|
$lr = LDRXui $sp, 13 :: (load 8 from %stack.12)
|
|
|
|
renamable $w9 = LDRBBroX killed renamable $x1, killed renamable $lr, 0, 0, debug-location !44 :: (load 1 from %ir.61)
|
|
|
|
renamable $w9 = UBFMWri killed renamable $w9, 0, 7, debug-location !44
|
|
|
|
STRXui killed $x0, $sp, 5 :: (store 8 into %stack.20)
|
|
|
|
CBZW killed renamable $w9, %bb.10, debug-location !44
|
|
|
|
|
|
|
|
bb.9 (%ir-block.64):
|
|
|
|
successors:
|
|
|
|
|
|
|
|
$x0 = LDRXui $sp, 16 :: (load 8 from %stack.9)
|
|
|
|
BL @__asan_report_store8, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $sp, debug-location !44
|
|
|
|
INLINEASM &"", 1, debug-location !44
|
|
|
|
BRK 1, debug-location !44
|
|
|
|
|
|
|
|
bb.10 (%ir-block.65):
|
|
|
|
renamable $x8 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_.4
|
|
|
|
renamable $x8 = ADDXri killed renamable $x8, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_.4, 0
|
|
|
|
renamable $x9 = ORRXri $xzr, 4097
|
|
|
|
renamable $x8 = LSRVXr killed renamable $x8, killed renamable $x9
|
|
|
|
$x9 = LDRXui $sp, 5 :: (load 8 from %stack.20)
|
|
|
|
$x10 = LDRXui $sp, 16 :: (load 8 from %stack.9)
|
|
|
|
STRXui killed renamable $x9, renamable $x10, 0, debug-location !44 :: (store 8 into %ir.6)
|
|
|
|
renamable $x11 = LDRXui killed renamable $x10, 0, debug-location !52 :: (load 8 from %ir.6)
|
|
|
|
$x12 = LDRXui $sp, 13 :: (load 8 from %stack.12)
|
|
|
|
renamable $w13 = LDRBBroX killed renamable $x8, killed renamable $x12, 0, 0, debug-location !53 :: (load 1 from %ir.68)
|
|
|
|
renamable $w13 = UBFMWri killed renamable $w13, 0, 7, debug-location !53
|
|
|
|
STRXui killed $x11, $sp, 4 :: (store 8 into %stack.21)
|
|
|
|
CBZW killed renamable $w13, %bb.12, debug-location !53
|
|
|
|
|
|
|
|
bb.11 (%ir-block.71):
|
|
|
|
successors:
|
|
|
|
|
|
|
|
$x0 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_.4, debug-location !53
|
|
|
|
renamable $x0 = ADDXri $x0, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_.4, 0, debug-location !53
|
|
|
|
BL @__asan_report_load8, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $sp, debug-location !53
|
|
|
|
INLINEASM &"", 1, debug-location !53
|
|
|
|
BRK 1, debug-location !53
|
|
|
|
|
|
|
|
bb.12 (%ir-block.72):
|
|
|
|
renamable $x8 = ADRP target-flags(aarch64-page) @OBJC_SELECTOR_REFERENCES_.4
|
|
|
|
renamable $x8 = ADDXri killed renamable $x8, target-flags(aarch64-pageoff, aarch64-nc) @OBJC_SELECTOR_REFERENCES_.4, 0
|
|
|
|
renamable $x1 = LDRXui killed renamable $x8, 0, debug-location !53 :: (invariant load 8 from @OBJC_SELECTOR_REFERENCES_.4)
|
|
|
|
$x8 = LDRXui $sp, 4 :: (load 8 from %stack.21)
|
|
|
|
$x0 = ORRXrs $xzr, killed $x8, 0, debug-location !53
|
|
|
|
BL @objc_msgSend, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit killed $x1, implicit-def $x0, debug-location !53
|
|
|
|
INLINEASM &"mov\09fp, fp\09\09; marker for objc_retainAutoreleaseReturnValue", 1, debug-location !53
|
|
|
|
BL @objc_retainAutoreleasedReturnValue, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $x0, debug-location !53
|
|
|
|
$x8 = LDRXui $sp, 16 :: (load 8 from %stack.9)
|
|
|
|
STRXui killed $x0, $sp, 3 :: (store 8 into %stack.22)
|
|
|
|
$x0 = ORRXrs $xzr, killed $x8, 0, debug-location !54
|
|
|
|
$x8 = ORRXrs $xzr, killed $xzr, 0, debug-location !54
|
|
|
|
$x1 = ORRXrs $xzr, killed $x8, 0, debug-location !54
|
|
|
|
BL @objc_storeStrong, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit killed $x1, debug-location !54
|
|
|
|
$x0 = LDRXui $sp, 3 :: (load 8 from %stack.22)
|
|
|
|
BL @objc_autoreleaseReturnValue, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $x0, debug-location !54
|
|
|
|
$x8 = MOVZXi 13838, 0, debug-location !54
|
|
|
|
$x8 = MOVKXi $x8, 17888, 16, debug-location !54
|
|
|
|
$x1 = LDRXui $sp, 15 :: (load 8 from %stack.10)
|
|
|
|
STRXui killed renamable $x8, killed renamable $x1, 0, debug-location !54 :: (store 8 into %ir.7)
|
|
|
|
$x8 = LDRXui $sp, 12 :: (load 8 from %stack.13)
|
|
|
|
STRXui $xzr, renamable $x8, 0, debug-location !54 :: (store 8 into %ir.79, align 1)
|
|
|
|
STURHHi $wzr, renamable $x8, 9, debug-location !54 :: (store 2 into %ir.81, align 1)
|
|
|
|
STRBBui $wzr, killed renamable $x8, 11, debug-location !54 :: (store 1 into %ir.83)
|
|
|
|
$lr = ADRP target-flags(aarch64-page, aarch64-got) @__stack_chk_guard
|
|
|
|
$lr = LDRXui $lr, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @__stack_chk_guard
|
|
|
|
$lr = LDRXui killed $lr, 0 :: (dereferenceable invariant load 8 from @__stack_chk_guard)
|
|
|
|
renamable $x9 = LDRXui $sp, 39 :: (load 8 from %stack.0.StackGuardSlot)
|
|
|
|
$xzr = SUBSXrs killed renamable $lr, killed renamable $x9, 0, implicit-def $nzcv, implicit-def $nzcv
|
|
|
|
STRXui killed $x0, $sp, 2 :: (store 8 into %stack.23)
|
|
|
|
Bcc 1, %bb.14, implicit $nzcv
|
|
|
|
|
|
|
|
bb.13.SP_return:
|
|
|
|
$x0 = LDRXui $sp, 2 :: (load 8 from %stack.23)
|
|
|
|
$sp = frame-destroy SUBXri $fp, 16, 0, debug-location !54
|
|
|
|
$fp, $lr = frame-destroy LDPXi $sp, 2, debug-location !54 :: (load 8 from %stack.25), (load 8 from %stack.24)
|
|
|
|
early-clobber $sp, $x28, $x27 = frame-destroy LDPXpost $sp, 4, debug-location !54 :: (load 8 from %stack.27), (load 8 from %stack.26)
|
|
|
|
RET undef $lr, implicit killed $x0, debug-location !54
|
|
|
|
|
|
|
|
bb.14.CallStackCheckFailBlk:
|
|
|
|
BL @__stack_chk_fail, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, debug-location !47
|
|
|
|
BRK 1, debug-location !47
|
|
|
|
|
|
|
|
...
|
|
|
|
---
|
|
|
|
name: asan.module_ctor
|
|
|
|
alignment: 2
|
|
|
|
tracksRegLiveness: true
|
|
|
|
frameInfo:
|
|
|
|
stackSize: 16
|
|
|
|
maxAlignment: 8
|
|
|
|
adjustsStack: true
|
|
|
|
hasCalls: true
|
|
|
|
maxCallFrameSize: 0
|
|
|
|
stack:
|
|
|
|
- { id: 0, type: spill-slot, offset: -8, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
callee-saved-register: '$lr' }
|
|
|
|
- { id: 1, type: spill-slot, offset: -16, size: 8, alignment: 8, stack-id: 0,
|
|
|
|
callee-saved-register: '$fp' }
|
|
|
|
body: |
|
|
|
|
bb.0 (%ir-block.0):
|
|
|
|
liveins: $lr
|
|
|
|
|
|
|
|
early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store 8 into %stack.1), (store 8 into %stack.0)
|
|
|
|
frame-setup CFI_INSTRUCTION def_cfa_offset 16
|
|
|
|
frame-setup CFI_INSTRUCTION offset $w30, -8
|
|
|
|
frame-setup CFI_INSTRUCTION offset $w29, -16
|
|
|
|
BL @__asan_init, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp
|
|
|
|
BL @__asan_version_mismatch_check_v8, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp
|
|
|
|
early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load 8 from %stack.1), (load 8 from %stack.0)
|
|
|
|
RET undef $lr
|
|
|
|
|
|
|
|
...
|