-
Clemens Backes authored
If two call instructions were generated right after each other, the source position table could get populated with two entries for the same PC (triggered by the follow-up CL: https://crrev.com/c/2697359). This CL fixes that by slightly changing the carry-over of source positions from nodes to instructions. The call node which has a source position attached generates two instructions: 18: gap () ([rax|R|tp] = v16(-); [rbx|R|t] = v17(-);) [rax|R|t] = ArchCallWasmFunction [immediate:4] #-1 [rax|R|tp] [rbx|R|t] [immediate:5] 19: gap () () ArchJmp [immediate:6] Those are then reversed, and the source position is attached to the first one (the ArchJmp). After reversing it again later, the source position will be set to the pc *after* the call instruction, which in the example happened to be just another call instruction which already had a source position, resulting in this code: [...] 0x388ee467d426 66 e875feffff call 0x388ee467d2a0 ;; wasm stub: WasmThrow 0x388ee467d42b 6b e850feffff call 0x388ee467d280 ;; wasm stub: WasmStackGuard [...] Source positions: pc offset position 6b 5 6b 0 By attaching the source position to the *last* instruction (after reversing), we ensure that it will be generated for an instruction *before* the call, or the call itself if this is the first instruction emitted for that node. R=jgruber@chromium.org Bug: v8:11490, v8:11496 Change-Id: Ie95c87d0d9daea56ca14a811abcd02ac07a4cf84 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2697358 Commit-Queue: Clemens Backes <clemensb@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#72951}
5c237388