Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(319)

Unified Diff: test/cctest/test-eh-frame-hdr.cc

Issue 1993653003: Initial support for emitting unwinding information in perf jitdump. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix imprecision in diagram . Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/test-eh-frame-hdr.cc
diff --git a/test/cctest/test-eh-frame-hdr.cc b/test/cctest/test-eh-frame-hdr.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a6e36544b4433af4cd716f025f48210e7055221d
--- /dev/null
+++ b/test/cctest/test-eh-frame-hdr.cc
@@ -0,0 +1,100 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/eh-frame.h"
+#include "src/objects.h"
+#include "test/cctest/cctest.h"
+
+using namespace v8::internal;
+
+TEST(EhFrameHdr) {
+ CcTest::InitializeVM();
+ HandleScope handle_scope(CcTest::i_isolate());
+
+ // The content is not relevant in this test
+ byte buffer[10] = {0};
+ byte unwinding_info[30 + EhFrameHdr::kRecordSize] = {0};
+
+ CodeDesc code_desc;
+ code_desc.buffer = &buffer[0];
+ code_desc.buffer_size = sizeof(buffer);
+ code_desc.constant_pool_size = 0;
+ code_desc.instr_size = sizeof(buffer);
+ code_desc.reloc_size = 0;
+ code_desc.origin = nullptr;
+ code_desc.unwinding_info = &unwinding_info[0];
+ code_desc.unwinding_info_size = sizeof(unwinding_info);
+
+ Handle<Code> code = CcTest::i_isolate()->factory()->NewCode(
+ code_desc, 0, Handle<Object>::null());
+
+ EhFrameHdr eh_frame_hdr(*code);
+ CHECK_EQ(eh_frame_hdr.lut_entries_number(), 1);
+
+ //
+ // Plugging some numbers in the DSO layout shown in eh-frame.cc:
+ //
+ // | ... |
+ // +---------------+ <-- (E) --------
+ // | | ^
+ // | Instructions | 10 bytes | .text
+ // | | v
+ // +---------------+ <---------------
+ // |///////////////|
+ // |////Padding////| 6 bytes
+ // |///////////////|
+ // +---------------+ <---(D)---------
+ // | | ^
+ // | CIE | N bytes* |
+ // | | |
+ // +---------------+ <-- (C) | .eh_frame
+ // | | |
+ // | FDE | 30 - N bytes |
+ // | | v
+ // +---------------+ <-- (B) --------
+ // | version | ^
+ // +---------------+ 4 bytes |
+ // | encoding | |
+ // | specifiers | |
+ // +---------------+ <---(A) | .eh_frame_hdr
+ // | offset to | |
+ // | .eh_frame | |
+ // +---------------+ |
+ // | ... | ...
+ //
+ // (*) the size of the CIE is platform dependent.
+ //
+ int N = EhFrameHdr::kCIESize;
rmcilroy 2016/06/24 09:45:26 No need for this local, just use directly below
Stefano Sanfilippo 2016/06/24 10:36:37 Done.
+ CHECK_EQ(eh_frame_hdr.offset_to_eh_frame(), -(4 + 30)); // A -> D
+ CHECK_EQ(eh_frame_hdr.offset_to_procedure(), -(30 + 6 + 10)); // B -> E
+ CHECK_EQ(eh_frame_hdr.offset_to_fde(), -(30 - N)); // B -> C
+}
+
+TEST(DummyEhFrameHdr) {
+ CcTest::InitializeVM();
+ HandleScope handle_scope(CcTest::i_isolate());
+
+ byte buffer[10] = {0}; // The content is not relevant in this test
+
+ CodeDesc code_desc;
+ code_desc.buffer = &buffer[0];
+ code_desc.buffer_size = sizeof(buffer);
+ code_desc.constant_pool_size = 0;
+ code_desc.instr_size = sizeof(buffer);
+ code_desc.reloc_size = 0;
+ code_desc.origin = nullptr;
+ code_desc.unwinding_info = nullptr;
+ code_desc.unwinding_info_size = 0;
+
+ Handle<Code> code = CcTest::i_isolate()->factory()->NewCode(
+ code_desc, 0, Handle<Object>::null());
+
+ EhFrameHdr eh_frame_hdr(*code);
+ // A dummy header has an empty LUT
+ CHECK_EQ(eh_frame_hdr.lut_entries_number(), 0);
+ // These values should be irrelevant, but check that they have been zeroed.
+ CHECK_EQ(eh_frame_hdr.offset_to_eh_frame(), 0);
+ CHECK_EQ(eh_frame_hdr.offset_to_procedure(), 0);
+ CHECK_EQ(eh_frame_hdr.offset_to_fde(), 0);
+}

Powered by Google App Engine
This is Rietveld 408576698