New issue
Advanced search Search tips

Issue 899122 link

Starred by 1 user

Issue metadata

Status: Untriaged
Owner: ----
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 3
Type: Bug



Sign in to add a comment

SuperSize: Console Feature: ComputePerLineSize(symbol)

Project Member Reported by agrieve@chromium.org, Oct 26

Issue description

Similar to Disassemble(), it'd be for reasoning about why an individual symbol is larger.

Disassembly can be hard to read, so the idea here is to annotate each line of a function with the number of bytes it's responsible for.

How to do this?

Not really sure of best way, but one way would just be to post-process the Disassembly output:
* Take the file path in the first source line as the "path of interest"
  * Ignore source lines from other files (e.g. .h files)
  * Subtract address ranges between lines in the same file to come up with sizes.


Example desired output:
100    ; ./../../chrome/browser/autofill/android/personal_data_manager_android.cc:108
       ; ConvertJavaStringToUTF8(Java_AutofillProfile_getOrigin(env, jprofile)));
20     ; ./../../chrome/browser/autofill/android/personal_data_manager_android.cc:107
       ; profile->set_origin(

^^ sizes are from delta addresses

Another idea would be to leave the disassembly output the same, but add the indents and highlight with colour lines from the .cc file (or whatever the first path was)



Disassemble() that example is based on:

lib.unstripped/libmonochrome.so:        file format ELF32-arm-little

Disassembly of section .text:
$d.66:

_ZN8autofill12_GLOBAL__N_129PopulateNativeProfileFromJavaERKN4base7android12JavaParamRefIP8_jobjectEEP7_JNIEnvPNS_15AutofillProfileE:
; ./../../chrome/browser/autofill/android/personal_data_manager_android.cc:106
; AutofillProfile* profile) {
 2b3e0fc:       2d e9 f0 4f     svcmi   #15788333
 2b3e100:       95 b0 0b 92     andls   r11, r11, #149
 2b3e104:       07 46 08 90     andls   r4, r8, r7, lsl #12
; ./gen/chrome/browser/jni_headers/chrome/jni/PersonalDataManager_jni.h:927
; org_chromium_chrome_browser_autofill_PersonalDataManager_00024AutofillProfile_clazz(env),
 2b3e108:       08 46 c7 4c     stclmi  p6, c4, [r7], {8}
 2b3e10c:       91 46 0d 46  <unknown>
 2b3e110:       7c 44 a0 47  <unknown>
; ./gen/chrome/browser/jni_headers/chrome/jni/PersonalDataManager_jni.h:924
; jmethodID method_id = base::android::MethodID::LazyGet<
 2b3e114:       c5 4e a0 46     strtmi  r4, [r0], r5, asr #29
 2b3e118:       c5 4a 01 46     strmi   r4, [r1], -r5, asr #21
 2b3e11c:       c5 4b 7e 44     ldrbtmi r4, [lr], #-3013
 2b3e120:       c5 4c 06 f1  <unknown>
 2b3e124:       08 00 7b 44     ldrbtmi r0, [r11], #-8
 2b3e128:       7a 44 7c 44     ldrbtmi r4, [r12], #-1146
 2b3e12c:       00 90 28 46     strtmi  r9, [r8], -r0
 2b3e130:       0c 94 b3 46     ldrtmi  r9, [r3], r12, lsl #8
 2b3e134:       0a 96 9a 46     ldrmi   r9, [r10], r10, lsl #12
 2b3e138:       03 93 a0 47     strmi   r9, [r0, r3, lsl #6]!
; ./gen/chrome/browser/jni_headers/chrome/jni/PersonalDataManager_jni.h:933
; static_cast<jstring>(env->CallObjectMethod(obj.obj(),
 2b3e13c:       bf 4c 02 46  <unknown>
; ./../../base/android/scoped_java_ref.h:61
; jobject obj() const { return obj_; }
 2b3e140:       39 68 28 46     qasxmi  r6, r8, r9
; ./gen/chrome/browser/jni_headers/chrome/jni/PersonalDataManager_jni.h:933
; static_cast<jstring>(env->CallObjectMethod(obj.obj(),
 2b3e144:       7c 44 a0 47  <unknown>
 2b3e148:       06 94 27 46     strtmi  r9, [r7], -r6, lsl #8
; ./gen/chrome/browser/jni_headers/chrome/jni/../../../../../../../../base/android/jni_generator/jni_generator_helper.h:51
; base::android::CheckException(env);
 2b3e14c:       bc 49 04 46  <unknown>
 2b3e150:       28 46 79 44     ldrbtmi r4, [r9], #-1576
 2b3e154:       09 91 88 47     strmi   r9, [r8, r9, lsl #2]
; ./../../base/android/scoped_java_ref.h:76
; JavaRef(JNIEnv* env, jobject obj) : obj_(obj) {}
 2b3e158:       cd e9 0f 45     strmi   lr, [pc, #-2509]
 2b3e15c:       12 ac 0f ae     mcrge   p12, #0, r10, c15, c2, #0
; ./../../chrome/browser/autofill/android/personal_data_manager_android.cc:108
; ConvertJavaStringToUTF8(Java_AutofillProfile_getOrigin(env, jprofile)));
 2b3e160:       20 46 31 46     ldrtmi  r4, [r1], -r0, lsr #12
 2b3e164:       f5 f5 08 d4     strle   pc, [r8], #-1525
; ./../../components/autofill/core/browser/autofill_data_model.h:36
; void set_origin(const std::string& origin) { origin_ = origin; }
 2b3e168:       09 f1 10 00     andseq  pc, r0, r9, lsl #2
 2b3e16c:       21 46 ef f5  <unknown>
 2b3e170:       05 d7 20 46     strtmi  sp, [r0], -r5, lsl #14
; ./../../chrome/browser/autofill/android/personal_data_manager_android.cc:107
; profile->set_origin(
 2b3e174:       ed f5 34 d6     ldrtle  pc, [r4], -sp, ror #11
 

Sign in to add a comment